在互联网初期,Web基础架构从物理服务器开始。早期服务器体型大、噪音大而且价格昂贵,并且需要大量的电力和人力才能维持运行。它们得到广泛的关注,并尽可能长时间地保持运转。与云基础架 构相比,它们也更难以购买和准备应用程序来运行。
01 传统IT到云原生的转变
传统IT
传统IT流程从选择IDC、采购服务器设备到安装部署上线,至少需要2个月的周期。应用上线之后,还需要专业的运维工程师团队,来保障系统的良好运转和数据库高可用,这其实是很庞大的工程和人力投入。
云原生 “云原生”,来自于Cloud Native的直译(其实叫原生云更顺口),拆开来看,Cloud 就是指其应用软件是在云端而非传统的数据中心。Native代表应用软件从一开始就是基于云环境、专门 为云端特性而设计,可充分利用和发挥云平台的弹性+分布式优势,最大化释放云计算生产力。
在云原生出现之前,有3个比较重要的分水岭
第一阶段:自建机房 在云计算出现之前,开发的软件一般运行在各大公司的机房。往往在公司成立初期,用户和数据量较小,软件架构和硬件架构往往比较简单。但是当公司越来越大,数据越来越多的时候,以前的架构已经无法适应大量数据的情况,经常需要对软件进行重构和数据迁移,非常麻烦且数据可靠性低。
不同的业务对于业务的资源需求也不一样,有的小的应用只需要比较少的资源就能运行,但是有些大型应用,需要占用非常大的性能才能运行。
第二阶段:虚拟化

进入大数据时代,传统的硬件分配模型,已不再适合业务的需求,虚拟化技术的开始发展,虚拟化可以摆脱硬件的束缚,业务所需的尽可能多的资源。典型代表 VMware 。
第三阶段:云计算
进入云计算时代,对于中小型的客户,无需自己再去构建一套IT的基础系统,只需要购买云的资源即可。
只需把业务转到云端即可搞定,云端整合底层硬件设备,提供统一的资源调度。云计算作为软件和硬件之间的中间层,动态调度硬件资源,使得数据迁移、架构扩展、集群变更变得非常简单。同时,可以灵活的控制成本。典型代表 阿里云 华为云。
02 云原生特性
一、弹性
弹性计算正是云计算的核心特征,也是云原生技术中容器的重要特征。云原生应用弹性,应该包括应用使用资源的弹性和应用实例弹性扩展的弹性。在单实例扩展资源遭遇瓶颈时,可以配合负载均衡机制实现容器实例的弹性扩展
二、共享
云计算的发展可以摆脱硬件的束缚。业务所需的尽可能多的资源,只需转到云端即可搞定,云端整合底层硬件设备,提供统一的资源调度。云计算作为软件和硬件之间的中间层,动态调度硬件资源,使得数据迁移、架构扩展、集群变更变得非常简单。同时,可以灵活的控制成本。
我们知道云计算可以分为IaaS、PaaS、SaaS三种类型
而云原生应用则是部署在IaaS或PaaS层,通过SaaS层提供开放式服务。
-
IaaS:基础设施服务,基础设施即服务。用户可以申请硬件或虚拟硬件,包括裸机或虚拟机,然后在其上安装操作系统或其他应用程序 。以AWS,阿里、华为云为代表。
-
PaaS:平台服务,平台即服务。用户可以申请安装了操作系统和运行时库等支持应用程序运行所需的软件的物理机或虚拟机,然后在其上安装其他应用程序,但不能修改预装的操作系统和操作环境。
以Heroku和 Cloud Foundry为代表。
-
SaaS:软件服务,软件即服务。用户可以通过网络租用一些软件而不是购买它。比较常见的方式是提供一组账号密码。
使用容器的好处就是可以使得应用以标准化镜像的方式交付和运行,而用微服务实现云原生应用,也正是符合这一自治原则的。
四、按需服务 云应用部署在云端,客户可以根据自己的需求,通过网络访问,自助使用服务,不需要联系云应用管理人员。通常会有个云应用服务目录,每个应用服务都有使用说明,通过服务目录可以找到适合自己满足自身需求的应用。03
原生云应用(NCA)
云原生应用是一个专门为云计算建立的程序。这些程序的设计是为了利用云计算软件交付架构的固有属性,并在云中运行和托管。原生应用程序是专门为某个平台或设备设计的软件。微服务架构被用于云原生应用程序中。这种架构将资源有效地分配给应用程序使用的每个服务,使其能够灵活地适应云架构。 云原生应用程序被DevOps的支持者使用,因为它们有可能提高业务的敏捷性。传统的基于云的单体应用的构思、生产和交付方式不尽相同。
云原生应用的特点:云原生应用架构中的微服务被打包在容器中,通过API进行交互和通信。所有这些组件都使用协调工具进行管理。
以下是这些应用程序的一些关键功能
基于API
API将微服务和容器联系在一起,使维护和安全更容易。它们作为松散链接的服务之间的胶水,允许微服务进行通信。
动态编排的
容器编排系统被用来管理容器的有时复杂的生命周期。资源管理、负载平衡、内部故障后的重启调度,以及在服务器集群节点上配置和部署容器,都由容器协调技术处理。
基于微服务
微服务将一个应用程序划分为一组独立的服务,或模块。每个服务都有自己的数据集,并被设计用来帮助实现某个商业目标。应用程序接口允许这些模块相互通信(API)。
基于容器
容器是一种轻量级虚拟化技术,它在逻辑上隔离了一个程序,使其可以在没有物理资源的情况下运行。微服务被容器分隔开来,防止它们之间的相互作用。它们防止程序使用主机上的所有共享资源。它们还允许创建同一服务的许多实例。
04 云原生的身份管理