云原生(一):云原生是什么

云原生是什么?

1、云原生产生背景

云计算技术的发展,企业上云已成为趋势,越来越多的企业都已将应用部署到了云上。但是应用上云并不意味着就能充分利用云平台的优势。目前,大部分云化的应用,都是基于传统的软件架构来搭建的,然后再移植到云上去运行,和云平台的整合度非常低,主要表现在以下几个方面:

  1. 操作系统依赖强
    传统应用程序和底层操作系统、硬件、存储和后备服务之间存在紧密的依赖关系,这些依赖关系使得应用程序在跨越云基础设施进行迁移和扩展时非常复杂且有风险。

  2. 系统紧耦合
    传统的企业应用多采用单体架构,将许多不同的功能模块捆绑在一个部署包中,导致功能模块之间产生不必要的依赖,并导致开发和部署过程中丧失敏捷性,无法独立的部署、发布更新、重启。

  3. 手动化扩展
    通过手工管理基础设施,包括手工编写管理服务器、网络和存储的配置脚本。在大规模复杂的操作中,操作人员在诊断问题时会很慢,而且无法大规模地实施。手工制作的自动化脚本还有可能将人为错误硬编码到基础设施中。

  4. 恢复缓慢
    基于虚拟机的基础设施相对于基于微服务的应用程序来说,是缓慢而低效的。因为单个虚拟机启动/关闭的速度很慢,并且在部署应用程序代码之前就会带来巨大的开销。

  5. 瀑布开发
    传统应用的开发模式,IT团队定期发布软件,通常间隔几周或几个月。尽管发布的许多组件已经提前准备好了,并且没有依赖关系,也必须等待版本中的其他组件。客户想要的功能被延迟,企业失去赢得客户和增加收入的机会。

小结

  1. 早期云计算提供了一些基础设施,我们只是对云计算初级的利用,并没有充分发货云计算的优势。(弹性、高可用性、易扩展性)。
  2. 如果想要充分利用云计算,从基础设施、平台、软件架构、开发方式、部署等各个方面和各个阶段都应基于云的特点来重新设计。

2、云原生定义的变化

每个人对云原生的理解都可能不同,就如莎士比亚所说:一千个人眼中有一千个哈姆雷特。

2013年由Pivotal公司的Matt Stine首次提出了云原生(CloudNative)的概念;

2015年Matt Stine在《迁移到云原生应用架构》书中定义了符合云原生架构的几个特征:

  1. 符合 12 因素应用
  2. 面向微服务架构
  3. 自敏捷架构
  4. 基于API协作
  5. 扛脆弱性

在2017年10月,Matt Stine在接受InfoQ采访时,则对云原生的定义做了小幅调整,将Cloud Native Architectures定义为具有以下六个特质:

  1. 模块化(Modularity): (通过微服务)
  2. 可观测性(Observability)
  3. 可部署性(Deployability)
  4. 可测试性(Testability)
  5. 可处理性(Disposability)
  6. 可替换性(Replaceability)

两年后, Pivotal在其官网上将云原生的定义概况为DevOps、持续交付、微服务、容器这四大特征,这也成了很多人对 Cloud Native的基础印象。

