文档
云原生 (Cloud Native) = 微服务 + DevOps + 持续交付 + 容器化 ?-腾讯云开发者社区-腾讯云

云原生 (Cloud Native) = 微服务 + DevOps + 持续交付 + 容器化 ?-腾讯云开发者社区-腾讯云

: 应用 的 应该 在 中 。 : 通过 的 来 的 和 。 : 明确 间 的 , 互相 。 https://dzone.com/articles/cloud-native-seeing-through-the-hype

  • : 应用 的 应该 在 中 。
  • : 通过 的 来 的 和 。
  • : 明确 间 的 , 互相 。

https://dzone.com/articles/cloud-native-seeing-through-the-hype

什么 is 云原生 是 云原生 ?

云原生准确来说是一种文化,更是一种潮流,它是云计算的一个必然导向。意义在于让云成为云化战略成功的基石,而不是障碍。

云原生 之前

云原生

Mesh 的 思路 is 体现 , 在 将 S D 的 出来 , 中 。 通过 这种 , 实现 应用 的 。 此时 绝大部分 的 功能 is 剥离 都 在 , 应用 中 只 一个 的 。 这个 端中 is 保留 还 有 少数 和 , 比如 的 ( 要 的 ) , 的 实现 。

云原生简介

Cloud Native 翻译为云原生,是Matt Stine提出的一个概念,它是一个思想的集合,包括DevOps、持续交付(Continuous Delivery)、微服务(MicroServices)、敏捷基础设施(Agile Infrastructure)、康威定律(Conways Law)等,以及根据商业能力对公司进行重组。Cloud Native既包含技术(微服务,敏捷基础设施),也包含管理(DevOps,持续交付,康威定律,重组等)。Cloud Native也可以说是一系列Cloud技术、企业管理方法的集合。

Cloud Native是更好的工具、自我修复系统、和自动化系统的集合,可以让应用和基础设施的部署和故障修复更加快速和敏捷,极大的降低企业在云计算方面的部署成本。

目前业界公认的云原生主要包括以下几个层面的内容。

容器,服务网格,微服务,不可变的基础设施,公开的API都接近云原生相关概念。

云原生技术可以让系统松耦合,支持弹性伸缩、可管理的、清晰的。通过整合健壮且有效的自动化,工程师可以用很少的劳动来完成频繁的、预期中的高危代码修改。

微服务

微服务解决的是我们软件开发中一直追求的低耦合+高内聚,记得有一次我们系统的接口出了问题,结果影响了用户的前台操作,于是黎叔拍案而起,灵魂发问:“为啥这两个会互相影响?!”

服务 is 解决 可以 这个 问题 , 的 是 把 若干 块 的 小 , 比如 小 专门 的 , 一块 小 专门 前台 的 , 小 可以 , 比如 的 小 可以 继续 多 块 不同 的 , 这样 每个 小 问题 了 , 其它 还 能 正常 。

随着微服务化架构的优势展现和快速发展,2013年,MartinFlower对微服务概念进行了比较系统的理论阐述,总结了相关的技术特征。首先,微服务是一种架构风格,也是一种服务;其次,微服务的颗粒比较小,一个大型复杂软件应用由多个微服务组成,比如Netflix目前由500多个的微服务组成;最后,它采用UNIX设计的哲学,每种服务只做一件事,是一种松耦合的能够被独立开发和部署的无状态化服务(独立扩展、升级和可替换)。微服务架构如图1-8所示。

图: 微服务架构示例

由微服务的定义分析可知,一个微服务基本是一个能独立发布的应用服务,因此可以作为独立组件升级、灰度或复用等,对整个大应用的影响也较小,每个服务可以由专门的组织来单独完成,依赖方只要定好输入和输出口即可完全开发,甚至整个团队的组织架构也会更精简,因此沟通成本低、效率高。根据业务的需求,不同的服务可以根据业务特性进行不同的技术选型,是计算密集型还是I/O密集型应用都可以依赖不同的语言编程模型,各团队可以根据本身的特色独自运作。服务在压力较大时,也可以有更多容错或限流服务。

