一、云原生定义
1.1 理解云原生
1.1.1 从字面理解
云原生从字面意思上来看可以分成:
- 云(Cloud)
- 原生(Native)
- 云原生(CloudNative)
1.1.2 由CNCF定义
云原生计算基金会(Cloud Native Computing Foundation,CNCF)成立于2015年12月11日,由谷歌与Linux基金会联合创办,成立这个非盈利组织的目的是为了推广、孵化和标准化云原生相关的技术。
云原生计算基金会(Cloud Native Computing Foundation,CNCF)认为:云原生是一类技术的统称,通过云原生技术,我们可以构建出更易于弹性扩展的应用程序,其包含容器、服务网格、微服务、不可变基础设施和声明式API等相关技术,这些技术能够构建容错性好、易于管理和便于观察的松耦合系统,结合可靠的自动化手段,相关工程师能够轻松对系统作出频繁和可预测的重大变更。
1.2 云与原生之间的关系
- 云是指云计算技术或云计算平台
- 原生就是土生土长
- 云原生表示业务应用原生化,例如:Kubernetes使用声明式部署业务应用,所以众多的产品都在使用声明式方式部署应用
- 使用云原生的好处:
- 业务应用被设计为在云上以最佳方式运行
- 充分发挥云的优势,例如:资源的无限化、扩缩容便利化等特点
1.3 云原生概念由来及最佳实践三个层面
1.3.1 概念由来
- Pivotal公司的Matt Stine于2013年首次提出云原生(CloudNative)的概念.
- 2015年云原生计算基金会(CNCF)成立,最初把云原生定义为包括:容器化封装+自动化管理+面向微服务。
- 到了2018年,CNCF又更新了云原生的定义,把服务网格(Service Mesh)和声明式API给加了进来。
- 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。
- 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。
- 结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
1.3.2 最佳实践三个层面
1)服务编排要实现计算资源弹性化
2) 服务构建和部署要实现高度自动化
3)事件驱动基础设施标准化
1.4 云原生代表技术
1.4.1 微服务
微服务的定义:原有单体应用拆分为多个独立自治的组件,每个组件都可以独立设计、开发、测试、部署和运维,这个组件可以单独提供对外服务,我们称之为微服务。
例如:早期的LNMT WEB部署架构,使用微服务后,每一个组件都可以独立自治、运行、扩容、缩容等
各组件之间可通过轻量的Restful风格接口进行交互和协同
1.4.2 容器化
1.4.2.1 Docker容器
Docker容器,容器属于it基础设施层概念,是比虚拟机更轻量化的隔离工具,是微服务最佳载体。
1.4.2.2 Kubernetes资源调度与容器编排
使用kubernetes的资源调度与容器编排,可以实现Docker容器更优管理,进一步实现其PaaS层能力。
1.4.3 服务网格
服务网格存在的目的,就是去中心化的服务治理框架。
以往需要对微服务或对api接口去做治理和管控,一般会用类似于ESB服务总线或 API网关,将API接口注册和接入到API网关,由于API网关本身是一个中心化的架构,所以所有的请求流量都可以通过API网关,由API网关实现对流量拦截,同时对拦截以后的流量进行安全,日志,限流熔断,链路监控等各种管控治理,去中心化以后就没有这种集中化的流量管控点了,所以对流量的拦截就从ESB服务总线或API网关下沉到各个微服务中去了,这就是为什么我们需要在微服务端增加一个代理包的原因,通过这个代理包来做流量的拦截,同时实现对流量的管控,当前在微服务网格中也是用同样的思路来对服务进行治理的。例如:istio服务治理,它会在微服务应用中添加一个边车容器(Envoy)来实现流量的拦截和管控。这个属于微服务服务网格治理的核心技术。
去中心化的服务治理依然有一个控制中心,而控制中心依然是中心化的,但实际的控制流和接口数据访问的消息流是实现分离的,控制中心仅处理服务注册发现,实际的接口调用、服务访问是不通过控制中心的,即使控制中心出现问题,例如控制中心服务不可用等,也不会影响实际服务接口调用。