img

  1. DevOps:
    开发运维一体化。涉及整个软件的开发周期中的持续开发、持续测试、持续集成、持续部署、持续监控等。(什么是DevOps?
  2. 持续交付
    整个开发过程不停机不"断电"的更新新特性。一般采用敏捷模式小布快跑,反传统瀑布流开发模型,要求开发版本、稳定版本等多版本共存。需要大量流程和工具作为支撑。《发布可靠软件的系统方法》
  3. 微服务
    微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的 API 进行通信的小型独立服务组成。康威定律、ddd等可以指导工作。 (什么是微服务?)
  4. 容器
    容器的本质是与系统其他部分隔离开的一个或一组进程。 (容器的隔离与限制 什么是容器?)

2015 年 Google 主导成立了云原生计算基金会CNCF开始围绕云原生的概念打造云原生生态体系,起初CNCF对云原生的定义包含以下三个方面:

  1. 应用容器化
  2. 面向微服务架构
  3. 应用支持容器的编排调度

2018年,随着云原生生态的扩大,众多主流云计算供应商都加入了CNCF。在6月正式对外公布了更新之后的云原生的定义V1.0版本:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。
云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。

img

  1. 容器

  2. 服务网格(Service Mesh)

    处理服务间通信的专用基础设施层,负责在微服务间进行可靠地请求传递。服务网格通常通过一组轻量级网络代理来实现,这些代理与应用程序代码一起部署,而不需要感知应用程序本身。
    随着规模和复杂性的增长,服务网格包含的实现的功能越来越多,它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控以及通常更加复杂的运维需求,例如 A/B 测试、金丝雀发布、限流、访问控制和端到端认证等
    img

  3. 微服务Micro Service

    微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的 API 进行通信的小型独立服务组成。这些服务由各个小型独立团队负责。
    特性:自主性、专用性
    优势:敏捷性、灵活扩展、轻松部署、技术自由、可重复使用的代码、弹性

  4. 不可变基础设施(Immutable Infrastructure

    任何基础设施的实例(包括服务器、容器等各种软硬件)一旦创建之后便成为一种只读状态,不可对其进行任何更改。如果需要修改或升级某些实例,唯一的方式就是创建一批新的实例以替换。这种思想与不可变对象的概念是完全相同的。

  5. 声明式API(Declarative APIs

    首先,所谓“声明式”,指的就是我只需要提交一个定义好的 API 对象来“声明”,我所期望的状态是什么样子。
    其次,“声明式 API”允许有多个 API 写端,以 PATCH 的方式对 API 对象进行 修改,而无需关心本地原始 YAML 文件的内容。一次能处理多个写操作,并且具 备 Merge 能力。
    最后,也是最重要的,有了上述两个能力,Kubernetes 项目才可以基于对 API 对象的增、删、改、查,在完全无需外界干预的情况下,完成对“实际状态”和“期 望状态”的调谐(Reconcile)过程。

小结

  1. 云原生的定义一直在变
    1. 不同组织有不同的定义: Pivotal & CNCF
    2. 同一个组织在不同时间点有不同的定义
    3. 同一个人在不同时间点也有不同的定义
  2. 云原生的定义未来还会变
    1. CNCF最新的定义:版本v1.0

云原生自身的定义一直在变,这让我们该如何才能准确的理解云原生呢?

3、如何理解云原生(Cloud Native)?

Cloud Native我们拆开来理解,先看看什么是Cloud。

1、什么是Cloud

云计算的演进历史

img

云计算的出现和虚拟化技术的发展和成熟密切相关,2000年前后x86的虚拟机技术成熟后,云计算逐渐发展起来。

img

基于虚拟机技术,陆续出现了IaaS/PaaS/FaaS等形态,以及他们的开源版本

img

2013年docker出现,容器技术成熟,然后围绕容器编排一场大战,最后在2017年底,kubernetes胜出。2015年CNCF成立,并在近年形成了cloud native生态。

img

这是云的形态变化,可以看到:供应商提供的功能越来越多,而客户或者说应用需要自己管理的功能越来越少。

img

2、什么是Native?

img

img

img

img

抛出一个我们自己的理解:云原生代表着原生为云设计。详细的解释是:应用原生被设计为在云上以最佳方式运行,充分发挥云的优势。

CNCF

什么是CNCF

cncf官网:https://www.cncf.io/

CNCF 致力于培育和维护一个厂商中立的开源社区生态,用以推广云原生技术。

从 2015 年 Google 牵头成立 CNCF 以来,云原生技术开始进入公众的视线并取得快速的发展,到 2018 年包括 Google、AWS、Azure、Alibaba Cloud 等大型云计算供应商都加入了云原生基金会 CNCF,云原生技术也从原来的应用容器化发展出包括容器、Service Mesh、微服务、不可变基础设施、Serverless、FaaS 等众多技术方向。

CNCF 是非营利性 Linux 基金会的一部分。他成立的目的是希望打破云巨头的垄断,实际上是希望通过容器和k8s,将提供底层资源的云服务商变得无差异化

云原生Landscape(景观)指南

https://landscape.cncf.io/guide

如果您研究过云原生应用程序和技术,那么您可能见过 CNCF Cloud Native Interactive Landscape。它的庞大规模可能是巨大的,拥有如此多的类别和如此多的技术。

cloud native landscape的目标是将所有云原生开源项目和专有产品编译和组织到类别中,提供当前生态系统的概览。拥有云原生项目或产品的组织可以 提交 PR以请求将其添加到环境中。

CNCF 目前托管了非常多的开源项目,其中有很多我们耳熟能详的项目,例如 Kubernetes、Prometheus、Envoy、Istio、etcd 等。

img

参考资料

CNCF云原生定义
cncf.io
迁移到云原生应用架构
容器的隔离与限制
云原生应用开发“12-Factors”
什么是DevOps?
什么是微服务?
什么是云原生?
什么是容器?
Micro Service
如何更好地使用容器技术实现不可变基础设施
自定义资源
极客时间:深入剖析Kubernetes
持续部署
持续集成
什么是linux容器

--- 部门分享

posted @ 2023-04-03 10:19  HANFAN  阅读(90)  评论(1编辑  收藏  举报