什么是云原生应用程序

本文讲的是什么是云原生应用程序,【编者的话】我们通常都会在设想什么是一个Cloud Native Appliction,这也是我们为什么不停地去测试、学习各种云服务,学习、使用docker的原因。本文介绍的云原生应用的出发点,可能和我们的有着异曲同工的地方,,可能在某些方面说的还是比较抽象,但是通过图片,我们还是可以清晰明白在非云应用往云生应用的发展框架是什么,会带来什么样的好处等等,以及如何处理好不同域间容量、数据、状态的关系。

最近,云原生应用(Cloud Native Application)这个概念又重新被大家提起来,谷歌也组织成立了云原生计算基金会(CNCF)。很多人都不明白什么是Cloud Native Application,本文中我试着向大家解释它。

12因子应用程序的理念来解释什么是云原生应用最合适不过了。但对于很多不了解12因子的人来说,这样的解释理解起来还是会非常困难。

简单来说,云原生应用其实就是需要严格的分离架构和数据。但在我看来,我们很难清楚的划分架构和数据之间的界限。

在这里,数据是一个相对宽泛的术语,你可以理解为数据库,但它还应该包括一些配置数据。

换个角度来看,我们也可以把这种分离(界限)描述为『能力(capacity)』和『状态(state)』。我们可以用下面这副图片来解释这个概念。

请注意这两个域的特点。

基础设施中没有任何需要保存的信息。这完全是无状态的。

另一方面,承载持久化功能的域(在每一个可能的形状和形式)具有完全不同的特征,因为它需要可靠的、高可用性、持久性和。这个时候,你可能会问,它与传统的三层Web应用的区别。在我看来,云原生应用吧应用层和数据层的分离做的更彻底。

基础设施容量域

这就是虚拟机(又名实例)实时托管原生云应用的代码。他们完全是无状态的,他们是一群VM所有相同配置(基于角色)和整个生命周期的自动化。在这样一个环境中传统IT概念通常关联到虚拟机甚至没有任何意义。下面是一些例子。

  • 不安装这些服务器(传统方法),因为它们是由自动生成脚本由外部事件或政策触发(如基于用户需求自动定量前端层)
  • 不操作这些服务器,原因同上。
  • 不记录这些服务器做什么和如何提供它们,因为代码生成文档。
  • 不备份这些服务器,因为他们没有状态。如果你失去了服务器,你重新实例这些服务器,从头开始。
  • 你没有这些服务器从一个地方迁移到另一个,因为同样的原因。你重新实例这些服务器,从头开始。
  • 你不用云平台级别提供高可用性来保护这些服务器。没有任何保护,如果他们失败了,你重新实例服务器。
  • 你不需要为这些服务规划基础设施的大小,你只需为任何给定的时间点上的消费。

你配置基础设施的本质与运行代码中的一部分一样。你听说过“基础设施及代码”的概念吗?这就是了。

现今,相当常见的看到实现这类模式被用于实现配置工具组合,然后切换到配置管理工具。

这个想法是为了提供虚拟机,让配置工具给客人创建适当的个性和角色。

AWS Cloudformations,HashiCorp Terraform,VMware Application Director,RightScale CMP这些都是专注于可编程初始化实例的几个例子。

Puppet、Chef、Ansible (等等) 是配置管理工具,专注于通过自动化确保实例融合,给定一致的配置和状态。

截至2014年底,这几乎是目前的状况(和最佳实践)。

然而几个新趋势和模式在上升。他们可能最终收敛汇聚,在某种程度上,你可以看作为一种趋势。

第一个被称为不变的工作负载。目前为止,我们已经讨论了被称为可变负载,这意味着他们的配置可以改变加班一样配置管理工具配置和重新配置他们需要让他们收敛到一个理想的最终状态。换句话说云本机应用程序当前的最佳实践建议提供一个基础模板和在操作系统核心模板,确保核心模板使用特定的配置。不变工作量的哲学表明,实例相对应的应该是不变的,如果你需要重新配置一个实例(如更新应用程序代码),你应该摧毁这个实例并重新立即部署它最新的配置到模板中。

第二个趋势是朝着简化整个堆栈包括这些工作负载。目前常见的做法是使用虚拟机作为一个占位符,用于运行时(例如AWS EC2实例或VMware虚拟机)。这些天有一所新学校的想法说虚拟机太大,太臃肿和云本机应用程序太重,容器是一个更好的方式来打包和部署云本机应用程序。我相信你听说过Docker和相关的动量(或者说是科技泡沫?)。这也很符合另一个趋势(微服务),这一个博文不够说了。

有趣的是,许多人也认为这种容器化趋势只是某个东西更大(呃,或者说更小?)的过渡。

