使用 K8S 实现高可用的有状态会话
Highly available stateful session implementation with K8S
如何用K8S实现内存state/session复制?例如,网络购物车系统通过网络在集群节点之间复制用户 HTTP 会话,这样如果一个节点出现故障,另一个节点中的进程可以接管用户会话。
我认为K8S有StatefulSet,它使用磁盘存储来保证状态的持久性。如果 pod 关闭,重新启动的 pod 会接管磁盘的状态。但是,将内存中的用户会话持久保存到磁盘的开销很高,而且速度可能不够快。
我想解决方案可能是使用内存缓存服务器或类似 etcd 的系统。这是惯例吗?我的理解是,K8S适合大规模无状态处理,引入StatefulSet是为了解决有状态的情况,但不确定是否适合需要快速状态切换的情况。
请指教
How to implement memory state/session replications with K8S? For
instance, a web shopping cart system replicates the user HTTP sessions
among cluster nodes over the network so that if a node is down, a
process in another node can take over the user sessions.
要存储状态,最好使用 Redis 或内存数据库。
K8S has StatefulSet which uses the disk storages to assure the state
persistency, I think. If a pod is down, the restarted pod takes over
the state form the disk. However, the overhead of persisting in-memory
user sessions to disk is high and may not be fast enough.
你是对的,但也许你以前没有尝试过,我一直在 K8s 中使用 Redis 进行生产,有数百万用户,但从未遇到过问题。如果部署在 K8s 上,Redis 有两个备份密钥的选项。
RDB and Append only-AOF,到现在都没遇到过Redis crashed 左右,但只会因 Out of Memory 而崩溃,因此请确保您的 Key policy 设置正确,例如 LRU[=40] =]左右。
In my understanding, K8S is good for stateless processing in scale
你是对的,但人们一直在使用 Deployment 和 Statefulsets for 运行 Redis 集群和 K8s 中的 Elasticsearch 集群,还具有所有备份和扩展选项。
使用 K8s 配置和管理 DB 很容易,而使用 VM 可扩展性不高。
我们已经 运行 有状态集 Redis、Elasticsearch、RabbitMQ 长期以来在 Prod 中并没有看到很多问题。确保将 SSD 高 IOPS 磁盘连接到 POD,一切顺利。
很好的例子:https://github.com/loopbackio/loopback4-example-shopping/blob/master/kubernetes/README.md
如何用K8S实现内存state/session复制?例如,网络购物车系统通过网络在集群节点之间复制用户 HTTP 会话,这样如果一个节点出现故障,另一个节点中的进程可以接管用户会话。
我认为K8S有StatefulSet,它使用磁盘存储来保证状态的持久性。如果 pod 关闭,重新启动的 pod 会接管磁盘的状态。但是,将内存中的用户会话持久保存到磁盘的开销很高,而且速度可能不够快。
我想解决方案可能是使用内存缓存服务器或类似 etcd 的系统。这是惯例吗?我的理解是,K8S适合大规模无状态处理,引入StatefulSet是为了解决有状态的情况,但不确定是否适合需要快速状态切换的情况。
请指教
How to implement memory state/session replications with K8S? For instance, a web shopping cart system replicates the user HTTP sessions among cluster nodes over the network so that if a node is down, a process in another node can take over the user sessions.
要存储状态,最好使用 Redis 或内存数据库。
K8S has StatefulSet which uses the disk storages to assure the state persistency, I think. If a pod is down, the restarted pod takes over the state form the disk. However, the overhead of persisting in-memory user sessions to disk is high and may not be fast enough.
你是对的,但也许你以前没有尝试过,我一直在 K8s 中使用 Redis 进行生产,有数百万用户,但从未遇到过问题。如果部署在 K8s 上,Redis 有两个备份密钥的选项。
RDB and Append only-AOF,到现在都没遇到过Redis crashed 左右,但只会因 Out of Memory 而崩溃,因此请确保您的 Key policy 设置正确,例如 LRU[=40] =]左右。
In my understanding, K8S is good for stateless processing in scale
你是对的,但人们一直在使用 Deployment 和 Statefulsets for 运行 Redis 集群和 K8s 中的 Elasticsearch 集群,还具有所有备份和扩展选项。
使用 K8s 配置和管理 DB 很容易,而使用 VM 可扩展性不高。
我们已经 运行 有状态集 Redis、Elasticsearch、RabbitMQ 长期以来在 Prod 中并没有看到很多问题。确保将 SSD 高 IOPS 磁盘连接到 POD,一切顺利。
很好的例子:https://github.com/loopbackio/loopback4-example-shopping/blob/master/kubernetes/README.md