有状态应用容器化设计方案
有状态应用解释
在分布式应用中,它的多个实例之间,往往有依赖关系,比如主从关系,主备关系。还有就是数据存储类应用,它的多个示例,往往都会在本地磁盘上保存一份数据。而这些实例一但被杀掉,即使重建出来,实例与数据之间的对应关系也已经丢失,从而导致应用失败。所以,这种实例不对等关系,以及实例对外部数据有依赖关系的应用,就被称为有状态应用 (Stateful Application)
有状态应用抽象
对于有状态应用,其实可以将其抽象为两种情况:
- 拓扑状态:这种情况意味着,应用的多个实例之间不是对等关系,这些应用实例,必须按照某种顺序启动,比如节点A要先于节点B启动。如果将AB两个pod都删掉,再次启动也依旧得按照这个顺序,而且新创建出来的Pod。必须和原来的Pod的网络标识一样。这样原先的访问者可以使用同样的方法。访问到新的Pod
- 存储状态:应用的多个实例分别绑定了不同的存储数据,对于这些应用实例来说。当应用因为某些原因导致了宕机,重启后依旧可以正常的读取到数据。
有状态应用特征
- 稳定且唯一的网络标识
- 稳定持久的存储
- 有序,优雅的部署和伸缩
- 有序,自动的更新
本次主要是针对数据存储类的有状态服务Mysql和Redis做在k8s的容器化,在第一阶段稳定后,可以继续拓展,囊括其他的服务如pika,influxdb 等。所以到这里我们可以先把目标缩小一点,改为存储应用容器化。
存储应用容器化关键点
实现存储应用容器化主要有三个关键点,而这个三个关键点可以有多种实现方式,而这三种方式完全解耦。可以进行各种方式的组合。比如想要一个快速用起来,不考虑高可用的,可以支持。想要一个稳定且能用于生产高可用的也可以支持。
关键点
-
唯一网络标识
-
服务依赖关系(一主一从,一主N从)
-
数据持久化


最低0.47元/天 解锁文章
2360

被折叠的 条评论
为什么被折叠?



