首先要明确的是云原生没有确切的定义,所以目前大多文章的解释不统一,让人感觉很疑惑,云原生一直在发展变化之中,解释权不归某个人或组织所有。

一、云原生概念

1、云原生历史

2013年,Pivotal公司的Matt Stine于首次提出原生云(CloudNative)的概念,用于区分为云而设计的应用云上部属传统应用

2015年,Matt Stine在《迁移到云原生架构》一书中定义了符合原生云架构的几个特征:12因素微服务自敏捷架构基于API协作抗脆弱性

2015年云原生计算基金会(CNCF)成立,CNCF作为一个厂商中立的基金会,致力于云原生应用推广和普及。

2017年,Matt Stine将原生云架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6特质;而Pivotal最新官网对云原生概括为4个要点:DevOps+持续交付+微服务+容器

2、CNCF对云原生的定义

CNCF(Cloud Native Computing Foundation)于 2015 年 7 月成立,隶属于 Linux 基金会,初衷围绕“云原生”服务云计算。CNCF作为一个厂商中立的基金会,致力于Github上的快速成长的开源技术的推广,如Kubernetes、Prometheus、Envoy等,帮助开发人员更快更好的构建出色的产品。
云原生与嵌入式 - 图1
基金会成员目前已有600多家企业与机构,包括阿里巴巴、亚马逊、思科,花为等巨头;目前CNCF所托管的应用已达12万个。
云原生与嵌入式 - 图2
原生计算基金会(CNCF)成立,是云计算的一个里程碑,标志着云计算的建设关注点从基础设施的建设向应用的云架构转变。CNCF对云原生的定义是个不断优化的过程。目前CNCF对于原生云的定义为:

(1)CNCF云原生定义

“云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器服务网格微服务不可变基础设施声明式API。
这些技术能够构建容错性好易于管理便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。“

CNCF对云原生的描述,前半部分是给出了云原生的定义,并给出目前云原生最佳的技术实践。后半部分指出构建云原生应用的目标。
CNCF还给出了构建云原生的相关技术栈,已经基金会相关的孵化项目信息。
云原生与嵌入式 - 图3

(2)CNCF云原生定义中涉及的关键技术

CNCF在定义中给出了云原生的关键技术:容器服务网格微服务不可变基础设施声明式API,是目前云原生应用的最佳实践。

3、Pivotal公司对云原生的定义

Pivotal公司的Matt Stine于2013年首次提出云原生(CloudNative)的概念;
2015年,云原生刚推广时,Matt Stine在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12因素、微服务、自敏捷架构、基于API协作、扛脆弱性;
到了2017年,Matt Stine在接受InfoQ采访时又改了口风,将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6特质;而Pivotal最新官网对云原生概括为4个要点:DevOps+持续交付+微服务+容器

(2)Pivotal对云原生定义涉及的关键技术

image.png

4、云原生定义总结

可见,不同的人和组织对云原生有不同的定义,相同的人和组织在不同时间点对云原生也有不同的定义,真是乱的一匹,搞得鄙人非常晕菜,我的应对很简单,选一个我最容易记住和理解的定义:DevOps+持续交付+微服务+容器。

总而言之,符合云原生架构的应用程序应该是:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代运维自动化,利用云平台设施实现弹性伸缩动态调度、优化资源利用率。

二、云原生关键技术

1、容器

容器技术是一种轻量级的虚拟化技术。通过操作系统内核的能力,对每个进程的资源使用(包括CPU、内存、硬盘I/O、网络等)进行隔离,达到容器里运行的进程与其他进程进行一定程度的隔离,同时避免了虚拟机(Virtual Machine)过高的额外消耗。

容器通常与容器编排系统一起工作,容器编排系统提供容器的部署和组织能力。容器编排系统通常可以将大量的机器(物理机或虚拟机)作为一个集群进行统一管理,通过设定的策略,将容器部署到这个集群的机器上;实现容器多实例的部署和应用路由的自动化配置;对基础设施和容器进行监控。

容器和容器编排技术对于云原生的意义巨大,容器为云原生应用提供了一个轻量级的运行平台, 首先相对于传统虚拟化技术,容器极其轻量,;可以实现秒级部署;同时容器应用易于移植,一次构建,随处部署。而容器编排技术可以将容器部署到一个很大的集群的同时,还能为应用提供弹性伸缩,故障转移的能力,实现了容器上应用的高可用。提升应用部署的自动化能力和快速部署的能力。

