查看其它 1 个回答caikai的回答

caikaicaikai系统架构师KYLERC

容器技术本身并不强调持久化,当讨论容器中的数据持久化,本质上是容器中所运行业务的要求。
因此,容器运行要选择什么样的持久化存储,必须要根据容器中运行的业务的特性来选择。

大致上,我觉得可以分为几种情况:

  1. 最简单的,如果容器中运行的是无状态应用(如查询操作),或者状态丢失了也没关系(比如结果可复现,或任何幂等性操作),运行这种应用,容器可能没有持久化存储的必要;
  2. 如果是状态需要持久化的应用,那么又可以具体地进行分析,例如:

    • 如果是非数据库类负载,且是把传统的应用运行于容器,应用通常会基于文件系统进行数据存储,那么考虑基于文件系统的共享式存储比较合适,比如NFS,后端则可以是分布式的,也可以是集中式的,这要根据成本和性能要求进行取舍
    • 如果是非数据库类负载,且是新型的应用,根据云原生应用的最佳实践,我们可以选择对象存储、缓存、消息队列等方式进行数据持久化,总之是通过服务的方式访问后端的持久化存储服务
    • 如果是数据库类服务,出于保证读写性能的考虑,可考虑选择块设备存储。如果要依赖底层存储复制能力进行远程的数据库主备同步,那基本上就要选择集中式的商业化存储才可以提满足

对于一般非数据库类应用,如果可以接受应用的改造,应尽量选择通过服务方式访问持久化存储,这样更符合云原生应用的最佳实践,提高应用的灵活性、迁移性,减少环境依赖。相比之下,如果采用文件系统访问外部共享式存储,存在容量限制(通常多个容器会共享容量)、迁移限制(必须迁移到可以挂载共享卷的节点)、时效性(容器迁移后需要重新挂载,还有可能需要处理挂载失败等异常情况)

对于数据库类负载,为了保证效率和稳定性,通常生产环境中会专门开辟一个区域或特定的高性能节点(如配置有HBA卡)来承载数据库类负载,所以这类负载不太强调迁移性,而读写性能、容量独享更关键,因此使用效率更高的块设备较合适,如果要考虑远程主备复制,那就要考虑更可靠的商业方案

银行 · 2018-05-06
浏览1690

回答者

caikai
系统架构师KYLERC
擅长领域: 云计算容器容器云

caikai 最近回答过的问题

回答状态

  • 发布时间:2018-05-06
  • 关注会员:3 人
  • 回答浏览:1690
  • X社区推广