gRPC灰度发布
1.问题:
由于项目需要,使用了gRPC
,开发语言Golang
,每次重启RPC应用,客户端都会受到影响,比如客户端在插数据,但是服务器端因为改了BUG重启,此时客户端受到影响.我们不允许这样,会损失好多钱.
想问gRPC应用如何灰度发布,有没有成熟的解决方案?重启时将原来的长链接保持住,重启后还可以继续服务.
2.gRPC介绍:
项目地址:
https://github.com/grpc/grpc
https://github.com/grpc/grpc-go
gRPC一开始由google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统,面向移动和HTTP/2设计。目前提供C、Java和Go语言版本,分别是:grpc,grpc-java,grpc-go.其中C版本支持C,C++,Node.js,Python,Ruby,Objective-C,PHP和C#支持.
gRPC基于HTTP/2标准设计,带来诸如双向流、流控、头部压缩、单TCP连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
gRPC基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个gRPC服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法,即调用仿佛就在同一台机器。
可以使用不同语言平台进行开发.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我自己解决了,使用负载均衡方案
所需软件参见docker仓库:https://hub.docker.com/_/hapr...
方案:
1.先自己打包一个
Dockerfile
:2.跑起haproxy
haproxy.cfg
如下:3.启动端口为40883-40885一模一样的服务,然后请求使用Haproxy的监听40882端口,会自动负载均衡.
4.如果要重启gRPC服务,只需一个个替换,因为我们的服务都是docker启动的,所以重启较简单.这样又实现了灰度发布.
打开
http://127.0.0.1:8089/stats
,帐号密码:admin
,我们可以看到服务情况:感谢朋友们,因为查了很多资料,都要实现代码, 查看Nginx了文档后,发现现在支持gRPC还不是很好,最后发现TCP支持,Haproxy做得很好.
grpc原生支持负载均衡,目前我也没有接触到很成熟的解决方案,我们这边是这样解决的,通过多个负载,在单机升级的时候利用别的服务器提供服务,实现类似于热更新的功能。当然可能有一些别的更加好的方案,我这里也是提供一个思路。
我们是有多个服务,滚动更新,出现你说的问题的概率比较小,但也是会发生,要看你的是什么样的请求了,如果请求很慢,有可能出现你说的情况
你说的这一个并不是框架的问题,而是运维的问题,常用的解决方案: