gRPC负载均衡方案
来源:互联网 发布:cef js 交互 编辑:程序博客网 时间:2024/05/21 14:50
实现方案选择
负载均衡处理方案有三种:
- 负载均衡软件 HAProxy, LVS 等
- 客户端进程内负载均衡
- 客户端机器部署独立负载均衡进程 类似QConf-agent
参考负载均衡方案:
https://segmentfault.com/a/1190000008672912
gRPC go client 实现
gRPC go client 采用第二种方式,客户端进程内实现负载均衡。
其基本实现原理:
- 服务启动后gRPC客户端向命名服务器发出名称解析请求,名称将解析为一个或多个IP地址,每个IP地址标示它是服务器地址还是负载均衡器地址,以及标示要使用那个客户端负载均衡策略或服务配置。
- 客户端实例化负载均衡策略,如果解析返回的地址是负载均衡器地址,则客户端将使用grpclb策略,否则客户端使用服务配置请求的负载均衡策略。
- 负载均衡策略为每个服务器地址创建一个子通道(channel)。
- 当有rpc请求时,负载均衡策略决定那个子通道即grpc服务器将接收请求,当可用服务器为空时客户端的请求将被阻塞。
实现代码:https://github.com/liyue201/grpc-lb
当前导出服务实现方式:
客户端:
实现grpc.naming.Resolver接口,实现grpc.naming.Watcher接口,使用grpc自带的RoundRobin Balancer。Resolver使用服务名,返回Watcher,Watcher来提供对etcd 服务key变化的监听。
服务端:
服务端启动时将自己的ip地址注册到etcd,注册为指定服务名。
服务端定时刷新注册的key,防止key过期。
gRPC PHP client 实现
php语言的特殊性,实现类似grpc go client方式的负载均衡有些困难,可以简化实现。
由于php属于工作在nginx+fpm模式下的worker,生命周期在一次请求后就结束,不容易实现对注册中心key的watch功能。
php可以获取到注册中心提供的服务地址,可以直接使用随机或者轮训的方式实现负载均衡。
阅读全文
0 0
- gRPC负载均衡方案
- gRPC服务发现&负载均衡
- gRPC服务发现&负载均衡
- 网络负载均衡方案
- mysql负载均衡 方案
- 负载均衡方案总结
- 负载均衡的方案
- 负载均衡方案总结
- TCP负载均衡方案
- 负载均衡方案
- Impala负载均衡方案
- Impala负载均衡方案
- 负载均衡方案
- Grpc的一个简单的负载均衡类库
- grpc(1):Centos 安装java的grpc服务,使用haproxy进行负载均衡,nginx不支持
- 负载均衡方案实现1
- Discuz!NT负载均衡方案
- 简易WCF负载均衡方案
- 小波变换教程(六)
- java src目录下连接数据库正常,但WebContent目录下的jsp文件连接出现找不到驱动问题
- 15. Hashmap的原理
- 深度剖析Service Mesh服务网格新生代Istio
- List集合中的add和remove的问题
- gRPC负载均衡方案
- 关于继承中(静态方法+私有方法)的覆盖与重写问题
- 3.6 break和continue语句
- 全网最简:秒懂uml类与类之间的关系
- 鼠标点击不选中文字
- 有一组数1,1,2,3,5,8,13....编程算出第13个数是多少?
- 小波变换教程(七)
- Java23种设计模式——备忘录模式
- Bailian2880 句中最长的单词【字符串】