【前言】谈到数字化转型,大多数文章的表达方式大概都是“在时代从互联网进入产业互联网的背景下,所有行业都应该拥抱云计算、大数据和人工智能……”好像只要开出这三味药名就能药到病除。
谈到容器与微服务,人们习惯围绕着 Docker、Kubernetes、Service Mesh、FaaS、DevOps、Serverless……这些技术和概念在微观层面打转,结果在落地过程中出现很大的组织裂痕,举步维艰。
本文试图从企业业务核心诉求出发,在数字化转型核心逻辑下,帮助企业厘清企业应用开发与运维全面向云原生和微服务架构转型的根本原因,以及转型过程中涉及的各种关键问题、相关概念之间的关系。
2013 年诞生的 Docker,让尘封已久的容器技术再一次兴起。围绕编排调度框架的百舸争流,更是将容器推上了风口浪尖。直到 Kubernetes 脱颖而出,成为业界公认的容器编排标准,容器似乎代表了未来的一切,业界对容器技术的追捧更是达到了顶点。
然而,如同 Gartner 经典的技术成熟曲线所描述的,陡然而起的顶峰也意味着即将迎来的一轮“幻灭低谷”。当技术和生态日益蓬勃与成熟,越来越多的从业人员开始从单纯对技术和理念的追捧,转向对容器落地实践与真实价值的思考。无独有偶,另一份 Gartner 调研预测到 2020 年将有 50% 的企业会将容器应用于生产环境中。
这侧面反映出业界,特别是最终用户群体,对通过容器技术达成真正业务价值的期许。对于完成了高光亮相的容器和Kubernetes, 接下来面临的是走向成熟前的最后一次大考:突破“幻灭低谷”,走入真正的生产实践,创造商业价值。
以“微观塑形”的新业务新应用
任何技术走入生产实践的终极目标都是塑造企业创新性竞争力,为业务目标服务。
互联网的出现为企业经营带来巨大改变:全新的业务形态,更为广阔的营销空间,愈发高效的运转效率。面向未来,企业业务将呈现更为彻底的互联网化与数字化:从面向营销、面向人的消费互联网,通过物联智能延伸到面向生产与供应链(物与流程)的产业互联网,同时将更加依赖通过数据挖掘而形成的数据智能进行决策。
企业 IT 将面临超大规模、无数触点、极高并发、极快速迭代更新等新的挑战,需要更高的弹性和敏捷性。
数字化转型 1.0 阶段,企业更加关注基础设施的敏捷性改造,通过系统基础架构(计算、存储、网络)全面云化实现获取敏捷和弹性的第一波升级。而在云计算基础上,完成对更为贴近实际业务的上层应用的架构转型,将更直接的大幅提升业务敏捷性,云原生理念应运而生。
云原生的最基本属性是分布式的,但以何种粒度和维度实现模块化的切分,业界一直在不断探索。Gartner 提出了一种应用(服务)粒度理论,将应用分成:Macroservice、Miniservice、和 Microservice,从粗到细依次对应不同的应用切分粒度。越细的粒度,将带来越大的自由度和敏捷性。
微服务架构就是基于这一理念,将应用进行更细粒度的模块化拆分,并通过服务网格/服务治理技术建立起微服务间的通信网络,从而构建起由独立微小服务组织而成的应用(服务)网络集群。
由于每个个体相对而言是轻量化的,可以单独开发与部署,使得整个微服务应用具备了高度的动态化能力,可以不断的快速迭代演化,也因此具有更强的业务敏捷性和弹性。
Gartner 基于微服务理念进一步提出了 MASA (Mash App and Service Architecture)应用架构,并预测这种理念将成为未来应用架构的主流趋势。 应用开发开始从“宏观造像”逐步走入“微观塑形”。
如同爱因斯坦的相对论为我们打开了量子世界之门,微服务理念开启了应用的“微观世界”。但理论的真正落地,仍然需要一整套庞大的系统工程,包括完整的微服务工具集,与之匹配全新的应用开发与管理流程 ,以及符合微服务特性的基础设施平台。
新流程
DevOps 不仅仅是技术或者实现技术的工具,更是应用开发的一种组织架构和工作流程。DevOps 通过流程的重构希望实现从开发、测试到最终应用部署发布全流程的贯通与高度自动化,从而实现敏捷开发。而正是这种对高度的动态特性的关注,让 DevOps 方法论与微服务理念找到了共识。
新平台
“轻量化”和“标准化”是容器最显著的特性,而这两个特性也恰恰完美匹配微服务应用开发的需求。轻量化匹配对“微观”资源的需求,而标准化的封装则为组网和标准化通信提供了基础。进入“微观”世界最不可避免的是数量剧增带来的管理复杂性,也因此容器的使用从来不从单体出发,而强调调度编排,这也正是 Kubernetes 有如压舱石一般的价值所在。同时,业界也普遍认可容器是运行 DevOps 的最佳平台。
总结下来,企业真正需要的是利用更敏捷灵活的应用交付能力持续锁定创新竞争力,而通过落地微服务完成应用架构升级,则是取得这一目标的关键。
完善的容器平台,提供基础设施资源、完整的工具集、流程链及企业级工作平台,为微服务及 DevOps 的全面落地提供一站式支持,应该成为所有企业容器建设的共同目标。
广义架构的粘合剂
以上是从纵向的视角探讨容器对单体应用的重构,而以横向的视角,从宏观拓展的角度,亦可观察到容器在多种新兴应用场景中起到的粘合作用。
容器和云 & 虚拟化
一方面,容器和虚拟化是互补关系,这一点越来越为大家所认可。在容器最火热的时候,将容器视为虚拟化替代品的论调也不乏受众。
但逐渐,大家在实践中认知到容器与虚拟化各自的专长,也逐步区分开各自的应用场景。两者都是基于分布式的架构理念,但是如之上提及的粒度理论,容器更敏捷更轻量,需要全方位的架构重组,适合短平快的新业务; 而虚拟化粒度更粗,灵活不及容器,但单体更强壮,更适合需要长期稳定运行的重载应用。因此在相当长的时间内,虚拟化和容器将以互补的关系在企业的生产环境中长期共存。
另一方面,容器是可以部署在虚拟化之上运行的。特别是在虚拟化大规模普及的背景下,这样的部署方式更贴近用户的使用习惯和真实环境,使用和运维都十分方便灵活,同时虚拟化在隔离性上的优势也将补强容器的安全性。但代价是在一定程度的性能损耗,特别是网络性能。
与之相应的,是选择将容器直接部署在物理机上,架构上减少一层,会大幅降低运维复杂度和性能损耗,同时资源利用率也将显著提升,最终获得更优的 TCO (总体拥有成本)。
两者各具优势,如何选择则应诉诸于使用场景:更为灵活的虚拟机方案比较适合开发测试环境,而 TCO 和性能更好的物理机方案则更适合长期运行的生产环境。在真实环境中,这两者不是简单的二选一,大多数时候是同时存在互相补充的,在一套完整的云体系中统筹管理运行。
容器和 Serverless & FaaS
通过 Serverless 服务,用户可以直接执行代码来处理负载,从而完全避免了应用运行环境或部署所带来的各类消耗,提供极高的需求响应速度,面对突发性或事件驱动型的负载,Serverless 更具优势。在目前这个阶段,可以说容器为 Serverless 概念的落地奠定了技术基础,不少服务商基于容器技术构建 Serverless 服务。
但未来很有可能,Serverless 只是作为从容器到 FaaS 的过渡阶段的一个代名词,或者以 Serverless 统称类容器的轻量计算平台。轻量化和高度敏捷快速是这类平台的共同特征,能满足关于弹性伸缩、按需按量计费等敏态的需求。
容器和边缘计算 & IoT
边缘计算并不是把云简单复制到边缘,而是一种体系化的计算框架设计。位居中心的云计算平台和边缘会有分工,处理不同场景下的负载。并且这种分工是动态和敏捷的,以适应整个架构的状态和实际场景的需求。
比如在一个摄像头智能识别图像的 IoT 场景中,实现图像识别的人工智能算法应该运行在边缘,以便更快速响应来自摄像头的实时需求,但算法不应该是固定不变的,应该在不断的学习中迭代升级。完成学习的巨大算力可以由中央的云负担,而边缘节点不断快速迭代的需求则可以通过运行容器环境作为承载,同时还可兼顾边缘节点对轻量化的要求。容器之于边缘之于 IoT,是一种更好粘合中心到边缘的架构工具,同时也赋予整个物联网更多的弹性与敏捷。
整体而言,容器作为一种轻量化的计算载体,为更多的场景赋予高度的弹性与敏捷性,也将更多场景有机的粘合在一起。从宏观的视角看,这也是一种广义架构层面的弹性与敏捷,同样在横向上重构了场景连接的方式。
实践中的系统性挑战
真正走入生产实践时,环境现状是复杂多样的,杂糅了多重视角,既需要关注单体应用的开发流程的设计,也需要在宏观全局层面上考量不同平台间的有序衔接,同时兼顾来自管理、组织、人才等层面的挑战。
人才技能
作为最前沿的技术领域,业界对这种新事物充满了好奇。大家最初接触 Docker,都在感慨其便利性。但当 Kubernetes 出现后,很多人都在抱怨其复杂、难用。
一方面, Kubernetes 实际上定义了一套新的标准,里面充斥着大量新概念和方法论,需要时间理解掌握。同时 Kubernetes 作为一个开源项目, 关注核心的发展,而将关于易用性和教育培训的问题交给了广大社区自行解决。
至今,原生 Kubernetes 大量的操作还需要通过命令行指令完成,这与企业 IT 从业者对 UI 化操作的预期还有相当的距离。而种类繁多且但参差不齐的周边套件对初学者而言同样无所适从。而且,Kuberentes 对部署后期的运维也提出了不少新课题,比如容器网络环境、持久化的数据存储方案、运维监控等等。
另一方面, Kubernetes 技术横跨企业的系统和研发,打破了固有工作边界。典型企业场景中,应用开发和系统运维是两个团队,大家拥有不同的工作重心、知识结构和和习惯认知。
运行好一个集群平台需要有强壮的网络和存储支持,而 Kubernetes 在这两个方面还处于不断发展阶段,成熟的方案和先例不多,应用开发人员觉得不可掌控;同时运行容器集群是为了运行应用,不是作为一个 OS 来使用,系统人员又觉得没有头绪,两方都需要理解对方的视角,也需要有全新的理念、方法论、组织架构、工作流程和新的工具,实现两种角色的认知统一和协调推进。
毫无疑问,面对新技能的挑战,企业都会想方设法帮助员工学习提升,但如何确保结果能够得偿所愿呢?
现实的情况大多是,很多从业人员抱持着极大的热忱而来,但面对陡峭的学习曲线又望而却步,很快就丧失了坚持的动力,从而很快从好奇转向了抗拒。也许,降低入门门槛,在没有很专业的知识时就能先使用起来,在之后的使用中在不断深入学习提升,创造一种学习实践的正向循环,是更值得考虑的学习路径。
企业 Legacy
容器带来的创新是颠覆性的,而企业既有的应用架构、基础设施、组织架构、业务流程、协同和管理方法等等,这些行之有年的稳定体系,不会轻易改变,也不可能轻易改变。
从技术层面,作为整体 IT 的一部分,容器平台应该恰如其分的融入整体, 而绝不应该是一个独立的技术体系。而一个全新平台想要融入现有企业 IT 框架,需要提供良好的集成接口,在资源的调度和运维管理实现统一。同时,专业且舒适的用户体验也不可或缺,从使用操作角度最大程度的兼容现有的流程和习惯。
组织和协作机制是另一种隐形的企业 Legacy,包括业务长期发展沉淀下来的工作流程和职能划分,业务需求塑造下的组织形态,甚至企业文化奠定的协作机制,等等。但容器、DevOps 、微服务带来的不止于技术,同样也是方法论层面的重构,对这些既有流程和习惯带来冲击不可避免。
综合来看,容器项目在立项初期,就需要合理安排推进路径,合理选型,尽量减少对现有体系带来大面积冲击,逐步融入,长效演进,避免爆发式急进式的改造。
也可以参考云计算在企业内部落地的过程,很多企业先将云平台应用于部分创新业务场景,通过局部业务熟悉掌握云平台的构建和运维能力之后再推进到全部生产环境。
工具的选择
工具是落地的抓手,一方面要足够丰富以满足最直接的需求,而另一方面也需要足够统一以发挥系统性的价值。
业务人员的需求往往是非常直接的:版本发布频率越来越密集该怎么办、如何做测试和生产的隔离、如何做灰度发布、发布到生产环境之前要有审批……等等,这都是企业每天要面对的具体的事。
容器技术是底层支撑平台,和业务需求之间有一层鸿沟,Kubernetes 也不能完全弥补,更需要一个贯穿应用开发、测试、部署、运行管理全流程的解决方案级平台产品,弥合开发和运维之间的认知、习惯与流程鸿沟。
这为围绕 Kubernetes 而延展出的应用生态提供了巨大的空间:
向下,基于 CNI,CSI 等标准定义,大大小小的存储、网络基础架构厂商不断把服务接驳进 Kubernetes 生态;
向上,面向各类业务应用场景不断涌现出各类项目,有开源的也有商业,比如微服务治理的istio、镜像仓库 Harbor 等等,甚至一些远早于 k8s 的老牌软件也在调整自身去适应容器技术,比如 Jenkins 孵化的 Jenkins x 项目。
横向,传统 IT 领域的巨头如 IBM、VMware,Rad Hat 等,纷纷宣布支持 Kubernetes, 而大部分云服务商则已经将云端 Kubernetes 服务列为标配。
但生态快速生长的同时,碎片化的问题也涌现出来。各功能模块虽然选择丰富,但缺乏整合。好的企业级的容器平台不应该是把各种功能碎片化的拼接起来,提供一个大而杂的技术产品,而应该通过体系化的设计,将企业在业务“微观塑形”过程中涉及的思维、方法、工具与能力有机地整合起来,提供贯通应用开发、测试、部署、运行管理全流程的平台级解决方案,并尽量降低容器技术的使用门槛,简化操作,最大程度兼容企业既有的业务流程和管理习惯。
综上,除了满足功能和业务的设计目标,诸多延展而来的问题也需要统筹考虑,完整而系统化的容器平台,应该包括:
• 流程重塑能力:贯通工具到方法论的完整流程;
•抹平多角色技能与方法 gap 的能力:让多种角色各得其所,同心协力;
• 兼容传统的能力:尊重既有资产,无缝融入现有 IT 管理流程;
• 强大的性能支持:健壮的网络存储支撑,确保高效稳定运行;
•安全性:企业级安全体系,包括多租户环境下的安全隔离机制。
企业级安全体系,包括多租户环境下的安全隔离机制。
只见树木,不见森林,是目前很多企业进行容器建设时的真实写照。对系统化思考的缺失,盲目追捧热点,往往很快因为各种挑战阻力导致整个项目的失败。
企业真正需要的是对架构设计和实现方法进行系统性的顶层设计和统筹考虑,因地制宜地结合现状和能力进行长期规划和平台选型。这是一个系统性工程,同时如果能在平台工具方面获得最大助益,则将大幅降低系统推进的难度,加速转型进程。
展望
有人将容器作为基础计算力使用,可以认为这是初级阶段;有人从业务视角,把一个个业务通过容器交付和运行, 可以认为进入了进阶阶段;而更进一步,以容器平台做依托,去打造诸如物联网、大规模计算平台,Serverless、FaaS 等,即构建平台之上的平台,以一种技术去创造新的技术……
这样的容器进阶之路,清晰的描绘出企业数字化转型的历程,从关注 IT 自身的效率提升起步,逐步将重心转移至对应用和业务的赋能,最终汇聚单点能量打造平台能力,并推动新一轮的技术转型升级。
单一的容器个体是藐小的,但围绕它展开的对动态架构的探索、对微观方法论的思考、对技术价值的反思、和对未来应用的设计,则为我们打开了具有无限可能的未来世界大门。
容器技术的本质,是面向应用和业务价值再思考与再塑造, 而方法则是通过“微观”解构并重塑“宏观”。只有足够深入而丰富的“微观”,才能涌现真正宏大而健壮的“宏观”。人类进入原子时代后掌握了核能,而容器之于我们呢?
换一种视角,重新思考容器。
“大道至简 举重若轻”诚邀您参加将于4月19日在北京北辰洲际酒店举办的KubeSphere 容器平台发布会,轻量级调度全栈云功能,助力企业快速步入云原生之旅,扫码报名(https://www.bagevent.com/event/2420412?bag_track=pr),带你在数字化转型中一步领先!