基础中间件:请遗忘KVM,恣意享受K8s Operator的生命力
知名科幻小说《三体》中,三体人用“质子”锁死地球基础科学以遏制人类的发展,足见基础科学的潜力。
在数字化领域中,Kubernetes正成为这样的“基础科学”,催生繁花似锦的新应用。例如,网易数帆基于Kubernetes Operator打造的基础中间件,展现出了远超第一代中间件云服务(基于虚拟机)的生命力。
传统中间件云服务难解运维之痛
数字化时代,互联网应用开发成为普遍现象,数据库、缓存、消息队列三大基础中间件需求旺盛,各大互联网公司基于虚拟化技术实现了第一代中间件云服务,包括网易数帆的前身网易云也研发了6款基础中间件云服务,实现了运维、效率、弹性及SLA保障等能力提升。
随着时间的推移,第一代基础中间件暴露出了三大缺陷:因为引入KVM虚拟化,性能折损无解,高负载/高压力场景下中间件性能捉襟见肘;因为KVM强隔离,内存难以共享,实现资源成本高;因为中间件与IaaS绑定,交付不灵活。
云原生技术栈催生基础中间件新生
近几年,Docker、Kubernetes等容器技术诞生并飞快发展,网易数帆认为,容器作为一个新的已经广泛落地的基础设施的技术,完美地对应了第一代基础中间件的缺陷—弱隔离有有助于资源共享;轻量化的虚拟化能够消除性能损耗,满足业务在高负载场景;基于镜像进行标准化的封装,有利于高效交付。
更为关键的是,Kubernetes作为云原生技术栈的基石,有强大灵活的调度能力,且与基础设施是松耦合的,这使得应用可以运行于任意云基础设施。另外Kubernetes也是面向大规模生产环境的设计,继承了Google的先进经验。所以用容器技术解决中间件服务化的问题是可行的。
事实上,网易数帆正在基于Kubernetes构建了一套云原生操作系统,它向下能够适配各类的基础设施资源,向上能够作为大数据/AI、中间件、云原生等各种应用负载的统一提供商--这也是Kubernetes的目标之一。中间件作为整个云原生操作系统所要支撑的一类业务,其容器化是顺理成章的。
网易轻舟采用Operator改造中间件
张晓龙介绍,中间件容器化要解决运维问题,尤其以下几个需求必须要考虑的。
第一,生命周期的管理,需要容器化中间件平台能够帮助运维完成对于中间件实例级别的各种运维操作。
第二,高可用的部署,尤其多机部署,一个中间件集群的所有实例,要按照什么样的比例分布在不同的机房,需要扩展Kubernetes的调度器来实现这样的编排。
第三,完善监控告警的指标,对应云原生的Prometheus的可观测性体系。
第四,要确保容器化中间件能够基本达到物理机部署的性能,能够支持核心应用,需要有针对性地优化各类中间件实例的性能。
第五,产品化,需要有与公有云上的RDS、Redis相同的产品能力,能够在任意的基础设施上低成本、灵活交付,必须采用松耦合和高复用的架构设计。
网易数帆选择了Kubernetes Operator的机制。
张晓龙解释说,从深层次理解,Kubernetes构建了一个分布式系统部署运维的所需“原语”,它内置的对象如Pod、Node、Deployment、StatefulSet等,都是为了实现一个典型的无状态分布式系统提出来的。这些内置对象相互配合,使得无状态应用的部署和运维非常高效。
然而,Kubernetes内置的这些对象没办法直接解决中间部署运营的问题,因为中间件是有状态的,且中间件实例之间形成一个复杂的拓扑关系。社区推出的Operator开发框架,正是要实现中间件(或者说有状态应用)的云原生化。
“如果我们把Kubernetes理解成为一个操作系统,那么Operator就是在这个操作系统上开发原生应用的一套开发框架,支持更高效、更自动化、更可扩展的开发方式。”张晓龙说,实现Operator,本质上是封装了特定领域的运维知识与经验,使之能够管理复杂的状态应用。
中间件Operator考验开发实力
从落地的角度,包括兼容老业务需要,中间件容器化过程中存在很多共性问题,有的是中间件有状态的固有属性与Kubernetes本身的矛盾,有的则出于运维团队的习惯。张晓龙介绍了这些问题以及网易数帆的解决办法,包括本地存储增强、容器网络优化、Pod IP保持不变、工程化、性能优化以及产品交付等方面。
以工程化为例,轻舟中间件的研发,因为复用了Kubernetes内置的概念以及它在运维、控制上的一些机制,代码量比第一代基础中间件要减少50%以上。当然,这个代码减少的前提,是开发人员必须非常了解Kubernetes Operator这套“原语”,必须深刻地理解Kubernetes声明式编程的概念。
性能优化方面,网易数帆从CPU、内存、I/O、网卡中断、NUMA等方面采取了一系列的优化策略,使得容器化中间件的性能基本接近于它运行在物理机上的水平。
产品交付,轻舟中间件具备基础中间件的标准能力,并在接入层则增加了一些能力,使得运维人员甚至可以通过Kubectl、YAML文件就可以运维中间件。中间件服务层,轻舟平台基于Operator实现了MySQL、Redis、Kafka、Elasticsearch、ZooKeeper、RocketMQ、RabbitMQ等7个基础中间件服务。这些中间件具备前文提到的核心运维能力,能够跑在任意Kubernetes集群上,此外社区基于Operator开发的一些中间件,也可以跑在轻舟平台上。
云原生中间件未来可期
技术是为业务服务的,中间件最大的痛点在于运维,要把它做到托管的云服务去解决。容器技术的优势,使得采用Operator云原生原语的方式成为实现中间件云服务的最佳实践。
张晓龙还表示,容器化中间件平台未来还可以跑在Kubernetes发行版上,只需要做一些兼容性适配。此外,从云原生操作系统的角度,中间件是其中的一个负载,实现中间件的负载和无状态应用负载的混部,将给企业带来更高的资源利用率,进一步降低成本。