2015 年 9 月

第 30 卷,第 9 期

此文章由机器翻译。

Azure 深入了解 - 跨云平台创建统一的 Heroku 式工作流

通过 Bruno Terkaly | 2015 年 9 月

几年前,Microsoft Azure 只需起步又总会有新一些媒体报导。在过去几年中,发生了重大变化。在 Microsoft 和社区的最大的工程团队具有青睐程度。本期的 Azure 深入了解,系列会移到世界各地的更加以客户为中心、 案例研究的视图。

对于此第一个 Azure 案例研究,我所接触 Gabriel Monroy。他认识到了一个机会并快速开发它成技术并调用初创公司 Deis。他的公司被快速获得,并 Monroy 成为新公司的首席技术官。当我首先满足 Monroy 并可以开始在黑客马拉松活动使用他的技术时,我告诉他,"它不会很长要获取之前。" 这是存入 2015 年 1 月。不超过几个月后,他轻举妄动的公司已通过 EngineYard 获取。

催生发明

但您仍可跨本地和公有云的分布式计算平台的爆炸式增长。这些平台由容器启用操作系统,例如 Linux 和 Windows,Docker 容器和群集启用 CoreOS 如 Linux 版本。

最成功的开放源码项目是需要从诞生了。假设您是一名架构师使财务社区成员可以设置的虚拟机的大型群集尝试支持开发、 测试和产品开发。在长时间之前, 您意识到保留又一遍地解决同样的问题。

这就是只是发生了什么变化 Monroy 在做 Linux 开发财务社区 2005年和 2006年中返回。他利用一些围绕 containerization,很可能在同一时间 Solomon Hykes 启动黑客创建 Docker 最早的技术。许多 Monroy 的工作,实际上,结果结束在 Docker。

许多公司一直在努力具有相同的时间大致需要简化开发/测试/生产管道。理想是获取到持续集成的阶段 — 该获取您的软件中以自动和及时的方式向用户的提升的权限状态。

公司希望可重复的过程中,但是存在很少或没有工具。公司还希望开发人员自助服务。他们不希望开发人员是由回硬件缺乏或 IT 运营 tyranny。开发人员不希望拉入 ops 只是为了在新的想法或项目上循环。

因此,相反,开发人员已开始在一个恶意的卷影 IT 世界中工作 — 秘密设置基础结构和释放本身从其他人的依赖关系。开发人员还希望能够在任何公共云、 是否 Amazon Web 服务、 数字 Icean、 Google 或 Azure 上运行。他们还想要运行在裸机上其自己的数据中心内,如有必要。

机会上踢下去

返回在后期 2007年和 2008 年早期,Heroku 提供一种分布式计算的新方法重点介绍 Ruby 开发人员想要开发、 测试和部署应用程序的单一环境。开发人员希望专注于其应用程序,不能对底层基础结构。他们想一个命令行界面与底层会让他们的平台上只是在应用程序和其数据的焦点。他们还不希望担心可用性、 停机时间、 灾难恢复、 部署、 生产、 向上和向下按需缩放、 版本控制和所有这些典型问题。一次他们确实不想要依赖于外部的 IT 管理员能够支持其工作负荷。这就是当 Monroy 第一次看到的机会。

大量的相关技术已逐渐融合触发 Monroy 的记住企业姿。他可能会使多个云平台上的 Heroku 样式开发人员工作流。在深入之前启用 Monroy 的想法的所有技术,下面我们来看这个开发人员可以在使用几乎任何公有云的 Heroku 型工作流的田园世界 Deis。

下面的代码安装 Deis 平台。此操作假定存在与要处理的 CoreOS Linux 机的群集 (承载在本地或云中):

# Install Deis tooling
$ deisctl install platform
# Deis platform is running on a cluster
$ deisctl start platform
$ deis register http://deis.example.com

除了与登录名和 SSH 证书相关的几个命令,开发团队是已准备好利用 Deis 并开始部署应用程序。一次 Deis 是安装,开发人员可以向开发、 部署应用程序然后测试并将它们移到生产环境中随刚才的几个命令。