架构 is 有 有 很多 人 的 , 然而 它 的 也 是 有 的 , 它 并不 是 , 使用 它 会 更 多 , 能 、 、 、 等 方面 , 需要 根据 的 不同 的 进行 合理 的 , 不 能 完全 为了 而 “ ”

DevOps

DevOps的意思就是开发和运维不再是分开的两个团队,而是你中有我,我中有你的一个团队。我们现在开发和运维已经是一个团队了,但是运维方面的知识和经验还需要持续提高。

DevOps is 统称 如果 从 上来 只是 ( ) + ( ) , , 它 is 统称 是 一 组 、 与 的 , 其 从 到 现在 , 也 非常 丰富 , 有 也 有 , 、 、 、 和 等 不同 方面 。 首先 , 、 与 等 , 需要 , 促进 、 和 之间 的 、 与 , 而言 。 其次 , 自动化 is 指 是 所有 的 都 不 需要 , 全部 完成 , 比如 上述 的 必须 才 有 可能 完成 。 再次 , 的 出现 is 合作 是 由于 行业 is 合作 日益 地 认识 到 , 为了 按时 和 , 和 部门 is 合作 必须 。 总之 , 强调 is 完成 的 是 之间 如何 通过 的 和 来 完成 的 , 从而 更 快 、 更 地 更 的 。 ,

图 DevOps强调组织的沟通与协作

持续交付

的 意思 is 发布 就是 在 不 使用 的 下 把 给 使用 , 要 做到 这点 非常 非常 。 我们 is 造成 现在 两 周一 个 , 之后 给 不同 的 造成 不同 的 。

它更多是代表一种软件交付的能力,过程示例请参考图:

图 持续交付流程

容器化

容器化的好处在于运维的时候不需要再关心每个服务所使用的技术栈了,每个服务都被无差别地封装在容器里,可以被无差别地管理和维护,现在比较流行的工具是docker和k8s。

基于虚拟机技术,陆续出现了 IaaS/PaaS/FaaS 等形态,以及他们的开源版本。

2013 年 docker 出现,容器技术成熟,然后围绕容器编排一场大战,最后在 2017 年底,kubernetes 胜出。2015 年 CNCF 成立,并在近年形成了 cloud native 生态。

云原生的发展历程

云原生(Cloud Native)最初来描述云上应用的典型架构与特性,随着容器、kubernetes、Serverless、FaaS技术的演进,CNCF(Cloud Native Computing Foundation ,云原生计算基金会)把云原生的概念更广泛地定义为“让应用更有弹性、容错性、观测性的基础技术,让应用更容易部署、管理的基础软件、让应用更容易编写、编排的运行框架等”,希望能够让开发者最好的利用云的资源、产品和交付能力。

下边大致梳理一下云原生的发展过程。

2004 年 ~ 2007 年,Google 已在内部大规模地使用像 Cgroups 这样的容器技术;
2008 年,Google 将 Cgroups 合并进入了 Linux 内核主干。
2013 年,Docker 项目正式发布。
2014 年,Kubernetes 项目也正式发布。
2015 年,CNCF 成立。
2017 年,CNCF 达到 170 个成员和 14 个基金项目。
2018 年,CNCF 成立三周年有了 195 个成员,19 个基金会项目和 11 个孵化项目,如此之快的发展速度在整个云计算领域都是非常罕见的。

2014 年 Kubernetes 项目发布的原因也非常容易理解,因为有了容器和 Docker 之后,就需要有一种方式去帮助大家方便、快速、优雅地管理这些容器,这就是 Kubernetes 项目的初衷。在 Google 和 Redhat 发布了 Kubernetes 之后,这个项目的发展速度非常之快。

