最近刚接触 grpc 有个不明白的地方: 官方例子中 grpc 服务端和客户端都是写死了 host 和 port,那么如果由于用户量的上升,grpc 服务端需要扩展到多台,那么这个时候如何处理? grpc 有现成的方案?
1
donyee 2017-08-23 11:45:20 +08:00
实现个 DNS 轮询服务
或者试试 grpc + consul |
2
maemual 2017-08-23 12:41:31 +08:00
了解一下什么叫 服务注册发现
|
3
maemual 2017-08-23 12:42:43 +08:00
简单方案就是服务端前面用 HAProxy,客户端连 HA
|
4
timonwong 2017-08-23 12:56:09 +08:00 1
python 的 grpc 就放弃吧,虽然你可以写 C extension 扩展 resolver,但是要在最开头引入,因为 grpcio 的所有 class,__init__ 都隐含调用 grpc_init(),这样你写的 resolver 就没有用了
c-core 原生支持 dns resolver,target 用 dns:// 开头,不过只支持 A 记录 c-core 的 client side lb 自带了,不需要你自己做,但是参数你要看 C 的代码。 完全没有 go client 那么方便。 最终你可能还是会考虑 @maemual 说的 HAProxy 方案 |
5
cloudzhou 2017-08-23 13:15:42 +08:00
|
6
JohnSmith 2017-08-23 13:30:47 +08:00
go 的话很方便,etcd 的 v3 版本客户端已经提供 grpclb 的实现,几行代码就能使用,而且不仅仅可以简单的负载算法,还可以自己实现一些特定的算法来满足特定需求,比如一致性 hash
@cloudzhou +1 |
7
hand515 2017-08-23 13:37:49 +08:00
Java 版本可以自己实现 Loadbalancer,不过略复杂
|
8
janxin 2017-08-23 15:29:05 +08:00
python 选择 HA 方案挺方便的
|
9
zh5e 2017-08-23 15:34:18 +08:00
用的 aws loadblance 服务
|
10
owt5008137 2017-08-23 15:50:56 +08:00 via Android
这和 grpc 有半毛钱关系?
|
11
0915240 2017-08-23 22:24:45 +08:00
grpc 只负责 rpc,你这个需要的是服务发现与 client 负载均衡。
当然系统化的话就更多了。 |