云原生:云原生是什么

HANFAN HANFAN     2023-04-03     134

关键词:

云原生是什么?

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容器

--- 部门分享

什么是云原生

最近参加了极客时间的云原生培训,准备写点东西记录下学习心得,并且对一些需要深挖的点做个记号想想自己也做了将近4年的DevOps,猛然被这么一问不禁有点懵,忙了半天,什么是云原生呢什么是云原生课堂笔记在公有云、... 查看详情

阿里云李飞飞:什么是云原生数据库

简介: 云原生是一种新型技术体系,是云计算未来的发展方向。今天,阿里云李飞飞将和我们分享何为云原生、云原生如何与分布式有机结合,以及云原生技术如何帮助客户迈入数字原生时代。作者|飞刀来源|阿里技术公众... 查看详情

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

...tps://blog.csdn.net/HiWangWenBing/article/details/122591920目录第1章云原生CloudNative的字面解读第2章云原生诞生的背景2.1云原生的诞生源于互联网业务发展的需求:2.2业务运营企业面临的挑战:2.3应对上述问题的技术和软件工程措施... 查看详情

云原生和云计算是什么?两者有何区别?

...续学习,就很容易被新人所替代,今天给大家讲解一下云原生与云计算的区别,以下是详细的内容:  云原生是什么?  云原生其实在业界没有绝对统一的定义,但是基本上的理解我们可以理解为如下:云+原生,云的意思是... 查看详情

什么是云原生应用?云原生的设计原则有哪些?

1 什么是云原生1.1 云原生起源云原生是一种软件开发方法,它充分利用了云计算,使用开源软件技术栈将应用程序部署为微服务。通常,云原生应用程序构建为在Docker容器中运行的一组微服务,在Kubernetes中编... 查看详情

不懂kubernetes实现云原生是什么体验?

云原生的本质和最终效果要明白什么是云原生,就要先弄明白云计算是什么有什么问题,云计算将计算资源、网络、存储等基础设施统一管理,通过资源规模化和自动化管理,实现降低资源的成本和提高资源的管理效率,云计算... 查看详情

quarkus技术系列「云原生架构原理」在云原生时代下的java“拯救者”是quarkus,那云原生是什么呢?

云原生时代下的Java“拯救者”在云原生时代,其实Java程序是有很大的劣势的,以最流行的springboot/springcloud微服务框架为例,启动一个已经优化好,很多bean需要lazyload的application至少需要3-4秒时间,内存需要几... 查看详情

云原生是什么?它从哪里来?又到哪里去?

...与云计算相关的活动、文章、产品发布,言必谈“云原生”。那么:·云原生到底是什么?·云原生有哪些要核心技术和典型应用场景?·云原生将来会如何发展?·身处云原生时代,开发者如何应对软件开... 查看详情

云原生架构重要组成部分之微服务(代码片段)

...了该技术架构,随着技术与理念的升级迭代,云原生概念应世而起,现在火的一塌糊涂。做为新时代的程序员,我们要抓住云原生的浪潮。这篇文章呢大致分为四部分,第一部分简单谈一下什么是云原生,... 查看详情

kubernetes和云原生

1.云原生相关1.1.什么是云原生CloudNative最早是在2013年由Pivotal公司的MattStine提出的。2015年CNCF(CloudNativeComputingFoudation,云原生计算基金会)成立。官方发布的云原生v1.0定义是:“云原生技术有利于各组织在公有云、私有云和混合... 查看详情

阿里云马涛:什么是操作系统的云原生?

简介: 云原生已经成为IT界最流行的一个定语,似乎不谈云原生就out了,但什么才是真正的云原生?注:本文作者马涛,阿里云智能研究员、阿里巴巴集团内核团队创始人之一、阿里云基础软件部操作系... 查看详情

什么是云原生,跟云计算有什么关系?终于有人讲明白了

导读:云原生到底是什么?作者:阿里集团阿里云智能事业群云原生应用平台来源:大数据DT(ID:hzdashuju)云原生(CloudNative)的概念,最早是由Pivotal于2015年提出的,但是即使到了2019... 查看详情

硬核科普:到底啥是云原生?(代码片段)

本文主要根据课程什么是云原生?_哔哩哔哩_bilibili总结而来,其他参考文章如下:《云原生人才计划之Kubernetes技术图谱》发布!-知乎(zhihu.com)kubernetes-阿里云与CNCF联合推出的云原生技术公开课_哔哩哔哩_bilibili什... 查看详情

硬核科普:到底啥是云原生?(代码片段)

本文主要根据课程什么是云原生?_哔哩哔哩_bilibili总结而来,其他参考文章如下:《云原生人才计划之Kubernetes技术图谱》发布!-知乎(zhihu.com)kubernetes-阿里云与CNCF联合推出的云原生技术公开课_哔哩哔哩_bilibili什... 查看详情

云原生引领全云开发时代

简介: 云原生是近几年最火爆的技术热词之一,几乎所有的云计算产品都会或多或少跟云原生发生关联,云原生正在重塑整个软件的生命周期。但到底什么是云原生?云原生带来的最大的技术创新和未来机会是... 查看详情

云原生的进一步具象化

本文转载自公众号:HelloJava。云原生这个概念已经越来越深入人心,但对“云原生到底是什么?”这个问题,仍然是各种各样的解读,最近对云原生具体是什么有了点感触,于是写下来分享和探讨下。我现在认为云原生其实是让... 查看详情

传统架构vs云原生架构,谈谈为什么我们需要云原生架构?(代码片段)

云原生架构是什么回顾过去十年,数字化转型驱动着技术创新和商业元素的不断融合和重构,可以说,现在已经不是由商业模式决定采用何种技术架构,而是由技术架构决定企业的商业模式。所以无论是行业巨头... 查看详情

云原生:云原生是什么

云原生是什么?1、云原生产生背景云计算技术的发展,企业上云已成为趋势,越来越多的企业都已将应用部署到了云上。但是应用上云并不意味着就能充分利用云平台的优势。目前,大部分云化的应用,都是基于传统的软件架... 查看详情