实现技术

其他技术不断成熟的同一时间传入的过程中所示的帮助 Deis flourish, 图 1

支持 Deis 的聚合技术
图 1 支持 Deis 的聚合技术

Containerization 是一项关键技术中最新的服务器端 Ose 存在。已在 Linux 中一段时间。尽管不是在 Windows Server 中当前存在的它应该很快就是。Containerization 的概念是采用主机操作系统并在多个维度中进行分区 — 内存、 CPU 和磁盘。您可以中断到多个容器中运行一个物理操作系统的一台物理计算机。每个容器被隔离因此应用程序隔离在相互共享运行基本主机操作系统。

这会增加高效的硬件利用率,因为容器可以并行运行而不会影响另一个。Linux 容器 (LXC) 隔离 CPU、 内存、 文件 I/O 和网络资源。LXC 包括命名空间,来隔离应用程序与操作系统和单独的进程树、 网络访问权限、 用户 Id 和文件系统。

在早期阶段,即使它以前的基本组成部分 Docker,Monroy 有已利用 LXC。然后 Docker 面世并大众化 containerization 通过标准化跨 Linux 分发。真正的突破口逐渐 Solomon 创建 Docker 映像的中央存储库时。其他开发人员可以重用在向公众提供容器的生态系统将这就产生了可用。有多个 14000 可用映像网址 registry.hub.docker.com

您可以找到几乎每个可想象到的应用程序模式,以加快您的下一个项目。您甚至可以使您自己的映像可通过此注册表。如果您想要在您的应用程序中使用 Nginx 或 Kafka,因此不需要担心如何下载和安装应用程序、 配置系统设置和通常无需了解各个软件应用程序的特性。Deis curates Docker 图像作为您的应用程序,然后在你的群集之间分布作为 Docker 容器。很容易就可以通过利用 Docker 文件撰写自己的应用程序容器中:

FROM centos:latest
COPY . /app
WORKDIR /app
CMD python -m SimpleHTTPServer 5000
EXPOSE 5000

一旦定义 Docker 文件并设置 Deis 上你的群集,您的应用程序部署和管理变得更简单、 更强大。当您将这组合使用 Git 源代码存储库时,则这两个领域的最佳产品。您可以使用版本控制应用程序源代码,以及基础结构 (Docker 容器) 本身。

这种样式的应用程序开发和部署是可重复且可预测。它极大地加快了开发、 测试和生产环境之间移动的能力。Docker 文件部署到开发人员、 测试或生产服务器的简单代理:

# Assume the current folder contains Docker files
$ git add .
$ git commit -m "notes by a developer"
$ git push deis master

返回到 Heroku

Monroy 注意到 Heroku 做出了开发人员社区的巨大冲击极大地简化了应用程序部署、 执行和管理,因为主要 Ruby 和 Node.js 的应用程序。

开发人员通常位于以下位置上托管的命令提示符下,让他们执行的应用程序开发、 基础结构配置和缩放任务的几乎所有方面。Monroy 发现很棒 — 一个放置为开发人员以获取所有已完成,他工作和最小化数不清的开发工具。

了可以自动完成了大量运行一个群集的管理难题 — 备份和还原、 配置 DNS,定义负载平衡器,监视磁盘使用情况、 管理用户、 平台日志记录和监视,以及等等。添加节点是简单的情况下修改云配置文件通过命令行界面中的 URL。可能是运行一个群集的最重要方面是以使其自我修复,以便故障转移和灾难恢复会自动包括。

CoreOS

尽管 Heroku 有资金和时间来构建此自定义的平台,Monroy 将需要用于管理群集包含如负载平衡、 监视和照明、 故障转移和等等的片段的现成的解决方案。在相同的时间,称为 CoreOS 的 Linux 发行版本之一还获得开发人员的认同感。

CoreOS 将采用的技术来帮助完成预见到会 Monroy 世界的完美组合。CoreOS 是一种开放源为群集部署而设计的 Linux 操作系统。它着重于自动化、 部署、 安全性、 可靠性和可伸缩性。这两个精确地与其 Heroku 吸引开发人员的特征。

