什么是元原生
[toc]
一、云原生是什么
要理解云原生,可以把云原生拆分为云和原生两部分。
云
云原生的“云”代表“云计算”,因此在了解云原生之前,需要先了解云计算。
云计算的字面意义是通过互联网提供计算资源,其中最为基础的计算资源就是服务器、存储、网络资源等,这些资源是互联网世界的基础设施,因此提供这些资源的租用的服务就叫做 IaaS(Infrastructure as a Service)。显而易见,这些基础设施服务供应商都是业界大佬:AWS(亚马逊云)、Azure(微软云)、阿里云、谷歌云、IBM 云、腾讯云、华为云等。
供应商将大量的基础设施进行统一管理,通过虚拟化等技术手段,形成巨大的可动态分配资源池,大大促进了物理资源的利用率,因此也使得租用成本降低。企业只需要按照使用量进行付费,再不用付出昂贵的设施购买、维护成本。除此之外,云服务还有可随时按需伸缩容量、备份恢复简单、快速部署易于集成等优点。
云资源不仅包含基础设施,在云上搭建的开发平台、应用等都可以作为一种服务提供给用户,这就是Paas(Platform as a Service)和 SaaS(Software as a Service)。根据云服务的开放范围,又可以分为公有云、私有云、混合云。
原生
什么是原生呢?原生就是指土生土长。我们程序在开发设计的时候,在本地自建服务器运行和在云服务器运行,项目的架构设计等方面,都是完全不一样的。
而原生,就是指,应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,要充分利用云上资源的优点,从而使我们的的应用更强大,更迅速、更稳定。
云+原生
云原生应用即专门为在云平台部署和运行而设计的应用。
云原生的英文是Cloud Native,Cloud Native Application 就是指应用从设计开始就是为部署在云环境上的。
云原生计算基金会(CNCF,CLOUD NATIVE COMPUTING FOUNDATION)提供的官方定义如下:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
二、云原生四要素

微服务
几乎每个云原生的定义都包含微服务。
DevOps
这是个组合词,Dev+Ops。实际上DevOps其实是一种软件研发管理的思想,方法论,它追求的是一种没有隔阂的理想的研发协作的状态,可能涉及到的角色有开发、测试、产品、项目管理、运维等等,目标是自动执行软件交付和基础架构更改流程,可支撑快速、频繁、可靠地构建、测试和发布软件,缩短开发周期,增加部署频率,更可靠地发布。
持续交付
持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。
容器化
Docker是应用最为广泛的容器引擎,在思科谷歌等公司的基础设施中大量使用,是基于LXC技术搞的,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡。
三、云原生技术
云原生技术有很多,大体可以分为以下5种:容器、服务网格、声明式API、不可变基础设施、微服务。

容器(Containers)
容器是是一种轻量级、可移植、自包含的软件打包技术,以容器为基础,应用程序封装在容器之中,在容器里运行,实现资源的相对隔离与容器镜像的重复使用,能够使应用程序在几乎任何地方以相同的方式运行。
开发人员只要编写一次应用程序,无须任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上等任意位置运行。这大大简化了开发的工作量,同时对于运维人员也极为友好,不需要再为环境问题而苦恼。使用到的技术包括Docker和k8s。
服务网格(Service Meshes)
服务网格(Service Mesh)是一个专门处理服务与服务之间通讯的基础设施层。它的职责是在由云原生应用组成服务的复杂拓扑结构下进行可靠的请求传送。在实践中,它是一组和应用服务部署在一起的轻量级的网络代理,并且对应用服务透明。
微服务(Microservices)
微服务区别于单体应用而生。传统的单体应用由于耦合度高、扩展性差、迭代缓慢等缺点,已无法适应移动互联时代用户体量以及访问量几何式倍增、用户需求快速变化的现状。微服务便应运而生,其本质上是对传统的单体应用根据业务领域和模块进行划分、解耦,拆分成一个一个相对独立,相互解耦、单独部署、运行的微小应用。
不可变基础设施(Immutable Infrastructure)
不可变基础设施里的“不可变”非常类似于程序设计中的“不可变”概念。程序设计中不可变变量(ImmutableVariable)就是在完成赋值后就不能发生更改,只能创建新的来整体替换旧的。由于具有这样的特性这种变量可以在并发环境下安全的使用。
对于基础设施的不可变性,最基本的就是指运行服务的服务器在完成部署后,就不在进行更改。如果需要以任何方式更新,修复或修改某些内容,则会根据具有相应更改的公共镜像构建新服务器以替换旧服务器。
不可变基础架构的好处包括基础架构中更高的一致性和可靠性,以及更简单,更可预测的部署过程,它可以缓解或完全防止可变基础架构中常见的问题,例如配置漂移和雪花服务器。
声明式API(Deciarative API)
声明式API是一种能够一次处理多个写操作、具备Merge能力的API。区别于命令式API直接发出的让服务器执行的命令,声明式API声明的是期望的状态,系统将不断地调整实际状态,直到与期望状态保持一致。
声明式API是Kubernetes的技术点,它的核心原理,就是当用户向Kubernetes提交了一个API对象的描述之后,Kubernetes会负责为你保证整个集群里各项资源的状态,都与你的API对象描述的需求相一致。更重要的是,这个保证是一项”无条件的”、”没有期限”的承诺:对于每个保存在etcd里的API对象,Kubernetes都通过启动一种叫做”控制器模式”(Controller Pattern)的无限循环,不断检查,然后调节,最后确保整个集群的状态与这个AP!对象的描述一致。
四、云原生的好处
- 快速云原生架构使用敏捷开发和单位,不但可以让企业快速的进行开发,自动化的不做产品,同时还能持续地更新产品,让产品跟得上需求,甚至是引导需求,让企业立于不败之地。
- 弹性扩展云原生架构天生具有云计算的特点,资源可以按需进行伸缩,这样不单提高资源的利用率,也大大降低了企业成本。
- 强壮云原生架构依托于容器编排工去k8s与微服务的组合应用,就拥有了自动恢复能力,容错能力,故障隔离能力,让应用更强。
- 屏蔽底层差异,因为使用的容器化技术应用运行于容器之中,就不需要考虑底层硬件的差异,这大大简化了开发的工作量,同时对于运维人员也极为友好,不需要再为环境问题而苦恼。
转载自:
https://www.yunsucheng.com/archives/6183
https://zhuanlan.zhihu.com/p/566804725