许多研究结果表明,当前基于云模式的开发和服务部署,使用容器技术显著增多。
例如,根据 Cloud Native Computing Foundation (CNCF)的客户调查,73%的受访客户在生成环境中运行容器应用程序,其余27%的客户计划在未来使用容器。
除了调查数据,以及媒体相关报道的激增(尽管有些人认为Kubernetes有炒作的成分),但毫无疑问容器是基础设施虚拟化的下一波浪潮。这是因为容器化有很多显而易见的好处:应用程序的可移植性、已于部署配置、更好的可伸缩性、基础设施灵活性、更高的生产力、持续集成以及更高效的资源利用。
与此同时,应用程序的系统架构也发生演变,从数十年前的面向服务架构(SOA)发展到微服务体系架构。运用微服务架构,应用程序被构建为使用定义良好的接口,来进行通信的服务组件。每个微服务组件都是可独立部署和可伸缩的。基于微服务应用程序的设计,考虑了分布式协调、分布式事务控制、基础设施自动化、故障移除和弹性伸缩。
微服务架构与容器紧密关联也不是巧合,因为容器化在不同的微服务组件之间提供了明显自然的边界。并且,使用容器技术并不要求应用程序必须是微服务架构,巨石型应用也可以被容器化,然后一个容器会代表一个整体,或者单实例的可运行应用。
单一容器化应用的一个缺点是,由于应用程序的组件完全耦合在一起,所以即便是做很小部分的改动,也需要对整个容器进行重新构建和部署。随着时间的推移,通常很难在单体模型中维持良好的模块化结构,如果应用程序中的某个部分需要扩容,那么整个应用必须一起扩容,在运维角度看这是低效的。
话句话说,这是众所周知的:许多企业和开发人员已经发现,如果不同时采用微服务架构,就不可能完全享受到迁移到容器的好处。采用基于容器的微服务应用体系,带来的相互增强的好处是非常显著的,缺一不可。理想情况下,任何支持这种现代化工作的工具都将会趋于类似和全面。
静态应用程序是容器初始应用的主要驱动,通常由微服务组件组成,充当着未使用容器动态后端应用的前端。要实现基于容器的基础设施,需将静态和动态的应用程序都迁移至容器。要实现这一点,则需要考虑容器环境中存储和数据管理方面的挑战,以便于更有效的实现容器化。
现在,我们正处于容器化生产部署中动态应用如何进行存储和管理的建设阶段。许多人依赖于外部,筒仓式存储设备不是云/容器环境的组成部分,但也已经发展成熟,而且提供了丰富的数据管理功能,如故障恢复、数据还原、格式化(与镜像相反)和存储分层。
要充分体会到容器化的好处,存储基础设施必须与相同环境中的容器化应用程序运行在相同的环境中。这将大大的简化管理、降低成本,提高资源利用率。达到这一点需要一种新的方法。
存储体系一直想要实现分离数据面板和控制面板,以允许数据(数据面板)和元数据(控制平台)流的独立伸缩。此外,分离平面允许有控制面板驱动数据管理操作,如分层、数据迁移或快照,而不会干扰数据路径活动。
到为目前为止,存储还未实现有效的分离控制面板和数据面板,标准繁琐、附加的增量特性和非最优数据流是需要克服的障碍。然而,容器和微服务的出现为存储领域提供了一个机会,可以把它们抛诸脑后,重新开始。
微服务架构原则能够很自然地应用到容器本机存储系统设计中。例如,控制和数据路径分离就很好的符合“高内聚、低耦合”微服务设计原则。
基于微服务的设计可能是什么样子的?它将带来什么好处?
通过分离控制平台和数据平台,基于微服务的容器本地存储解决方案将具有不同的控制实体(元数据)和数据服务,它们以高度可扩展、分布式的方法,独立联合地提供服务(IO和数据管理),类似于基于微服务的应用程序一样。可以说使用微服务实现存储系统不仅可以实现,而且可以强制分离控制平台和数据面板。
容量规划与性能扩展:基于微服务的容器本地存储系统能够有效地分离数据和控制路径,它将提供多个维度的伸缩性,容量、带宽、IOPS,以允许容量和性能根据需要进行弹性伸缩。不应该低估缩减资源的影响,因为这样灵活性可以资源在应用之间高效共享。
弹性:由于微服务可以自动失败后进行重新启动,因此这种类型的设计提升了应用的弹性变化。
数据管理:许多数据管理操作可以仅有元数据微服务执行,而不影响数据面板。在其他需要操作数据的情况下,可以以最小化性能问题对元数据和数据的操作进行解耦,提高效率。
存储设备支持:由于微服务是独立的,并且运用定义明确的协议进行通信,因此该系统能够实现多种风格的数据面板微服务,驱动多种设备类型。
分层:通过控制这些设备类型之间的分层操作,元数据微服务可以提供进一步的作用,从而更好的实现成本结构和最佳数据结构。
数据迁移:一旦数据和元数据存储被离散的微服务单独维护,多个元数据条目可能引用一个公共数据块,那么文件或逻辑卷等对象可以被虚拟化为轻量级的、元数据专用的对象,这些对象引用的公共数据池,可能跨越不用的设备类型甚至地理位置。这位混合云或者多云的快速部署带来了有益的数据迁移能力。
存储协议和应用支持:将应用程序前端做为微服务,它也可以以多种方式实现,支持不同的存储访问协议,甚至于特定于应用程序的访问,从而提供更大的灵活性。
虽然基于微服务的容器本地存储系统可以提供应用程序和容器所需的灵活性、可伸缩性和可移植性,但是还需要考虑其他问题。例如,对于需要高并发的分布式系统来说,维护强一致性是极其困难的,而对于许多应用程序来说,最终一致性并不是一个选项。虽然这是一个巨大的挑战,但也不是不可能解决,而且这不应该妨碍对基于微服务架构的追求。
微服务和容器已经为当前的业务贡献了重要的价值,随着越来越多的应用程序实现云原生开发,支持这些应用程序的基础设施也将得到发展。基于微服务的容器本地存储方法的灵活性和可扩展性,可以帮助制定满足现代应用程序需求的解决方案,同时消除基础设施的限制。要真正实现容器带来的应用程序现代化的潜力,我们需要采用微服务方法,消除存储解决方案的限制。