“云原生”的应用价值及关键属性解读( 二 )


四、 云原生应用
云原生应用,就是天生具备云计算基因,以云计算的思想构建并适用于云计算环境的应用 。它应该具备我们提到的特性:可以通过网络访问、远端部署执行、可扩展弹性伸缩、共享、按需使用自主服务、高可用、可远程监控计费审计、标准化交付与位置无关等 。有人说轻量、无状态是不是云原生的特征?我们并不认为是 。轻量、无状态是容器的特征,容器非常适合部署微服务应用,但微服务应用并不一定是云原生应用 。
应用云原生思想,可以采用微服务架构、容器、DevOps等技术构建轻量、无状态的云原生应用,使应用具备云端部署、可远程访问、弹性、共享、按需自助服务、高可用、与位置无关等特征,使之天生就具备云的基因,适合云环境部署运行 。云原生十二因素更多的也是从构建云原生应用的角度讨论的 。
(一) 弹性
弹性是云计算的重要特征,理论上不受资源限制,可以无限占用资源(当然需要按使用量付费) 。容器之所以和云原生扯上关系,因为弹性也是容器的重要特征,采用容器很重要的是其弹性能力 。弹性包括弹性使用资源和服务实例弹性扩展能力 。在单实例扩展资源达到瓶颈,则配合负载均衡机制实现容器实例的弹性扩展 。我们谈论云原生应用弹性,应该包括应用使用资源的弹性和应用实例弹性扩展的弹性 。
(二) 共享
云计算分三种类型:IaaS、PaaS、SaaS,这就涉及三个层级的共享:资源共享、平台共享、应用共享 。云原生应用是SaaS层服务,部署于IaaS或PaaS层 。应用有一份基准代码,多份部署,也是共享,是从应用开发角度考虑,但不是云应用共享意义 。
云应用可以对所有人开放,大家共享云应用提供的服务 。云应用需要部署在云计算平台上,使用云计算资源,这就实现了平台共享和资源共享 。
(三) 自治
云应用部署与位置无关,你不知道它会被部署到什么位置,底层对用户透明 。所以云原生应用的依赖包、配置文件、后端服务等就需要和应用一起同生共死,成为一个整体,实现自管理自治理 。
微服务的设计也遵循自治原则,和云原生应用非常相似 。这可能也是把它们放一起讨论的原因 。因此我们在用微服务实现云原生应用的时候,自治是一个重要的判断标准 。这是分布式中心的好处,自成一体 。就像人,每个人都是一个分布式中心,具备自我管理的能力 。
(四) 交付标准化,与位置无关
云应用构建可以在本地或者云端,运行一定在云端,那就要按照一定的标准交付,比如容器镜像,使交付标准化 。标准交付就可以在云端任何支持标准的位置部署,或者根本不需要知道被部署到了什么位置运行,和环境无关 。就像Java曾经宣称的那样: Write Once, Run Anywhere,实现Build Once, Run Anywhere 。
容器的一个好处是应用运行工具标准化,所有的应用都以标准化镜像的方式交付,在标准化的容器里运行 。容器可以运行在任何地方,或者也无需知道它运行在哪里,只需要提交镜像发布运行就可以了 。
(五) 高可用性
多实例部署、弹性、自治等特性是高可用的保证 。采用容器有时候并不能保证应用的稳定性,但可以是敏捷启停、多实例高可用的 。如果需要稳定的高可用机制,容器可能不是最好的选择 。
(六) 可监控审计
用户对应用的访问调用,应用的运行情况状态,不管通过日志或者接口能实时获取到这些信息,用于计量计费、监控和后期审计等 。比如可以根据负载流量实现弹性伸缩 。
(七) 按需访问自助服务

推荐阅读