目前常见的容器技术有Linux Container(简称LXC)和runC等。runC是目前的被广泛认可的容器实现,他是基于根据 OCI 标准来创建和运行容器。而 OCI(Open Container Initiative)组织,旨在围绕容器格式和运行时制定一个开放的工业化标准。
image.png
目前最主流的容器编排实现就是Kubernetes了,Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。目前商用和开源的容器平台,基本都是基于Kubernetes的。

2、不可变基础设施

传统运维的基础设施通常是申请一台或一组服务器,运维人员通过SSH或是Agent的方式,将软件的二进制包的安装到服务器上并进行环境的配置。如果需要进行版本升级和参数变更等变更操作,就需要逐个服务器地调整配置文件,以及将新代码直接部署到现有服务器上。这些服务器承载的应用和参数是可以改变的,所以是可变基础设施。这种运维方式也被称为“雪花服务器( Snowflake Server)”,服务器像雪花一样,每一片都独特的与众不同。

不可变基础设施不同于传统的运维,服务器在部署后永远不会被修改。如果需要以任何方式更新,如版本升级或是参数配置,需要构建新服务器以替换旧服务器。在不可变基础设施中,服务器的构建通常是以镜像(Image)的方式提供的,任何一个更改都对应一个镜像。不可变基础设施又被称为“凤凰服务器(Phoenix Server)”,服务器应该像凤凰,能够从灰烬中重生。

不可变基础架构的好处包括基础架构中更高的一致性和可靠性,以及更简单,更可预测的部署过程。它可以减少或完全杜绝可变基础架构中常见的问题,例如配置漂移、集群配置一致性和环境复制问题。

不可变基础设施的一个实现方式就是被我们熟知的Docker。Docker通常被作为容器技术被人熟知,实际上Docker提供的是一种容器打包的技术。Docker的核心理念就是不可变基础设施,Docker通过镜像(Docker Images)或是Dockerfile来交付软件。每一次新的版本的发布都对整个运行环境进行重建,每一次更新都是一个新版本的Image。Docker利用容器的轻量化部署,可以达到最高的收益。

3、微服务

随着需求不断增加,单体应用可能会出现的诸多问题,比如每个小的变更都需要重新部署整个应用,一个小模块的代码缺陷可能导致所有业务不可用等问题。微服务是为解决这些问题的一种架构模式,微服务通过将业务应用由通过明确定义的 API 进行通信的小型独立服务组成。这些服务由各个小型独立团队负责。微服务架构使应用程序更易于扩展和更快地开发,从而加速创新并缩短新功能的上市时间。

微服务将应用拆分为小的独立部署的服务的方式,和容器存在着天然的契合。云上的应用要求可以故障转移,弹性伸缩和快速启停,这些也是微服务应用的设计要求。可以说容器和容器编排技术的发展,大大的推动了微服务的发展;反过来,微服务应用的发展,也推动了容器技术的推广。

由于微服务是一种分布式系统,分布式系统设计的复杂性。为解决微服务系统设计复杂性,各种微服务治理框架层出不穷。比较流行的有Spring Cloud,Dubbo和Istio等。

Spring Cloud是基于微服务优秀开源项目的一个微服务治理全家桶。可以选择不同的解决方案和开源组件,比较完备的解决方案有Spirng cloud Neflix。Spring Cloud是目前全球用的最多的微服务治理框架,可以利用现有Spring的完整生态,和SpringBoot无缝写作文。

Dubbo是国内阿里巴巴提供的服务治理开源项目,同样和Spring整合。国内很多互联网公司选用Dubbo作为微服务框架。

Istio是一个服务网格的开源项目

4、服务网格

前面我们讲了,Docker和Kubernetes已经解决了应用部署,调度和更新的问题。但是微服务应用作为一种分布式系统,运行时的很多问题都需要应用去处理,比如服务的发现、故障熔断和负载均衡等。为了解决这些问题,业界逐渐发展出了微服务治理框架。初期的微服务治理都是基于开发框架的,如Spring Cloud和Dubbo。这些开发框架很好的解决了微服务运行时的问题,但是存在开发语言锁定,对应用存在侵入性、开发运维职责不清等弊端。服务网格(ServiceMesh)就是在这种环境下出现的。