2015 年由 Google、Redhat 以及微软等大型云计算厂商以及一些开源公司共同牵头成立了 CNCF 云原生基金会。CNCF 成立之初,就有 22 个创始会员,而且 Kubernetes 也成为了 CNCF 托管的第一个开源项目。在这之后,CNCF 的发展速度非常迅猛。

云原生技术生态现状

因此,如今我们所讨论的云原生技术生态是一个庞大的技术集合。CNCF 有一张云原生全景图(https://github.com/cncf/landscape),在这个全景图里已经有 200 多个项目和产品了,这些项目和产品也都是和 CNCF 的观点所契合的。所以如果以这张全景图作为背景,加以思考就会发现,我们今天所讨论的云原生其实主要谈论了以下几点:

云原生 —— CNC

CNC F is 之一 是 目前 最 的 之一 , 是 Kubernetes 、 、 Envoy 等 的 。

云原生技术社区

云原生技术社区,比如像 CNCF 目前正式托管的 20 多个项目共同构成了现代云计算生态的基石,其中像 Kubernetes 这样的项目已经成为了世界第四活跃的开源项目;目前从 CNCF 毕业的项目以及有 6 个,分别是 Kubernetes 、Prometheus、Envoy、CoreDNS、containerd、Fluentd 。

云原生技术产业

除了前面两点之外,现在全球各大公有云厂商都已经支持了 Kubernetes。此外,还有 100 多家技术创业公司也在持续地进行投入。现在阿里巴巴也在谈全面上云,而且上云就要上云原生,这也是各大技术公司拥抱云原生的一个例子。

我们正处于时代的关键节点

2019 年正是云原生时代的关键节点,为什么这么说?我们这里就为大家简单梳理一下。

从 2013 年 Docker 项目发布开始说起,Docker 项目的发布使得全操作系统语义的沙盒技术唾手可得,使得用户能够更好地、更完整地打包自己的应用,使得开发者可以轻而易举的获得了一个应用的最小可运行单位,而不需要依赖任何 PaaS 能力。这对经典 PaaS 产业其实是一个“降维打击”。

2014 年的时候,Kubernetes 项目发布,其意义在于 Google 将内部的 Borg/Omega 系统思想借助开源社区实现了“重生”,并且提出了“容器设计模式”的思想。而 Google 之所以选择间接开源 Kubernetes 而不是直接开源 Borg 项目,其实背后的原因也比较容易理解:Borg/Omega 这样的系统太复杂了,是没办法提供给 Google 之外的人使用,但是 Borg/Omega 这样的设计思想却可以借助 Kubernetes 让大家接触到,这也是开源 Kubernetes 的重要背景。

这样 到 了 2015 年 到 2016 年 , 就 到 了 “ 三国 ” 的 , 当时 、 、 Mesos 、 Kubernetes 都 在 , 他们 的 其实 也 比较 容易 , 那 就是 或者 本身 的 虽然 大 , 但是 如果 让 其 产生 或者说 对云 的 , 那么 就 一定 需要 在 上面 一个 有利 的 。

其中,Swarm 更偏向于生态,而 Mesos 技术更强一些。相比之下, Kubernetes 则兼具了两者优势,最终在 2017 年“三国争霸”的局面中得以胜出,成为了当时直到现在的容器编排标准。这一过程的代表性事件就是 Docker 公司宣布在核心产品中内置了 Kubernetes 服务,并且 Swarm 项目逐渐停止维护。

到了 2018 年的时候,云原生技术理念开始逐渐萌芽,这是因为此时 Kubernetes 以及容器都成为了云厂商的既定标准,以“云”为核心的软件研发思想逐步形成。

而 到 了 2019 年 , 似乎 又 将 一些 。

2019 年,云原生技术普及元年

为什么说 2019 年很可能是一个关键节点呢?我们认为 2019 年是云原生技术的普及元年。

首先大家可以看到,在 2019 年,阿里巴巴宣布要全面上云,而且“上云就要上云原生”。我们还可以看到,以“云”为核心的软件研发思想,正逐步成为所有开发者的默认选项。像 Kubernetes 等云原生技术正在成为技术人员的必修课,大量的工作岗位正在涌现出来。

这种背景下,“会 Kubernetes” 已经远远不够了,“懂 Kubernetes”、“会云原生架构” 的重要性正日益凸显出来。 从 2019 年开始,云原生技术将会大规模普及,这也是为什么大家都要在这个时间点上学习和投资云原生技术的重要原因。

云原生代表技术

“12要素”

“12要素”英文全称是The Twelve-Factor App,最初由Heroku的工程师整理起步,是集体贡献总结的智慧,如图所示。

图:12要素

根据 的 , 12 要素 is 描述 比较 地 了 应用 的 , 并 了 使用 应用 的 。 比如 , 一个 的 应用 is 有 在 中 , 需要 遵循 的 一些 基本 和 云原生 有 之 。 通过 和 , Rails 的 基于 “ ” ( convention over ) 的 , 在 的 中 , 这些 非常 重要 , 从 无 到 的 , 从 松耦合 到 。 基于 12 的 上下文 is 关联 , 就 变成 了 一个个 的 ; 多 个 的 组成 一个 应用 , 多 个 应用 之间 的 就 可以 组成 一个 复杂 的 应用 。

下面 is 介绍 – 9 中 的 这些 。 相信 很多 在 实际 中 已经 很 好 地 应用 了 其中 的 一些 , 只是 没有 到 本身 。 对 这些 比较 的 , 如果 了解 更 多 的 , 《 云原生 下 的 12 ( 12 – Factor ) 应用 与 》 一 。

每 一个 的 应用 is 在 都 在 被 。 在 多 个 中 , 会 有 , 应用 只有 一 份 , 了 该 应用 的 多 个 , 比如 一个 , 、 都 有 一个 。

实际上,在云计算架构中,所有的基础设施都是代码配置,即Infrastructure as Code(IaC),整个应用通过配置文件就可以编排出来,而不再需要手工的干预,做到基础服务也是可以追踪的。

依赖

应用程序不会隐式依赖系统级的类库,通过依赖清单声明所有依赖项,通过依赖隔离工具确保程序不会调用系统中存在,但清单中未声明依赖项,并统一应用到生产和开发环境。比如通过合适的工具(例如Maven、Bundler、NPM),应用可以很清晰地对部署环境公开和隔绝依赖性,而不是模糊地对部署环境产生依赖性。

在容器应用中,所有应用的依赖和安装都是通过DockerFile来完成声明的,通过配置能明确把依赖关系,包括版本都明确地图形化展示出来,不存在黑盒。

配置

变量 is 方法 是 一 种 清楚 、 容易 和 的 , 将 应用 的 于 中 , 在 之外 , 或者 其他 可能 在 ( 例如 、 、 ) 之间 的 任何 , 可以 通过 的 来 。

实例根据不同的环境配置运行在不同的环境中,此外,实现配置即代码,在云环境中,无论是统一的配置中心还是分布式的配置中心都有好的实践方式,比如Docker的环境变量使用。

后端服务

对待 本地 或 , 把 的 作为 一 种 来 对待 , 例如 或者 , 作为 , 地 在 各种 中 被 。 比如 在 的 中 , 、 、 资源 is 看作 都 可以 是 一 种 去 对待 使用 , 是 还是 本地 的 。

构建、发布、运行

应用严格区分构建、发布、运行这3个阶段。3个阶段是严格分开的,一个阶段对应做一件事情,每个阶段有很明确的实现功能。云原生应用的构建流程可以把发布配置挪到开发阶段,包括实际的代码构建和运行应用所需的生产环境配置。在云原生应用中,基于容器的Build-Ship-Run和这3个阶段完全吻合,也是Docker对本原则的最佳实践。

必须无状态且无共享,即云应用以一个或多个无状态不共享的程序运行。任何必要状态都被服务化到后端服务中(缓存、对象存储等)。

所有的应用在设计时就认为随时随地会失败,面向失败而设计,因此可能会被随时拉起或消失,特别是在弹性扩容的阶段。

端口绑定

不依赖于任何网络服务器就可以创建一个面向网络的服务,每个应用的功能都很齐全,通过端口绑定对外提供所有服务,比如Web应用通过端口绑定(Port binding)来提供服务,并监听发送至该端口的请求(包括HTTP)。

在容器应用中,应用统一通过暴露端口来服务,尽量避免通过本地文件或来通信,每种服务通过服务发现而服务。

并发

可以看作一等公民,并发性即可以依靠水平扩展应用程序来实现,通过模型进行扩展,并且具备无共享、水平分区的特性。

在 的 中 , 的 爆发性 is 发生 随时 可能 , 因此 不 可能 通过 来 随时 , 需要 进行 。

处理

所有应用的架构设计都需要支持能随时销毁的特点,和状态的无关性保持一致,允许系统快速弹性扩展、改变部署及故障恢复等。

在云环境中,由于业务的高低峰值经常需要能实现快速灵活、弹性的伸缩应用,以及不可控的硬件因素等,应用可能随时会发生故障,因此应用在架构设计上需要尽可能无状态,应用能随时随地拉起,也能随时随地销毁,同时保证最小启动时间和架构的可弃性,也可以提供更敏捷的发布及扩展过程。

环境等价

必须缩小本地与线上差异,确保环境的一致性,保持研发、测试和生产环境尽可能相似,这样可以提供应用的持续交付和部署服务。

在 应用 中 , 通过 的 能 做到 , 因此 各个 不同 的 , 同时 还 能 大大 不同 的 等 问题 。

日志

每一个运行的都会直接标准输出(stdout)和错误输出(stderr)事件流,还可以将日志当作事件流作为数据源,通过集中服务,执行环境收集、聚合、索引和分析这些事件。

日志是系统运行状态的部分体现,无论在系统诊断、业务跟踪还是后续大数据服务的必要条件中,Docker提供标准的日志服务,用户可以根据需求做自定义的插件开发来处理日志。

管理

管理或维护应用的运行状态是软件维护的基础部分,比如数据库迁移、健康检查、安全巡检等,在与应用长期运行的程序相同环境中,作为一次性程序运行。

在应用架构模式中,比如Kubernetes里面的Pod资源或者dockerexec,可以随着其他的应用程序一起发布或在出现异常诊断时能通过相关的程序去管理其状态。

云原生 应用 的 逻辑 is 依赖

云原生的内容非常广泛,目前没有系统的说明和完整的定义,上文介绍了云原生应用的基础组件和相关特点,可能读者对云原生应用的逻辑还存在一些困惑。为了更清楚地进行说明,我们总结了其依赖关系,如图所示。

首先,为了抓住商业机会,业务需要快速迭代,不断试错,因此,企业需要依赖拥有持续交付的能力,这些不仅包括技术需求还包括产品的需求,如何能拥有持续交付的能力,大而全的架构因为效率低下,显然是不合适的。于是演变出微服务架构来满足需求,通过把系统划分出一个个独立的个体,每个个体服务的设计依赖需要通过12要素的原则来规范完成。同样,如果系统被分成了几十个甚至几百个服务组件,则需要借助DevOps才能很好地满足业务协作和发布等流程。最后,DevOps的有效实施需要依赖一定的土壤,即敏捷的基础设施服务,现实只有云计算的模式才能满足整体要求。通过上述梳理,我们总结出面向云原生应用的3个不同层次的特点。

高可用设计(Design for Availability),依据应用业务需求,高可用分为不同级别,比如不同区域、不同机房(跨城或同城)、不同机柜、不同服务器和不同的高可用,云原生应用应该根据业务的可用性要求设计不同级别的架构支持。

可扩展设计(Design for Scale),所有应用的设计是无状态的,使得业务天生具有扩展性,在业务流量高峰和低峰时期,依赖云的特性自动弹性扩容,满足业务需求。

快速失败设计(Design for Failure),即包括系统间依赖的调用随时可能会失败,也包括硬件基础设施服务随时可能宕机,还有后端有状态服务的系统能力可能有瓶颈,总之在发生异常时能够快速失败,然后快速恢复,以保证业务永远在线,不能让业务半死不活地僵持着。

通过上面的基本描述及云原生应用的组成或特点,与容器技术相比可以得知,容器的特性天生就是按这些原则进行设计的。随着互联网业务的架构不断演进,从单体应用到分布式应用,甚至微服务架构应用中,12要素较好地为构建互联网化应用提供了统一的方法论和标准化,具有强大的生命力,每一条原则都是应用开发的珠玑。当然,在实践过程中,每一个原则也不是一成不变的,随着新的理念和技术出现,原有的因素会得到延伸和发展,会出现新的原则和应用,这套理论也适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序,因此也作为云原生架构应用的基本指导原则之一.

的 和

有 两 个 : 、 , 这 2 个 , 又 了 、 、 里氏 、 、 、 等 。

软件工程师一直都在为这两个目标而努力奋斗,以求把软件编写得更加清晰、更加健壮、更加易于扩展和维护。

但后来,人们发现有更多的诉求,希望开发软件变得更简单、更快捷,程序员希望更少编写代码,非专业人员也希望能开发程序,于是,更多的更傻瓜的编程语言被发明出来,更多的编程技术和编程思想被发明出来,比如库、组件、云基础设施。

于是很多技术变成了屠龙之技,比如汇编,时代变了,建国后动物不能成精了,没有龙可以宰了,然后很多软件工程师摇身一变成了调参工程师、Call API砖家、用库包能手、拼组件达人,这是效率分工的结果,也是技术发展的使然。

纵观近二十年的科技互联网发展历程,大的趋势是技术下沉,特别是近些年,随着云计算的发展和普及,基础设施越来越厚实,业务开发变得越来越容易,也越来越没有技术含量,而之前困扰小团队的性能、负载、安全性、扩展性问题都不复存在,这不禁让互联网行业的油腻大叔们噤若寒蝉,仿佛分分钟就要被卷入历史洪流而万劫不复。

虽然 不可 的 在 , 但 也 还 不至于 那么 。 , 当 、 Delphi 、 MFC 出现 的 时候 , 也 有 , 所 见 即 , 点点 , 就 可以 , 是 不是 很 ?

那时候码农的担心相比现在恐怕是只多不少吧,但后来随着互联网兴起,出现了后端开发这个工种,码农很快找到了新的战场,网络、分布式、数据库、海量服务、容灾防错,于是又玩出一堆新花样。

如果说PC时代的基础设施是控件库,互联网时代的基础实施是云,那AI时代基础设施是什么?又有什么高端玩法?

Kubernetes是容器编排系统的事实标准

在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos和Kubernetes的大战已经基本宣告技术,kubernetes成为了无可争议的赢家。下面这张图是Kubernetes的架构图,其中显示了组件之间交互的接口CNI、CRI、OCI等,这些将Kubernetes与某款具体产品解耦,给用户最大的定制程度,使得Kubernetes有机会成为跨云的真正的云原生应用的操作系统。

Kuberentes架构

随着Kubernetes的日趋成熟,“Kubernetes is becoming boring”,基于该“操作系统”之上构建的适用于不同场景的应用将成为新的发展方向,就像我们将石油开采出来后,提炼出汽油、柴油、沥青等等,所有的材料都将找到自己的用途,Kubernetes也是,毕竟我们谁也不是为了部署和管理容器而用Kubernetes,承载其上的应用才是价值之所在。

云原生的核心目标

Native

已经 可以 为 我们 的 可以 的 设施 is 云成 , 但是 上 了 一个 。 Kubernetes 的 出现 is 倒不如说 与其说 是 从 的 , 倒不如说 是 为了 应用 ( 应用 ) 这个 。 和 FaaS / , 都 可以 作为 云原生 应用 的 。

FaaS Landscape

但就2017年为止,kubernetes的主要使用场景也主要作为应用开发测试环境、CI/CD和运行Web应用这几个领域,如下图TheNewStack的Kubernetes生态状况调查报告所示。

Workloads running on Kubernetes

另外 基于 Kubernetes 的 和 也 的 准备 , 如 中 Gartner 的 中 :

当前 各 大 云如 Google GKE 、 微软 、 亚马逊 ( ) 、 、 、 腾讯云 、 阿里云 is 提供 等 都 了 Kuberentes 。

微服务

微服务——Cloud Native的应用架构

下图 is 主题 是 Bilgin Ibryam 的 中 应该 的 , 来自 Red Hat Developers 。

Microservices concerns

微服务带给我们很多开发和部署上的灵活性和技术多样性,但是也增加了服务调用的开销、分布式系统管理、调试与服务治理方面的难题。

当前 最 最 的 框架 is 莫属 可以 , 而 又 仅 , 其 本身 又 跟 Kubernetes 存在 很多 的 部分 , 如何 将 Kubernetes 作为 就 成为 一个 。

就拿微服务中最基础的服务注册发现功能来说,其方式分为客户端服务发现和服务端服务发现两种,Java应用中常用的方式是使用Eureka和Ribbon做服务注册发现和负载均衡,这属于客户端服务发现,而在Kubernetes中则可以使用DNS、Service和Ingress来实现,不需要修改应用代码,直接从网络层面来实现。

两种服务发现方式

Cloud Native

DevOps——通向云原生的云梯

CNCF(云原生计算基金会)给出了云原生应用的三大特征:

  • : 应用 的 应该 在 中 。
  • : 通过 的 来 的 和 。
  • : 明确 间 的 , 互相 。

软件生命周期维度看云原生

微软的 Azure 计算服务架构

Micros of

  • Virtual Machines – An Infrastructure as a Service (IaaS) offering that provides maximum control over the hosting environment and support for legacy workloads. Consumers are responsible for operational activities such as server patching and monitoring.
  • Machine Sets – Provides on of Virtual Machines you is need to of entical with balancing and , reducing .
  • Containers – Provides traditional container orchestrators (Docker, Kubernetes, Mesos) as well as Microsoft’s Service Fabric for building managed microservices applications that are resilient and scalable, and support Linux and Windows platforms.
  • App Services – A fully managed and scalable Platform as a Service (PaaS) offering for Web, Mobile and API applications, which removes a lot of the management overhead, yet provides flexibility with support for multiple platforms (Windows/Linux) and languages (.NET, Node.js, PHP, Java, Python).
  • Serverless – Provides an on-demand and scalable execution model for coded functions in multiple programming languages, so that you pay only for the time the code is executing, from the point at which it is triggered to completion.

Figure 2 Azure Cloud-Native Application Framework

the

In addition to the compute services already described, Azure offers a range of other managed services to enable development of end-to-end applications.

  • – Managed for , and . g . Blobs and SMB .
  • Data – Relational and NoSQL databases, caching and search services (e.g. SQL Azure, Cosmos DB, Redis Cache, Azure Search).
  • Messaging – Queues and subscriptions (e.g. Azure Service Bus).
  • Security – Authentication services (e.g. Azure AD).
  • – , , load balancing and virtual appliances .

Specialised or more advanced apps can make use of additional services for Artificial Intelligence, Analytics and Event driven architectures (such as IoT) and integration for hybrid scenarios.

Putting all of this together, figure 2 shows a framework for building cloud-native applications on Azure. Other cloud platforms do provide similar offerings. If you are not using Azure, hopefully this article has given you some things to look out for on your cloud platform to build cloud-native apps that respond to change and enable you to work at the pace your business demands.