go-micro 生产环境怎么使用的?服务升级是否需要停服? 还有如果当流量增大的时候,需要增加服务器,又是怎么部署的,一般生产环境是不是 go-micro 独立部署在一台服务器上?如果需要搭建集群又是怎么实现的?
1
misaka19000 2018-10-22 19:36:31 +08:00 via Android
keepalived
|
2
heww 2018-10-22 21:09:13 +08:00 1
client 有重试机制的话,不需要停止服务,每个 srv 部署多份就可以了。
go-micro 只是一套 lib,每个 srv,api 运行自己的代码逻辑。它们向 registry 中注册自己的信息,client 根据名称从 registry (默认是 consul) 中获取 srv 的地址 ( ip:port )然后发送 http 请求 (这个看具体选择的 transport )。 有单点故障的是 consul 这种 registry,但 consul 可以部署集群。 |
3
heww 2018-10-22 21:14:40 +08:00 1
我们在好几个项目中使用过了 go-micro,用起来还算顺手。
用 protobuf 做数据编码的话,注意 zero 值在 Marshal 到 model 时是会被 ignore 的,这个时候需要使用 FieldMask。 |
4
kaxi OP @heww 请问一下如果部署了多份 srv client 和 srv 的代码应该是怎么样子的? GitHub 上有没有类似的开源项目,我去学习学习
|
5
janxin 2018-10-23 09:55:37 +08:00
go-micro 是 golang 的那个 lib 吗?那个服务状态由服务发服务管理的呀?是不是理解出现了偏差?
|
6
ZSeptember 2018-10-23 11:07:44 +08:00
你应该去了解一下什么叫注册中心。
无状态的服务,扩容的时候,直接起新服务器就可以了,会自动注册到注册中心,然后 consumer 的负载均衡就会发现新的服务实例。 服务升级,如果接口没有 breaking change 也不用停服,一是启动快,二是是服务调用都有重试功能,这个实例不行换下一个实例。 |
7
thomaswang 2019-06-14 11:19:28 +08:00
@heww 如何部署 srv 的代码,是启动新的 srv, 自动注册到 consul, 那如何停止老的 srv 呢, 老的正在提供服务, 那不是要终端了吗
|