服务网格是最近很火的一个概念,服务网格是用于控制和监控微服务应用程序中的内部服务到服务流量的软件基础结构层。它通常采取与应用程序代码一起部署,作为网络代理的 “数据平面” 和与这些代理交互的 “控制平面” 的形式。在此模型中,服务网格对于业务开发人员是透明的, 而平台运维人员也可以在不关心业务的情况下,有效的运维应用,确保应用的可靠性、安全性和可见性。而且服务网格对对业务应用开发过程的侵入性降到最低,对所有语言友好。
image.png
服务网格目前最主要的开源项目是Istio。Istio基于Kubernetes环境提供的一个完整的解决方案来满足微服务应用程序的各种需求。通过Kubernetes的Pod,Istio为每一个微服务实例注入一个Sidecar,代理(Proxy)业务实例的所有外部流量,从而实现微服务治理框架所需要的行为洞察和操作控制的能力,如服务注册发现、配置管理、熔断和链路追踪等。还可以提供灵活的灰度发布策略配置。

4、声明式API

和声明式相对的是命令式的API。命令式的API是给出每一个操作步骤,目标系统只需要按照步骤进行执行,目标系统将结果返回给调用者,调用者对结果进行处理;声明式API是给出一个最终的状态,目标系统对资源进行操作,以到达要求,调用者不需要进行干预。

声明式API的优势在于让分布式系统之间的交付变的简单。我们不需要关心任何过程细节。声明式的方式能够大量地减少使用者的工作量,极大地增加开发的效率,这是因为声明式能够简化需要的代码,减少开发人员的工作,如果我们使用命令式的方式进行开发,虽然在配置上比较灵活,但是带来了更多的工作。
image.png
声明式API的一个最好实例就是Kubernetes。用于操作K8s的yml文件都是声明式的。另外还有一些用于部署的声明式API开源项目,如Terraform。

三、云原生的价值(作用)

简单列举三项云原生应用价值。

  • 快速迭代

利用云原生应用程序开发,意味着使用敏捷与可扩展的组件,如以Kubernetes为代表的容器来提供离散和可重用的功能,这些功能以良好描述的方式集成,甚至跨越多云等技术边界,这使得交付团队可以使用重复的自动化和编排来快速迭代。

  • 自动部署

云原生方法远优于传统的面向虚拟化的业务流程,传统方法需要投入大量的精力来构建开发环境,以及软件交付过程中的其他不同环境。而云原生架构具备自动化和组合功能,并且依赖于可靠、经过验证和审核的已知良好流程的基础,交付十分敏捷,而不再需要人工干预重复执行。

  • 独立高效

云原生带来了微服务化架构,一个微服务基本是一个能独立发布的应用服务,因此可以作为独立组件升级、灰度或复用等,对整个大应用的影响也较小,每个服务可以由专门的组织来单独完成,依赖方只要定好输入和输出口即可完全开发、甚至整个团队的组织架构也会更精简,因此沟通成本低、效率高。
谈云原生就要谈云计算,不和云计算对比都是耍流氓。云计算的第一个浪潮是关于成本节约和业务敏捷性,尤其是云计算的基础设施更加廉价。

很多企业倾向于使用微服务架构来开发应用。微服务开发快速,职责单一,能够更快速的被客户所采纳。同时,这些应用能够通过快速迭代的方式,得到进化,赢得客户的认可。
云原生可以打通微服务开发、测试、部署、发布的整个流程环节。
云供应商为迎合市场,提供了满足各种场景方案的 API,例如用于定位的 Google Maps,用于社交协作的认证平台等。将所有这些 API 与企业业务的特性和功能混合在一起,可以让他们为客户构建独特的方案。所有这些整合都在 API 层面进行。这意味着,不管是移动应用还是传统的桌面应用都能无缝集成。
所以,采用云原生所开发的应用都且具备极强的可扩展性。

软件不可能不出故障。传统的企业级开发方式,需要有专职人员来对企业应用进行监控与维护。而在云原生架构下,底层的服务或者是API都由将部署到云中,等价于将繁重的运维工作转移给了云平台供应商。这意味着客户应用将得到更加专业的看护,同时,也节省了运维成本。

四、云原生与嵌入式

物联网技术的风向标或演进,第一阶段是国内外公司,先推出物联网云平台,通过 MQTT 等协议让各种第三方智能设备上云。第二个阶段就是推出物联网嵌入式操作系统,让系统天生就有入云的能力。第三个阶段 AI 加持,提出 AIoT 的概念,让 AI 赋能 IoT 相关设备,和云端 AI 一起,提高物联网系统的整体价值。第四个阶段在云原生这个大趋势下,提出云端一体,除了推出边缘计算等硬件设备外,还推出了融入物联网操作系统,赋能 AI,快速开发的 HaaS 硬件系列。相对于友商,阿里云在物联网技术领域走的更远,走的更深入,除了物联网平台,除了 AliIoT things 物联网嵌入式系统,除了小程序,除了钉钉的加持外,更是推出了 IoT Studio 物联网一站式开发平台,经过 4 年多不断升级迭代,越来越实用,越来越有价值。

