前端服务如何知道历史服务在节奏中的变化?
How frontend service know the change of history services in cadence?
对于 cadence,历史服务是一个 ringpop,所以如果一个新的历史服务被添加到历史服务中,每个历史服务都会知道一个新的历史服务要加入。但是前端服务需要将请求路由到历史服务。前端服务如何知道还有一项历史服务要加入?
这一切都是通过 ringpop 完成的。
Cadence 将 ringpop 库用于所有服务,包括历史和前端。
https://github.com/uber/ringpop-go
Ringpop 为分片、请求路由和主机发现提供一致的哈希环。
在 Cadence 集群中,所有服务都将使用相同的 ringpop bootstrap 配置,如
这样一来,所有服务都使用同一个一致的散列环,它们可以到达任何服务的任何主机。
如果你使用管理员集群描述命令你可以看到
如下所示:
cadence --address `hostname`:7933 adm cl d
{
"supportedClientVersions": {
"goSdk": "1.5.0",
"javaSdk": "1.5.0"
},
"membershipInfo": {
"currentHost": {
"Identity": "10.42.13.242:7933"
},
"reachableMembers": [
"10.42.13.254:7935",
"10.42.26.5:7939",
"10.42.18.213:7934",
"10.42.13.242:7933",
"10.42.27.210:7939",
"10.42.18.48:7933",
"10.42.18.153:7935"
],
"rings": [
{
"role": "cadence-frontend",
"memberCount": 2,
"members": [
{
"Identity": "10.42.18.48:7933"
},
{
"Identity": "10.42.13.242:7933"
}
]
},
{
"role": "cadence-history",
"memberCount": 1,
"members": [
{
"Identity": "10.42.18.213:7934"
}
]
},
{
"role": "cadence-matching",
"memberCount": 2,
"members": [
{
"Identity": "10.42.13.254:7935"
},
{
"Identity": "10.42.18.153:7935"
}
]
},
{
"role": "cadence-worker",
"memberCount": 2,
"members": [
{
"Identity": "10.42.27.210:7939"
},
{
"Identity": "10.42.26.5:7939"
}
]
}
]
}
}
每个主机可能为不同的服务工作,但他们都彼此认识。
实现代码路径在这里如果你有兴趣https://github.com/uber/cadence/blob/deb0caf06577be007046e5f96ef40bdf3c0bc728/client/history/client.go#L1178
对于 cadence,历史服务是一个 ringpop,所以如果一个新的历史服务被添加到历史服务中,每个历史服务都会知道一个新的历史服务要加入。但是前端服务需要将请求路由到历史服务。前端服务如何知道还有一项历史服务要加入?
这一切都是通过 ringpop 完成的。 Cadence 将 ringpop 库用于所有服务,包括历史和前端。
https://github.com/uber/ringpop-go
Ringpop 为分片、请求路由和主机发现提供一致的哈希环。
在 Cadence 集群中,所有服务都将使用相同的 ringpop bootstrap 配置,如
这样一来,所有服务都使用同一个一致的散列环,它们可以到达任何服务的任何主机。
如果你使用管理员集群描述命令你可以看到 如下所示:
cadence --address `hostname`:7933 adm cl d
{
"supportedClientVersions": {
"goSdk": "1.5.0",
"javaSdk": "1.5.0"
},
"membershipInfo": {
"currentHost": {
"Identity": "10.42.13.242:7933"
},
"reachableMembers": [
"10.42.13.254:7935",
"10.42.26.5:7939",
"10.42.18.213:7934",
"10.42.13.242:7933",
"10.42.27.210:7939",
"10.42.18.48:7933",
"10.42.18.153:7935"
],
"rings": [
{
"role": "cadence-frontend",
"memberCount": 2,
"members": [
{
"Identity": "10.42.18.48:7933"
},
{
"Identity": "10.42.13.242:7933"
}
]
},
{
"role": "cadence-history",
"memberCount": 1,
"members": [
{
"Identity": "10.42.18.213:7934"
}
]
},
{
"role": "cadence-matching",
"memberCount": 2,
"members": [
{
"Identity": "10.42.13.254:7935"
},
{
"Identity": "10.42.18.153:7935"
}
]
},
{
"role": "cadence-worker",
"memberCount": 2,
"members": [
{
"Identity": "10.42.27.210:7939"
},
{
"Identity": "10.42.26.5:7939"
}
]
}
]
}
}
每个主机可能为不同的服务工作,但他们都彼此认识。
实现代码路径在这里如果你有兴趣https://github.com/uber/cadence/blob/deb0caf06577be007046e5f96ef40bdf3c0bc728/client/history/client.go#L1178