作者:成富,资深架构师,拥有多年一线开发经验,曾就职于IBM,后移居海外创业,现任公司首席软件工程师,负责基于微服务架构的云原生产品研发。资深技术作家,著有多部中英文技术书籍:《深入理解 Java7 》《Exploring Java9》等。
*本文经作者授权整理发布,内容选自《云原生微服务架构实战精讲》
云原生应用的概念
顾名思义,云原生应用的概念由云和原生两个部分组成,云在这里指的是云平台,也就是平台即服务(Platform as a Service,PaaS);原生应用指的是专门针对云平台而设计和实现的,充分利用了云平台的特性。应用的微服务可以专注于实现业务逻辑,而把微服务架构的复杂度交给云平台来解决。
原生这个词在软件开发中有它独特的含义。原生通常意味着高效和难以移植,也意味着针对特定的平台而设计,可以充分利用平台的特性,因此运行起来非常高效;同样意味着与特定平台的深度绑定,很难移植到其他平台。云原生应用同样具有这两个特征,对于云原生应用来说,难移植并不是一个问题,毕竟迁移到云平台之后,不会再想迁移回去。
云原生应用的特征
与其他应用相比,总结起来,云原生应用有如下 15 个特征:
1、单一代码库
云原生应用必须有单一的代码库,并在版本管理系统中进行追踪。单一代码库可以是一个版本库,也可以是共享同一根目录的多个版本库,其重要性在于每一个代码提交(Commit)都会对应一个不可变的构建版本。在每次代码提交之后,持续集成流程会被触发,最终产生一系列的应用容器镜像,这就在代码提交和构建版本之间建立了一对一的对应关系,这种一对一的关系保证了每个构建版本都是可追踪的,可以比较不同版本之间的代码变化。
对于微服务架构的应用来说,每个应用由多个服务组成,这些服务应该由单一的代码库进行管理,这保证了构建版本的稳定性。如果一个改动涉及到多个服务,则这个改动应该在一次代码提交中完成对所有相关服务的修改;如果服务的代码分散在多个代码库中,则一个改动会被分成多个代码提交,每个代码提交都会触发一次持续集成流程