有状态集
有状态集 is a 积木用于 Kubernetes 上的有状态工作负载,并具有一定的保证。
稳定且唯一的网络身份
StatefulSet Pod 具有唯一的身份,由序数、稳定的网络身份和稳定的存储组成。
例如,如果您的 StatefulSet 的名称为sharded-svc
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sharded-svc
你有例如3 个副本,这些副本将被命名为<name>-<ordinal>
where ordinal从 0 开始到replicas-1。
您的 Pod 的名称将为:
sharded-svc-0
sharded-svc-1
sharded-svc-2
可以通过 dns-name 访问这些 pod:
sharded-svc-0.sharded-svc.your-namespace.svc.cluster.local
sharded-svc-1.sharded-svc.your-namespace.svc.cluster.local
sharded-svc-2.sharded-svc.your-namespace.svc.cluster.local
鉴于你的无头服务被命名sharded-svc
然后将其部署在命名空间中your-namespace
.
分片或分区
给定前端 -> 后端调用的目标服务的多个副本,我可以可靠地将某个帐户的流量路由到某个端点实例。
你这里描述的是你的有状态服务就是所谓的sharded or 分区的。这并不是 Kubernetes 开箱即用的,但您拥有所需的一切建筑模块对于这种服务。可能存在提供此功能的第三方服务,您可以部署或开发该功能。
分片代理
您可以创建一个服务sharding-proxy
由多个 pod 之一组成(可能来自部署因为它可以是无状态的)。这个应用程序需要监视 pod/service/端点在你的sharded-svc
了解它可以将流量路由到哪里。这可以使用开发客户去或其他替代方案。
该服务实现了您在分片中想要的逻辑,例如帐户号码模3被路由到对应的podordinal
Update:有 3rd 方代理sharding功能,例如韦弗代理
基于 headers/path/body 字段的分片请求
推荐阅读:Weaver:简单的分片
消费分片服务
要使用您的分片服务,客户端将请求发送到您的sharding-proxy
然后应用你的routing or 分片逻辑(例如请求帐户号码模3被路由到对应的podordinal)并将请求转发至复制品 of sharded-svc
符合你的逻辑。
替代解决方案
目录服务:可能更容易实现sharded-proxy
as a 目录服务但这取决于您的要求。客户可以询问您的目录服务我应该发送到哪个 statefulSet 副本帐户号码 X您的服务回复例如sharded-svc-2
客户端的路由逻辑:可能最简单的解决方案是让您的路由逻辑在客户端中,让这个逻辑计算向哪个 statefulSet 副本发送请求。