1、端云一体概念(结合阿里云物联网结构理解)

阿里云智联网首席科学家丁险锋老师在 “Cloud AIoT Native 云端一体的云原生架构设计” 的演讲,更是强调,不是云原生下的 AIoT,而是 AIoT 下的云原生,是云端一体的云原生,是云端协同的云原生
阿里云 Cloud AIoT Native = 基于云原生架构标准 + 新的云边端协同框架赋能

image.png

IoT SDK

物联网平台提供IoT SDK,设备集成SDK后,即可安全接入物联网平台,使用设备管理、数据流转等功能。
只有支持TCP/IP协议的设备可以集成IoT SDK。

边缘计算

边缘计算能力允许您在最靠近设备的地方构建边缘计算节点,过滤清洗设备数据,并将处理后的数据上传至云平台。更多信息,请参见物联网边缘计算。

设备接入

物联网平台提供各类设备端SDK、设备认证方式,支持MQTT、CoAP、HTTP等多种协议,实现设备快速上云。
设备上云后与云端通过IoT Hub进行稳定可靠地双向通信。

IoT Hub具有下列特性:
高性能扩展:支持线性动态扩展,可以支撑十亿设备同时连接。
全链路加密:整个通信链路以RSA、AES加密,保证数据传输的安全。
消息实时到达:当设备与IoT Hub成功建立数据通道后,两者间将保持长连接,以减少握手时间,保证消息实时到达。
支持数据透传: IoT Hub支持将数据以二进制透传的方式传到自己的服务器上,不保存设备数据,从而保证数据的安全可控性。
支持多种通信模式:IoT Hub支持RRPC和PUB/SUB两种通信模式,以满足您在不同场景下的需求。其中,PUB/SUB是基于Topic进行的消息路由。
支持多种设备接入协议:支持设备使用CoAP、MQTT、HTTPS协议接入物联网平台。

消息通信

物联网平台支持通过服务端订阅、云产品流转、场景联动、广播通信、RRPC通信等方式,通过配置规则,实现设备、服务器、物联网平台之间通信消息的同步、转化、过滤、存储等功能。

设备管理

物联网平台为您提供功能丰富的设备管理服务,包括:生命周期、设备分发、设备分组、设备影子、设备拓扑、物模型、数据解析、数据存储等。

监控运维

物联网平台支持OTA升级、在线调试、日志服务、远程配置、实时监控、远程维护等功能。

数据分析

数据分析是阿里云为物联网开发者提供的数据智能分析服务,针对物联网数据特点,提供海量数据的存储备份、资产管理、报表分析和数据服务等能力,帮助企业用户更容易地挖掘物联网数据中的价值。

安全认证和权限策略

安全是IoT的重要话题。阿里云物联网平台提供多重防护,保障设备和云端数据的安全。

物联网平台为每个设备颁发唯一证书,设备使用证书进行身份验证连接物联网平台。
针对不同安全等级和产线烧录的要求,物联网平台为开发者提供了多种设备认证方式。
授权粒度精确到设备级别,任何设备只能对自己的Topic发布、订阅消息。服务端凭借阿里云AccessKey对账号下所属的Topic进行操作。

端云一体的云原生要解决问题
端云一体的云原生特点

总结

把硬件能够提供的功能或服务抽象成统一API给上层,在云端实现对硬件的使用,在云端实现应用层逻辑与功能实现,端云实现逻辑(开发)和物理上(实际架构)的一体。

物联网平台提供系统框架,通用硬件(常用通信接口UART/SPI/CAN/IIC/USB)。对于硬件的使用者来说硬件的功能就是一种服务,不用关心硬件是如何运行的、不用关心云端如何与硬件通信的,只要知道硬件能够提供哪些服务或功能,调用API使用即可。

提供云端应用部署,不一定要连上主机烧录程序,用户只需开发程序,上传程序胡哦直接由云端托管,进行自动部署(烧写),不用关心烧录程序的问题,实现快速,持续迭代。

参考资料

1、云原生技术及其未来发展趋势展望
2、The Cloud Native Landscape: The Orchestration and Management Layer
3、 The cloud native landscape
4、什么是 CI/CD?