探索云原生

Posted by ni on December 5, 2024
本文共2694 字 | 大约需要8.98 分钟阅读

1 云原生的定义

  • 过去几年间,云原生的定义一直在变化和发展演进,不同时期不同的公司对此的理解和诠释也不尽相同,因此往往带来一些疑惑和误解。

1.2 Pivotal 对云原生的定义

  • 2015 年,来自 Pivotal公司的技术产品经理 Matt Stine,首次提出了云原生(Cloud Native)的概念。

  • 云原生是一个组合词,“云”表示应用程序运行于分布式云环境中,“原生”表示应用程序在设计之初就充分考虑到了云平台的弹性和分布式特性,就是为云设计的。

  • 在 Matt Stine 所著的《迁移到云原生应用架构》的电子书中,他提出云原生程序应该具备的 5 个主要特征

    • 符合12因素应用(Twelve-Factor Applications)
    • 面向微服务架构(Microservices)
    • 自服务敏捷架构(Self-Service Agile Infrastructure)
    • 基于API的协作(API-Based Collaboration)
    • 抗脆弱性(Antifragility)
  • 随着时间的推移,详细解释这些早期的特征已经没有什么必要,只要知道这些内容研究的是“用更恰当的姿势上云”即可。由此可见,云原生并不是简单地使用云平台运行现有的应用程序,而是能充分利用云计算优势对应用程序进行设计、实现、部署、交付的理念方法。

  • 2017 年 10 月,还是 Matt Stine,在接受 InfoQ 采访时,对云原生的定义做了小幅调整,将云原生架构定义为具有以下 6 个特质

    • 模块化(Modularity):(通过微服务)
    • 可观测性(Observability)
    • 可部署性(Deployability)
    • 可测试性(Testability)
    • 可处理性(Disposability)
    • 可替换性(Replaceability)
  • 现在,在 Pivotal 最新的官方网站中,对云原生的介绍则是关注如图 1-10 所示的 4 个要点:DevOps(开发运维)、Continuous Delivery(持续交付)、Microservices(微服务)、Containers(容器化)

1.3 CNCF 对云原生的定义

2015 年 CNCF(Cloud Native Computing Foundation,云原生计算基金会)建立,开始围绕云原生的概念打造云原生生态体系。

CNCF 简介

CNCF 是 Linux 基金会旗下的基金会,可以理解为一个非盈利组织,成立于 2015 年 12 月 11 日。

成立这个组织的初衷或者愿景,简单说:推动云原生计算可持续发展;帮助云原生技术开发人员快速地构建出色的产品。

起初 CNCF 对云原生的定义包含以下三个方面:

  • 应用容器化:容器化是云原生的基础。
  • 面向微服务架构:实施微服务是构建大规模系统的必备要素。
  • 应用支持容器的编排调度:编排调度是指能够对容器应用的部署、扩展、运行和生命周期进行自动化管理。

随着社区对云原生理念的广泛认可和云原生生态的不断扩大,还有 CNCF 项目和会员的大量增加,起初的定义已经不再适用,因此 CNCF 对云原生进行了重新定位。

CNCF 云原生的定义 v1.0 版本

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。

这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

图 1-11 描述了新定义中的代表技术:不可变基础设施、容器、服务网格、微服务、声明式 API。

  • 容器和微服务在不同时期、不同定义中都有出现;
  • 而服务网格这个在 2017 年才被社区接纳的新技术被醒目的列出来。

服务网格和微服务并列,这表明服务网格已经超越了其原初的角色 —— 仅作为实现微服务的新方法,已经发展为云原生的又一个关键领域。

1.4 总结

  • 云原生不仅仅是一种技术方法,更是一种文化和潮流,代表着云计算时代的必然导向。云原生的出现,使得云能够成为云化战略成功的基石,而非障碍。它充分利用云计算的优势,整合了之前的云三层(IaaS、PaaS、SaaS),使得应用落地更加灵活高效。

  • 云原生的定义是什么并不重要,关键还是理解实施云原生有什么好处,以及实施云原生所涉及的技术/工具、架构设计的依据等

2 云原生目标

  • 云原生的几个关键目标

    • 可用(Available):通过各种机制来实现应用的高可用,以保证服务提供的连续性。
    • 规模(Scale):要求云原生服务能够适应不同的规模(包括但不限于用户规模/部署规模/请求量),并能够在部署时动态分配资源,以便在不同的规模之间快速和平滑的伸缩。典型场景如:
      • 初创公司或新产品线快速成长,用户规模和应用部署规模在短时间内十倍百倍增长。
      • 促销、季节性、节假日带来的访问量波动。
      • 高峰时间段的突发流量等。
    • 敏捷(Agility):快速响应市场需求。
    • 成本(Cost):充分有效的利用资源。
  • 但是这四个核心目标之间又是相互冲突的

    • 规模和敏捷之间的冲突:规模大而又要求敏捷,我们比喻为“巨人绣花”。

    • 规模和可用性之间的冲突:规模大而要求可用性高,我们比喻为“大象起舞”。

    • 敏捷和可用性之间的冲突:敏捷而要求高可用,我们比喻为“空中换发”。

    • 而云原生架构必须要在同时满足这 3 个彼此冲突目标的前提下,还要实现成本控制

  • 为了解决这些问题,各类技术被研发使用,接下来就看看云原生的代表技术都有哪些

3 云原生代表技术

云原生技术总共分为以下6大类:

  • 容器技术
  • 微服务
  • 服务网格
  • 不可变基础设施
  • 声明式设计
  • DevOps