云原生:云原生是什么

Posted HANFAN

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生:云原生是什么相关的知识,希望对你有一定的参考价值。

云原生是什么?

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的基础印象。

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

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

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

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

  1. 容器

  2. 服务网格(Service Mesh)

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

  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

云计算的演进历史

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

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

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

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

2、什么是Native?

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

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 等。

参考资料

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

--- 部门分享

云原生是什么?云原生最近又火了

云原生最近又火了

前言

    最近云原生特别的火,所以就特地了解了一下。本文主要记录云原生是什么,云原生的核心,随着云时代的带来,云原生的正确打开方式以及云原生的优势。给大家分享一下我的学习经验。

一、云原生是什么?

云原生是基于分布部署和统一运管的分布式云 ,以容器、微服务、DevOps等技术为基础建立的一套云技术产品体系。

    我们将名词拆成两部分—云、原生,云是相对于本地而言的,传统的应用都是运行在本地机房的服务器上,而云的应用则是运行在云端(如IAAS、PAAS、SAAS)。原生就是亲生的、土生土长的意思,即应用一诞生就是基于云的,可以直接在云平台上运行或非常轻松的迁移到云平台。我们可以这么来定义云原生:是一种新型技术体系,是云计算未来的发展方向。
    云原生应用要运行在云平台,那么就必须要有云的特点,比如弹性伸缩、分布式、快速部署、快速迭代、高效、持续。这可不止是简单的把原先在物理服务器上的应用迁移到虚拟机里,不止是基础设施和运行平台在云上,应用架构、应用开发方式、应用部署方式、应用维护方式全都要做出改变。

二、云原生的核心

    云原生的四大核心要素便是微服务技术、DevOps、持续交付、容器化。微服务技术使得应用原子化,所有的应用都可以独立的部署、迭代。DevOps使得应用可以快速编译、自动化测试、部署、发布、回滚,让开发和运维一体化。持续交付让应用可以频繁发布、快速交付、快速反馈、降低发布风险。容器使得应用整体开发以容器为基础,形成代码组件复用、资源隔离。

  • 微服务

    微服务是一个独立发布的应用服务,可以作为独立组件升级、灰度或复用等,每个服务可以由专门的组织来单独完成,依赖方只要定好输入和输出口即可完全开发,甚至整个团队的组织架构更精简,沟通成本低、效率高。

  • devOps

    DevOps字面上是组合词——Dev、Ops,即开发人员、运维人员。实际上,DevOps是一组过程、方法与系统的统称,DevOps强调高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的声明周期管理,从而更快、更频繁地交付更稳定的软件。

  • 持续交付

    敏捷开发要求持续交付,因为敏捷开发要求随时有一个版本可以上到大群环境,所以要持续交付。持续交付目的的快速应对客户的需求变化,要求发布非常频繁,所以会存在多个版本同时提供服务的情况,因此需要支持灰度发布/金丝雀发布等。

  • 容器化

    Docker是软件行业最受欢迎的软件容器项目,Docker起到应用隔离作用,为微服务及其所需的所有配置、依赖关系和环境变量移动到全新、无差别的运行环境,移植性强。但是docker对于分布式应用的部署和编排没有考虑,在网络和存储方式都没有提出比较好的方式,包括docker-compose。

三、云原生的正确打开方式

    第一步:你的代码放在云代码平台而非你公司内部私有部署的Git平台上。这就是微软要花大价钱并购Git的原因。这是第一步。为什么要这样做,你接下来就明白了。反正你现在基于云计算、大数据、人工智能、IOT开发具体业务应用的时候,你大量依赖的都是开源平台,就你那点具体业务应用能有多高技术门槛。而且微软接手后的git,对于企业代码的安全保护、备份,比你自己的管理员和运维技术高多了。

    第二步:使用云开发平台。这个开发平台可以基于Web浏览器,也可以基于本地VS Code IDE,但云开发平台的核心本质是:你根本不需要在本地安装那么多依赖框架,你在IDE里面写应用,你打开云上Git平台上面的某个源代码文件,import进一个包,然后在IDE里直接调用API,这个云开发平台会自动补全API,你可以保存代码、你可以编译代码、你可以调试代码、你可以运行代码,和你本地一样,但其实是应用运行在云端,应用也是在云端进行打包、安装部署的。

    第三步:使用云服务OpenAPI。云计算厂商把所有的云服务都开放出来Open API,你可以在这个云开发平台上直接调用这个云计算厂商的所有Open API开放平台里面的API。这些云服务会自己负责自己的安装部署升级、监控、备份、迁移等等。

    通过传统云服务与云开发模式的对比图可以看出传统云需要开发者关注后端服务器,比如数据库、文件存储、负载均衡、异地容灾、网络防护等;而云开发模式弱化了后端和运维的概念,只需要关注业务逻辑,就可以完成微信小程序/小游戏、公众号、Web、移动应用的开发,这样不但大大的降低了应用程序的开发门槛,而且节省了开发者开发部署以及维护的成本。

四、云原生的优势

    结合上面的内容,我给大家整理了几点云原生的优势:

  • 快速上线
    比如之前公司已经有了网站和APP,但是现在小程序火爆,很多公司像开发一款属于自己的小程序,小程序云开发就可以帮我们最短时间内上线。

  • 专注业务逻辑
    云开发模式下,我们不再需要关心前后端联调沟通这些问题,同时我们也不需要考虑后边运维的问题。项目整个复杂型和成为都会大大降低。

  • 提高开发效率
    传统开发模式下,前端需要一个后端配合才能完成一个完整的小程序项目,但是云开发模式提供了非常丰富的API接口,我们通过这些API,就可以很方便的实现数据的存储,文件的上传等操作,大大提升了我们的开发效率。不需要学习新的语言,只需要掌握javascript就可以。

  • 无需运维,节约成本

  • 弹性伸缩
    当性能要求不断增加的时候,云开发可以弹性扩展性能

  • 数据安全
    可以有自己独立的数据库,而且可以设置数据库权限

以上是关于云原生:云原生是什么的主要内容,如果未能解决你的问题,请参考以下文章

[云原生专题-1]:总体-云原生初步探究,什么是云原生,云原生的基本特性

云原生是什么

云原生是什么

“云原生”和云原生应用的价值究竟是什么?

云原生是什么意思?

云原生是个什么玩意