《企业级云原生白皮书项目实战》——第二章 云原生发展历史及现状——2.1云原生的诞生及定义(上) https://developer.aliyun.com/article/1229491
云计算的服务模型可分为以下三种:
1.软件即服务(SaaS):服务商提供基于云基础设施的应用程序并负责应用程序的升级维护等工作。使用者不管理或控制底层云基础设施,包括网络、服务器、操作系统和存储,只能管理有限的特定于用户的应用程序配置。
2.平台即服务(PaaS):服务商提供基于云基础设施的支持应用程序开发、测试、交付等所需的环境。使用者不管理或控制底层云基础设施,包括网络、服务器、操作系统和存储,但可以控制已部署的应用程序,还可以控制应用程序托管环境的配置。
3.基础设施即服务(IaaS):服务商提供计算、存储、网络等基本的计算资源。使用者可以在这些资源中部署和运行任意软件,包括操作系统、中间件、应用程序。使用者不管理或控制底层云基础设施,但可以控制操作系统、存储和部署的应用程序;以及有限的网络组件(例如,主机防火墙)。
从以上云计算服务的特点和服务模型中可以看出,区别于传统的本地服务器,云服务器具有更快的接入效率,更高的弹性能力以及更强的容灾能力。而传统的应用设计模式无法发挥出云服务器的全部优势,因此需要设计一套适应和满足云特性的方法论和技术体系,软件的设计架构、开发方式、部署维护上均做出改变来满足云化,使得软件的开发和构建能够依托于云计算。云原生应用应具有如下的要点:
1.微服务:每个微服务都有一个自治的生命周期,可以独立发展和频繁部署。客户可以只更新软件的一部分,快速部署新功能从而降低破坏整个系统的风险。每个微服务都可以独立扩展,无需将整个应用程序扩展为一个单元,而是仅扩展那些需要更多处理能力,以满足所需性能级别和服务级别协议的服务。细粒度扩展可更好地控制系统,并有助于在扩展系统的某些部分时,无需扩展所有部分来降低总体成本。
2.容器化:容器提供可移植性并保证跨环境的一致性。通过将所有内容封装到一个包中,可以将微服务及其依赖项与底层基础设施隔离开来。可以在托管 Docker 运行时引擎的任何环境中部署容器。容器化工作负载还消除了使用框架、软件库和运行时引擎预先配置每个环境的复杂度。通过共享底层操作系统和主机资源,容器的占用空间比完整的虚拟机小得多。当使用许多独立运行的容器进行大规模操作时,还需要使用Kubernetes编排容器;Kubernetes 是为生产环境而设计的容器调度管理系统,对于负载均衡、服务发现、高可用、滚动升级、自动伸缩等容器云平台的功能要求有原生支持,目前K8S已经是云原生容器管理的事实标准。
3.DevOps:强调的是以开发运维的视角,去构建一套高效完备的CI/CD流程,并通过自动化构建工具及发布系统,来实现软件生命周期的管理。从而使得普通开发人员,能够更快、更频繁地交付更加稳定的软件代码。DevOps可以视作一组实践,旨在缩短将变更应用到生产环境的时间,保障在代码和交付机制方面的软件质量。持续交付(CD)是一种DevOps实践,可以通过自动化机制按需将软件部署到任何环境。随着可部署单元数量的增加,CD是微服务中必不可少的一环。
基于以上的讨论,可以对云原生应用做出定义:云原生应用是一个分布式、弹性和可水平扩展的系统,由多个状态相互隔离的、可独立部署的服务组成。应用程序依据云平台的特点进行设计的,将大量非功能特性(弹性、安全、可用性、可观测性等)交由云设施接管,开发者只需关注实际业务的开发。