阿里云云原生架构实践
上QQ阅读APP看书,第一时间看更新

2.1.2 加快软件迭代速度,降低管理和运行成本

具备云原生架构的应用,能够最大程度地利用云服务提升软件的交付能力,进一步加快软件的迭代速度,降低管理和运行的成本。

(1)面向单机资源变为面向云服务与云API研发

云原生架构对开发人员的最大影响就是,它使编程模型发生了巨大变化。如今,大部分编程语言都包含文件、网络、线程等元素,这些元素虽然为充分利用单机资源带来了好处,但也增加了分布式编程的复杂性,因此市场上不断涌现出大量的框架和产品,意在解决分布式环境中的网络调用、高可用性、CPU争用、分布式存储等问题。而在云平台中,“获取存储”变成了若干个服务,比如,对象存储服务、块存储服务和文件存储服务的访问和使用等。

云原生不仅为开发人员提供了解决上述问题的技术支持,而且通过OpenAPI及开源SDK,提供了解决分布式场景中的高可用性、自动扩缩容、安全、运维升级等诸多挑战的界面。开发人员不用再关心诸如节点宕机后如何在代码中将本地保存的内容同步到远端,或者当业务峰值到来时如何对存储节点进行扩容等问题;运维人员也不用再考虑诸如在发现零安全天问题时如何紧急升级第三方存储软件等问题。

这些改变不仅降低了开发者的工作难度,也大大提高了软件的性能和可维护性。云平台将软硬件能力升级成了服务,使开发人员的开发复杂度和运维人员的运维工作量都得到了极大降低。可以预见,这样的云服务用得越多,开发人员和运维人员的工作就越轻松,那么企业在非核心业务实现上的支出就会从必须负担变得可控。一些开发能力较强的公司,过去往往会将这些第三方软硬件能力的处理交给应用框架(或者公司自研的中间件),而在云计算时代,云平台提供了服务等级协议(Service-Level Agreement,SLA),使得所有软件公司都可以从中获益。开发人员不再需要掌握文件及其分布式处理技术,也不再需要掌握各种复杂的网络技术,技术栈的简化让业务开发变得更敏捷。

(2)高度自动化的软件交付能力

软件开发完成后,需要在公司内外部的各类环境中进行部署和交付,以将软件价值交付给最终客户。公司环境与客户环境之间的差异,以及软件交付与运维人员的技能差异,都会影响软件交付的质量。以往用于填补这些差异的是各种用户手册、安装手册、运维手册和培训文档,容器的出现改变了这一现状。容器就像集装箱一样,以一种标准的方式对软件进行打包,利用容器及其相关技术屏蔽了不同环境之间的差异,提供了标准化的软件交付能力。

对自动化交付而言,还需要能够描述不同环境的工具,使得软件能够“理解”目标环境、交付内容和配置清单。具体来说就是,通过代码识别目标环境的差异,根据交付内容以“面向终态”的方式完成软件的安装、配置、运行和变更。

基于云原生的自动化软件交付相较于当前的人工软件交付,是一个巨大的进步。以微服务为例,应用微服务化以后,往往会被部署到成千上万个节点上,如果系统不具备高度的自动化能力,那么任何一次新业务的上线,都将带来极大的工作量挑战,严重时还会导致业务部署时长超过上线窗口期而不可用。