CoreOS 确实未提供查找 Monroy 万灵丹。CoreOS 并不是普通的基于 Linux 的操作系统。有趣的,它尝试先驱者其自己的称为火箭容器运行时的 Docker 容器的版本。

CoreOS 为表带来的创新至关重要。Monroy 和他的团队是最感兴趣的 etcd、 全套产品和 flannel。Etcd 是提供了可靠的方式通过妥善处理期间将容忍计算机发生故障,包括主服务器的网络分区的主选举跨计算机群集中存储数据的分布式的键值存储。将群集配置信息存储的 etcd 键值存储还以智能方式分布在群集中。

一个易于使用的 API 允许您更改此配置文件,其中然后会自动复制到群集中的其他节点中的值。Flannel 提供了用于每个容器运行时每篇文章中赋予一个子网的虚拟网络。这提供了每个容器在群集中一个唯一的、 可路由的 IP。这将显著减少端口映射复杂性。

全套产品可帮助您认为您的群集作为单个 init 系统,这样就无需担心单独的计算机运行您的容器的位置。全套产品自动保证将在群集上某处运行您的容器。因此如果计算机失败或需要更新,全套产品的软件将自动进入您的工作负荷限定机在群集。

请注意,在 图 2 可以将 put 的请求发送到该群集以判断特定服务所需的状态的全套产品。这就是组合起来便构成全套产品服务的基础探测功能。以您的名义此 put 的请求让你无需担心在群集的详细信息。

CoreOS 的概念图表
图 2 的 CoreOS 的概念图表

Monroy 就拥有了他构建所需的一切 Deis — 从 Docker 和能够识别群集的 Linux 版本/实现标准化的 containerization 模型称为 CoreOS。他现在可以提供面向大众,而不仅仅是那些无法承受所需的巨大的额外费用 Heroku 样式开发 Salesforce.com, ,该公司现在提供了 Heroku 作为一项服务。

三个基本组件是控制平面、 Docker 寄存器和数据计划。这些都以工作结合使用。它使用开发人员在新版本中,这可能包括这两个应用程序及其 Docker 生成文件的源代码中使用 Git 推送启动。

此新的生成,以及现有的配置中,会导致新的版本。这是然后推送到 Docker 注册表。然后在数据计划中运行的计划程序到开发人员、 测试或生产中提取已发布的图像。

在此阶段,则容器为托管二者 CoreOS 和通过 Deis,同时会提供容错、 可扩展性和其他平台即服务功能。此外在数据中计划是路由器,后者采用拒绝提交的应用程序使用和用户"路由"到适当的容器无法满足请求。图 3 描述了这些技术配合使用。

Deis 体系结构
图 3 Deis 体系结构

总结

某些最成功的开放源代码项目在座不要重新发明鼠标滚轮。它们需要预先存在的组件、 将它们组合在一起在单个伞和应用技术以独特的方式。Monroy 和在团队 Deis 只需这样做。它们驾驭 Docker 容器的强大功能 CoreOS 和 Heroku 样式的工作流。团队可以实现 Deis 不仅在 Azure 上,而且还在更不必说在本地、 以及其他公有云。

在深入了解 Azure 案例研究的下一期中,我将介绍 Docker。什么是 Docker? 如何做它变为亿美元公司在只需几年中并且它如何改变应用程序开发、 测试和部署到生产环境的方式?


Bruno Terkaly 是 Microsoft 的首席软件工程师,目标是跨设备启用的业界领先的应用程序和服务的开发。他负责从技术支持的角度,在美国以及全世界推动顶级云和移动的机会。他通过在 ISV 评估、开发和部署期间提供结构性指导和深入参与技术问题,帮助合作伙伴将他们的应用程序投向市场。Terkaly 还与云中和移动的工程组、 提供反馈和影响此路线图紧密合作。

感谢以下技术专家对本文的审阅: Gabriel Monroy (EngineYard)