援引:Invent 2014 AWS介绍了一项新服务,被称为Lambda云本机应用程序。这个可以允许开发人员编写代码并把代码作为数据的一部分。当数据发生变化时,事件触发代码运行。没有虚拟机,没有选择的容器,代码只是突然地运行起来。换句话说,基础设施没有简化,它只是消失了。

下图描述了图形化这一概念:

你可以想象这些概念将会话通向PaaS-ish模型。

数据和状态域

现在将自己传送到另一个维度。

转换思维。

持久性和弹性问题。很多很多问题。

有几件事,属于这个域。

最重要的一个就是在哪持有用户数据。想想传统的(关系型)数据库但也可能是一个存储库的非结构化数据(例如对象存储、NoSQL)。往往这些服务是由云提供商提供管理服务。并没有什么会阻止其他人写云本机应用程序部署和管理他们自己的数据库(关系型或非关系型),通常是利用诸如AWS RDS或AWS DynamoDB等管理服务。

这方法(有价值可选)的优点是,你有你的持久性和可靠性保证而不是花时间让自己发生。

最后,一个云提供商用一个完全自动化的方式管理成百不一定上千的实例比一个人兼DBA特别是一个开发人员,要好很多。

这些云托管服务的特点是,他们(通常)和水平呈线性比例关系。
以对象存储为例,您可以在主宰无限(或观念上的)的数据量。

想想诸如AWS DynamoDB等服务,你只需要订阅这个服务形成SLAs,云提供商将根据SLA管理所需的容量(后台)。

传统的关系数据库(尽管管理,如AWS RDS)通常不提供这种感觉无限的可伸缩性,因为他们常常向外扩展(但不超出)和基于云实例支持管理数据库大小才有的实际限制。

取决于你的选择将会有一个变量的基础设施和核心操作过程的可视性,但所有这些解决方案减轻很多负担的持久性域的可伸缩、高可用性和弹性。

第二组持久性,属于这个域的描述是基础设施,随着应用程序栈,需要部署、推广和运营。我把它叫做基础结构状态。

这样描述:

  • 核心基础设施应该像什么样的(又名“基础设施及代码”)
  • 实例化应用程序的存储库
  • 应用程序配置。

题外话: Twelve-Factor App声明中描述将应用程序代码从应用程序配置中分离是一个最佳实践。通过这样做你可以实例化不同的环境(开发、测试、分期、生产)通过简单地指向一个不同的应用程序配置。模块化(各级)规则在云本机应用程序。

这种持久性的第二组数据和状态域可以以不同的方式实现。这可能是一个(或多个):

  • 一组AWS Cloudformations模板描述如何建模你的基础设施容量
  • Puppet, Chef, Ansible, Saltstack或是Terraform,声称让你的虚拟机在运行时通过给定的配置集中起来
  • 服务如GitHub托管应用程序的“代码”

注意基础设施状态只是概念上的用户数据,它们共享相同的需求(一致、可靠、耐用等)。然而这些服务可以在物理上分开。

虽然最近用一个云提供商一起把所有这些环境(基础设施容量域和数据和状态域)放在一起是相当普遍的,大家也可以认为他们是松散耦合的环境(如基础设施容量由两个云提供商,业务数据托管在第三个云提供商和基础设施状态托管在其他地方)。

让我们一起把它们组装起来

如果你试图把所有上述成更详细的图片,云本机应用程序将看起来像是这样。

在根据上述每个基础设施状态逻辑的描述实例化(和运营)每个基础设施,在运行时,应用程序部署在开始消费和交互用户数据(如数据库、对象存储等)。

这张照片缺少的(在许多其他事物)是可伸缩性这两个域的性质。这是另一个云平台的核心原则,在这篇文章中我不不涉及过多。这两种环境中可以根据外部触发自然增长和收缩(如越来越多的应用程序用户或越来越多组数据管理)。

因此应用程序所有者将根据实际的,正在被应用程序使用的,资源支付相关费用。

你今天站在哪里?

我们已经描述了一个云本机应用程序的外观。

但是,你处于什么位置?

很有可能,除非你是Netflix风格组织,你不在我所说的范围内。

很有可能你的工作负载可能看起来或多或少是这样的:

你还记得 [Pets and Cattle](http: //it20.info/2012/12/vcloud-openstack-pets-and-cattle/)的故事吗?

我不再重复了。你可以阅读一下那个博客。

还要注意为何你没有形成基础设施容量和数据之间的关系。更不用说基础设施的状态了。

95%的组织(完全编造的数字,但我觉得差不了多远)本质上是处理一群宠物,通过名字召唤,都有自己的独特的个性和状态(在本地保存),当他们死的时候你会哭的很凶。

传统的(即不是云原生的)应用程序时,您需要安装,操作,文档,备份,迁移和保护您的工作负载。这与你在云本机应用程序上做的完全相反。

除此之外,没有特定的分离容量和状态。所有工作负载的状态保存在本地磁盘上的每个实例。

在最好的情况下,状态一直备份到一个Word或Excel文档。如果(或者当?)工作负载的接近满负荷,操作员通常会手动地通过一个简单的模板根据Word / Excel“使用说明书”重装一次。

其中的一些工作负载也以数据库或文件的形式托管用户数据。他们需要额外的照顾,这很复杂,甚至以后的可靠性和可伸缩性。

一个很好的试金石:看看您正在运行的旧的应用程序或云本机应用程序是不是如下。

在周一早上11点邀请我到你的数据中心,关闭并摧毁20%的生产实例。

如果您的应用程序部署自我修复本身没有任何需要你的部分,如果有最小的不中断你的终端用户体验,那么你正在运行一个合适的云本机应用程序。

相反,如果你是像“噢,我的天你做了什么?我有一个星期的工作现在在我的面前!”这样的,所有你的手机疯狂地响了,那么欢迎来到还有剩下的95%的人的现实世界。

记住,自动化和自愈是云本机应用程序的一个重要宗旨。我记得会见过一个客户,一个应用程序(计算容量和数据)分布在数据中心的架构只为了保留一个完整的站点不中断。他们告诉我,不幸的是,如果一个数据节点坏了,它将花费数周,也许不是数月手动重建环境。如果你问我,那这不是云。

结论

还有许多其他云本机应用程序的特点,这里我不赘述了。如果你是一个高级的开发人员加入到这个行列中,你最好立刻先把Twelve-Factor App 的说明读一遍。

在这篇文章中我想笨一点方式让这些概念被更多的人明白(特别是没有云或开发人员背景的听众)。

总而言之,我认为强分离容量和状态是其中一个强大的云咒语,把大多数优势(和改变?)与传统IT相比较。

这种分离是一个在任何级别的一个真正的云的基础设施都是的核心原则。在这篇文章中,我利用一个大图提到了全部的复杂的云本机应用程序。

然而,即使你把云环境的最小的原子单元(即一个实例),分离容量和状态仍然是核心。看看亚马逊是如何描述由一个EC2实例与一对EBS磁盘(即持久的磁盘)组成的一个基本的工作负载:

在一个小得多的规模它传达了这篇文章我试图传达的同样的信息(图形化)。云中的各级模块化是核心。

题外话:具有讽刺意味的是,EC2默认为临时的磁盘,那么云本机应用程序模式(在实例级不需要状态存储)。然而,为了更好地服务传统非云本机应用程序,亚马逊引入一个EBS(单一实例级别持久性)的概念。一个可以称为在持久的磁盘anti-cloud模式的实例。我将因为这点抛弃它。

最后,正如你可能已经猜到了,在这篇文章中你所读到的关于云本机应用程序会引入其他流行语如:敏捷、DevOps、持续性开发、持续性部署和更多更多。

事实上,没有一个正确设计云本机应用程序没有办法,做到这些的。

原文链接:Cloud Native Applications (for Dummies)(翻译:李渊文)

原文发布时间为:2015-08-16 

本文作者:zaburo 

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:什么是云原生应用程序

时间: 2024-10-25 17:34:09

什么是云原生应用程序的相关文章

什么是云原生应用 有哪些关键点?

本文讲的是什么是云原生应用 有哪些关键点?[IT168 评论]最近讨论云原生应用越来越多,其是指原生为在云平台上部署运行而设计开发的应用.公平的说,大多数传统的应用,不做任何改动,都是可以在云平台运行起来的,只要云平台支持这个传统应用所运行的计算机架构和操作系统.只不过这种运行模式,仅仅是把虚拟机当物理机一样使用,不能够真正利用起来云平台的能力. 云并非把原先在物理服务器上跑的东西放到虚拟机里跑,真正的云化不仅是基础设施和平台的事情,应用也要做出改变,改变传统的做法,实现云化的应用--应用的架构

专访Dan Kohn:阡陌交迭,云原生布局开源生态构建及深度应用

嘉宾简介 Dan Kohn,CNCF执行董事.在加入CNCF之前,他曾是Skymoon Ventures(一个关注半导体和电信基础设施领域的种子期风险资本公司)的普通合伙人,并曾在医疗保健公司Spreemo及广告公司Shopbeam等创业公司担任CTO,还参与创建和启动了Linux基金会核心基础设施计划.此外,Dan曾帮助管理Craig McCaw旗下的大量电信公司,并以担任NetMarket(早期互联网公司之一)的创始人兼首席执行官开始了他的职业生涯.1994年,他率先发展起了网上音乐商店,并

攻击与响应:云原生网络安全与虚拟机安全

云原生工作负载和容器本质上是不同的.人们需要了解如何保持安全,首先要了解不断变化的威胁性质.那么哪个更安全:虚拟机(VM)还是容器?事实是,确保容器和云原生工作负载的安全与虚拟机不同,这一切都要从了解攻击和响应以及不断变化的威胁的性质开始. 多年来,安全生态系统一直处于响应状态.当攻击发生时,立即作出的反应是确保安全元素到位,有助于防止未来的攻击行为.根据2016年赛门铁克公司出具的互联网威胁报告,当今35%的网站存在漏洞.而更持久.更复杂和不断扩散的威胁要求安全团队重新考虑他们的方法. 云原生

云原生:云计算时代命题之终极解决方案

Cloud Native?云原生?很多人一看到这个词就懵了,到底什么是云原生? 云原生这个词其实由来已久,IT行业永远也不缺乏新概念.2015 年,Pivotal公司的Matt Stine提出Cloud Native这一概念,并结合这个概念包装了自己的新产品Pivotal Web Service和Spring Cloud.在Matt Stine所著的Migrating to Cloud Native Application Architectures一书中,他对云原生的概念进行了详细的阐述.该书

把容器当作迷你虚拟机使用不是云原生!

本文讲的是把容器当作迷你虚拟机使用不是云原生![编者的话]云服务和SaaS厂商创造了微服务的概念和"云原生"模型,以便在持续开发和运营过程中实现高效扩展.对于Facebook.Google或eBay这类始终在线的全球服务而言,传统的方法已不适用.容器与Docker作为此类微服务的终极打包工具应运而生,而Kubernetes.Docker Swarm和DC/OS这类新的编排平台则负责其部署.调度及生命周期的处理.Serverless及FaaS基本上就是这个模型更加自动化的一种演进. [深

云原生应用和容器设计模式的综述和展望

2016-12-12 作者:王昕 来源:InfoQ 信息系统的分层 我们平常所使用的所有应用软件,如果从根本上看,都可以看作一种信息处理系统.人们跟这些系统的关系,无非是人输入信息处理的请求意图,经过信息处理系统的处理,系统返回一个输出结果给人.如果只考虑一个系统的使用者,似乎对系统的输入者只有系统用户和系统运维,运维人员负责配置信息系统,用户负责使用信息系统.然而考虑一个信息系统的整个生命周期,其实一个信息系统的构建者也对这个系统不断有输入.经过了多年的工业化.信息化的过程,一个信息系统的构建

Docker 将 containerd 项目捐赠给云原生计算基金会

Docker 宣布将 containerd 项目捐赠给云原生计算基金会(Cloud Native Computing Foundation,CNCF). containerd 是 Docker 在2016年12月从 Docker Engine 中分离并单独集成且开源的项目,目标是提供一个更加开放.稳定的容器运行基础设施.containerd 可以作为 daemon 程序运行各个系统上,管理机器上所有容器的生命周期. 云原生计算基金会成立于2015年7月,由 Google 牵头,Linux 基金会

基于云的应用程序风格正在出现:交互系统

云计算正在改变我们看待技术的方式,它不会只是昙花一现.用户正在使用云存储音乐.创业公司正依靠云来起步和运行,摆脱巨额投资的需求.大型企业和政府正依靠云来使更多数据更容易访问.云计算正在改变企业和社会的运行方式,开启了丰富的创新途径.我们正在审视开发人员现在如何将记录系统与参与性系统相结合,我们看到了一种新的基于云的应用程序风格正在出现.这些应用程序就是交互系统. 这些应用程序要可持续发展,云计算需要构建于开源和标准之上.开源软件和开放标准的广泛采用应是每个人的目标.它意味着客户无需害怕供应商禁锢

使用Visual Studio 2013构建Office 365云业务应用程序

当前,对业务应用程序的要求.期望及其重要性达到了前所未有的高度.现代业务应用程序需要访问组织 内部与外部可用的数据.它们需要连接组织内不同的个人,帮助他们以丰富有趣的方式相互协作.应用程序 本身需要能够在多种外形的多种设备上使用,如屏幕尺寸各不相同的智能手机.平板电脑.便携式计算机和 台式机. 您需要一个平台提供一系列服务来满足这些应用程序的核心要求.您还需要一个工具集,以便高效构建这 些应用程序,并在组织内与现有开发运营流程集成. 本文将介绍 Visual Studio 2013 如何帮助您构