云原生应用的构建之路
作者 | 巨子嘉
来源 | 巨子嘉(ID:juzijia-club)
转载请联系授权(微信ID:Janusjia)
云计算的拐点已至,进入成熟期,云原生成为驱动云计算发展的新动力引擎,致力于成为新型基础设施,不仅是企业数字化转型的最佳技术路径,同时也成为新兴领域,人工智能、大数据、边缘计算、5G 等底层基础平台。
云原生充分释放了云计算的红利,未来将有更多的业务应用生于云,长于云;为了最大程度发挥云原生的优势,支持好各种复杂个性化场景,云原生技术体系还在不断完善演进,覆盖范围也从集中式中心场景到分散式的边缘场景延伸拓展;理念也在不断总结升华,以应用为中心,从微服务到Service Mesh,再到Serverless层层演进,业驱云长,云随业动。
1.1.云原生的定义
Pivotal对云原生的定义:云原生是一种构建和运行充分利用云计算模型优势的应用程序的方法。
CNCF对云原生的定义:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格(Service Mesh)、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
阿里云对云原生的定义:围绕基础设施、应用架构、开发运维等场景,让系统更加弹性可靠容错、松耦合、易管理可观测,充分发挥云计算的优势,提升技术效率。代表技术为容器、服务网格、不可变基础设施、声明式API和Serverless
总的来说,云原生并不存在明确统一的定义,其代表了一种在云计算基础设施之上,以应用为中心的技术架构与思想理念,是云计算发展演进的一次彻底革命性的突破。云原生助力企业快速构建标准化、弹性高可靠、松耦合、易管理维护的应用系统,提升交付效率,降低运维复杂度。具体表现在如下两个方面:
在技术架构方面,云原生技术架构具备:一)敏捷的弹性伸缩能力,不同于虚拟机分钟级的弹性伸缩响应,云原生应用可实现秒级甚至毫秒级的弹性伸缩响应;二)智能的服务故障自愈能力,云原生应用具有极强的自愈能力,可实现应用故障的自动摘除与重构;三)大规模的复制分发能力,云原生应用标准化的交付制品,可实现跨平台、跨区域,云边一体规模化复制分发部署能力。
在应用价值方面,云原生标准化了异构基础资源,有效解决了异构环境的部署一致性问题,为资源的标准化、自动化、服务化奠定了基础:一)加速数字基础设施升级,解放生产力,降低用户数字化技术的使用门槛,提高资源的利用率;二)重塑研发运营的生产方式,打破组织壁垒,实现研发与运维的跨域协同,提升交付效率;三)实现应用交付的敏捷,大幅提升交付速度,降低业务试错成本,高效响应用户需求,增强用户体验加速业务创新。
1.2.云原生的发展
云计算的发展史,浓缩成两个字,就是抽象;没有技术架构解决不了,如果有,就再抽象一层,云计算的发展史,就是基础设施的不断抽象史,直至无可再抽!
整个云计算发展大致可以分为两个阶段:以虚拟化技术为核心的传统云计算阶段,以及以容器技术为核心的云原生阶段。
传统云计算阶段:虚拟化是传统云计算的基础,简单来说,虚拟化就是在一台物理服务器上,运行多台“虚拟服务器”。这种虚拟服务器,也叫虚拟机(VM,Virtual Machine);通过Hypervisor技术完成物理资源虚拟化的工作,Hypervisor有VMware、KVM、Xen、Virtual Box等多种实现方案,其中KVM(kernel-based virtual machine)是基于Linux内核的虚拟机技术,是目前最热门的单主机虚拟化方案;OpenStack是云管理平台,基于虚拟化技术构建包含计算,存储,网络等产品的基础云平台。
云原生阶段:容器也是虚拟化,但是属于轻量级的虚拟化。虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。容器优势明显:一)启动快(秒级启动);二)资源使用率高(一台主机可以同时运行上千个容器),三)占用空间小(虚拟机一般GB级别,而容器只需要MB级)。Kubernetes是容器管理平台,主要职责是容器编排(Container Orchestration),包含启动容器,自动化部署、扩展和管理容器应用,还有回收容器。相比OpenStack,Kubernetes不仅屏蔽底层差异化的基础设施,提供计算,存储,网络基本云计算能力,更重要的是容器编排,监控治理等应用赋能能力。
1.3.云原生的架构原则
云原生时代需要新的架构理念及原则,来帮助应用更好地利用云的优势,让业务更敏捷、成本更低,同时又具备伸缩性、灵活性。通过遵从这些架构原则,可以确保应用技术架构的先进性及科学性,避免出现大的偏差,云原生七大原则如下:
1.服务化:云原生架构强调在分布式环境下,应用基于服务流量(而非网络流量)的控制策略实现限流降级、熔断隔仓、灰度、反压、零信任安全等。
2.弹性:云原生架构强调应用的部署规模可以随着业务量的变化自动伸缩,无须提前规划容量,准备固定的硬件和软件资源。
3.可观察性:云原生架构强调主动通过日志、链路跟踪和度量等手段,让一次请求的多次服务调用的耗时、返回值和参数都清晰可见,甚至可以下钻到每次三方软件调用、SQL 请求、节点拓扑、网络响应等,实现应用运行的全过程透明可观察。
4.韧性:云原生架构强调多个维度诠释了软件持续服务的能力,提升软件的MTBF(Mean Time Between Failure,平均无故障时间)。从架构设计上,韧性包括服务异步化能力、重试/限流/降级/熔断/反压、主从模式、集群模式、AZ 内的高可用、单元化、跨 region 容灾、异地多活容灾等。
5.自动化:云原生架构强调需要使用 CI/CD流水线自动化交付工具,一方面标准化应用交付过程,另一方面在标准化的基础上进行自动化,通过配置数据自描述和面向终态的交付过程,让自动化工具理解应用交付目标和环境差异,实现整个软件交付和运维的自动化。
6.零信任:云原生架构强调在任何情况下,不应该信任网络内部和外部的任何人/设备/系统,需要基于认证和授权重构访问控制的信任基础,诸如IP地址、主机、地理位置、所处网络等均不能作为可信的凭证。
7.架构演进:云原生架构强调对新建应用,采用云原生架构并且权衡选择侧重的架构原则(通常是选择弹性、敏捷、成本的维度);对存量应用迁移,则需要从架构上考虑迁出迁入成本/风险,对应用云原生重构,通过微服务/应用网关、应用集成、适配器、服务网格、数据迁移、在线灰度等应用和流量进行细粒度控制及治理。
1.4.云原生应用建设之路
云原生平台建设之路,基于Kubernetes云原生容器技术为基础,构建以应用为中心的一站式云原生基础设施平台:
面向平台,建设容器网络、容器存储、容器安全等基础能力;建设容器镜像仓库、容器监控、容器日志等配套设施及监控运维能力。
面向应用,建设对容器化应用的全生命周期管理,包含应用的自动伸缩、配置管理、资源管理、自动运维等基础应用管理能力;应用升级策略,如滚动、灰度等高级管理能力。
面向交付,建设DevOps流水线,对接多种代码仓库,自助配置流水线的阶段和任务等研发过程支持能力。同时结合实际应用场景及团队技术储备能力,还可以深入构建微服务,无服务等高级平台能力,提升应用的分布式及治理能力。
云原生应用建设之路,从容器化,微服务,持续交付到DevOps逐渐推进,难度也在逐渐增加,从单纯的技术,到自动化平台,最后到DevOps整个团队文化与技术配合的大体系,实现基础设施平台及业务系统交付的大跨越。
容器化:容器化就是将应用整合到容器中并且运行起来,容器能够简化应用的构建、部署和运行过程。
微服务:微服务是一种软件架构方式,它将应用构建成一系列按业务领域划分模块的、小的自治服务。在微服务架构中,每个服务都是自我包含的,并且实现了单一的业务功能,服务间通过Restful来通信,以此来实现高内聚,低耦合,去中心化管理的软件架构模式。
持续交付:借助CI/CD自动化平台,从原始需求识别,最终产品部署到生产环境这个过程中,需求以小批量形式在团队的各个角色间顺畅流动,能够以较短地周期完成需求的小粒度频繁交付。
DevOps:团队践行DevOps的敏捷理念,基于DevOps的思想构建一体化能力平台,研发运维团队借助平台完成全流程高效协作,最终实现技术的敏捷到业务敏捷的价值转化。
1.5.总结
总的来说,微服务与容器化技术已常态化,基本上成为当前应用建设的标配。一方面,Service Mesh,CI/CD流水线技术也日趋成熟,DevOps与云原生深度融合相互驱动,在不同领域得到了初步实践;另一方面,技术团队的构成也正发生着与云原生相应的变革,研发运维团队融合一体。
但是在云原生应用实践中,依然存在诸多挑战及陷阱,企业及团队不要盲目将云原生当成是万能圣母。在使用云原生之前,需要综合评估业务真实需求,团队能力现状以及未来的布局。好风凭借力,由简到难,逐步深入,以容器化,微服务为起点,逐渐借助持续交付工具完善流程及团队能力,最后切实落地DevOps理念,实现业务交付及价值交付的闭环。