【问题标题】:gRPC connection pooling on server side服务器端的 gRPC 连接池
【发布时间】:2020-06-29 15:10:20
【问题描述】:
我有一个要托管在 Azure Kubernetes 服务上的微服务集群。
这些微服务基于 .NET Core 并将
- 通过 gRPC 与本地服务通信
- 使用 SignalR Core 将数据流式传输到客户端应用程序 (Websocket)
在创建和销毁 pod 时,我找不到好的解决方案是“如何保持 gRPC”连接。
对于在混合网络上托管微服务来说,这似乎是一个非常微不足道的问题。我很想听听其他人是如何解决这个问题的。
【问题讨论】:
标签:
azure
kubernetes
.net-core
grpc
azure-aks
【解决方案1】:
在这样的环境中 grpc 的持久性会很困难,因为 pod 根本不是持久性的。我会建议两种方法来处理这种情况
- 在 EKS 和 On Premises Service 之间使用/构建代理,该代理可以保持与本地服务的持久连接打开,但可以在创建/销毁 Pod 时添加/删除与代理的连接。此代理可以充当连接池并为本地服务调用提供更高的吞吐量。
- 不必担心与本地服务连接的持久性(将其视为 rdbms 连接,可以按需创建或销毁,但创建新服务需要一些成本)。如果创建或销毁 pod 的频率不高,这种方法就可以使用。
我建议第二种方法,以防豆荚的创建/销毁过于频繁(每小时很少),因为它的移动部件较少。但如果 Pod 的扩展过于频繁,则应使用方法一。