在亚马逊EC2集装箱服务的胡德

||评论 (

在我关于Amazon EC2的集装箱服务(亚马逊ECS)过去后,我讨论了运行在集群上的现代分布式应用程序的两个关键组件:可靠的状态管理和灵活调度。亚马逊ECS使得构建和运行应用程序集装箱简单,但如何出现这种情况是什么使亚马逊的ECS有趣。今天,我想探索亚马逊ECS架构,什么该架构使。下面是亚马逊ECS的基本部件的示图:

我们如何协调集群

让我们来谈谈什么ECS亚马逊其实只是在做。亚马逊ECS的核心是集群管理器,用于处理集群协调和状态管理的任务的后端服务。在群集管理器的顶部位于不同的调度。集群管理和调度的容器是相互允许客户使用,并建立自己的调度分离的组件。集群仅仅是一个提供给客户的应用的计算资源池。资源池,在这个时候,是CPU,内存和Amazon EC2实例的网络资源,通过容器分区。亚马逊ECS通过坐标集群亚马逊ECS集装箱代理在集群中的每个EC2实例运行。所述试剂允许由用户或调度的请求亚马逊ECS与集群中的EC2实例来启动,停止和监控集装箱进行通信。写在围棋剂,具有最小的足迹,并在Apache许可证可在GitHub上。我们鼓励捐款和反馈是最欢迎的。

我们如何管理国家

To coordinate the cluster, we need to have a single source of truth on the clusters themselves: EC2 instances in the clusters, tasks running on the EC2 instances, containers that make up a task, and resources available or occupied (e.g., networks ports, memory, CPU, etc). There is no way to successfully start and stop containers without an accurate knowledge of the state of the cluster. In order to solve this, state needs to be stored somewhere, so at the heart of any modern cluster manager is a key/value store.

该键/值存储作为真理为群集(状态,并且所有变化到状态转变)上的所有信息的单个源被输入并存储在这里。是可靠和可扩展的,这个键/值存储需要分发的耐用性和可用性,防止网络分区或硬件故障。但由于键/值存储分配,确保数据的一致性和处理并发的变化变得更加困难,尤其是在状态不断变化(例如,容器停止和启动)的环境。因此,某种形式的并发控制的,必须落实到位,以确保多个状态的变化不会发生冲突。例如,如果两个开发商要求所有从它们的容器必威体育精装版app官网一定的EC2实例剩余的内存资源,只有一个容器,可以真正得到这些资源和其他将要被告知他们的请求无法完成。

为了实现并发控制,我们实现了使用亚马逊的核心分布式系统的图元一个亚马逊ECS:再保存到数据输入的每次改变的记录的Paxos的基于事务日志基于数据存储。到数据存储的任何写致力于为在基于特定订单的ID杂志上的交易。在数据存储的电流值是由所记录的日志所有交易的总和。从数据存储中的任何读取只在杂志上的时间快照。对于写成功,写建议必须是自上次读取最新的交易。该原语允许亚马逊ECS来存储其与乐观并发,这是理想的在不断变化的数据是共享的环境(例如表示计算资源例如Amazon ECS的共享池的状态时)簇状态信息。该架构得到亚马逊ECS高可用性,低延迟和高吞吐量,因为数据存储从不悲观锁定。

通过API编程访问

现在,我们有一个键/值存储,我们能够成功地协调集群,并确保容器所需数量的运行,因为我们有一个可靠的方法来存储和检索集群的状态。正如前面提到的,我们从集群管理分离容器调度,因为我们希望客户能够利用亚马逊ECS”国家管理能力的优势。我们通过一组,使客户能够访问所有存储在我们的键/值存储在一个结构化的方式集群状态信息API的行动开辟了亚马逊的ECS集群管理器。

通过“列表”命令,客户可根据管理检索集群,EC2实例在特定集群中运行,运行的任务和容器配置组成的任务(例如,任务定义)。通过“描述”命令,用户可以检索每个可用特定的EC2实例和资源的详细信息。最后,客户可以就在集群中的任何地方停止任务。我们最近进行了一系列的亚马逊ECS负载测试,我们想分享一些性能上亚马逊的ECS构建应用程序时特性的客户应该期待的。

上述图显示,其中我们添加了一个负载测试和移除的情况下从一个Amazon ECS簇和测得的第50和第99百分位数的API调用“DescribeTask”在72小时周期的等待时间。正如你所看到的,延迟保持相对无抖动,尽管簇的大小大的波动。亚马逊ECS能够不管你规模多大的簇大小 - 都没有你需要操作或缩放集群管理。

这组API的行动形成客户可以构建在Amazon ECS的最佳方案的基础。调度只是提供围绕如何,何时,何地启动和停止容器逻辑。亚马逊精英电脑架构设计共享集群的状态,让客户尽可能多的品种,根据需要为他们的应用程序调度(例如,装箱,传播等)的运行。该架构能够使调度查询群集的确切状态,并从公共池分配资源。到位的乐观并发控制允许每个调度器接收它要求没有资源冲突的可能性的资源。客户已经创造了各种亚马逊ECS的顶部有趣的解决方案中,我们想分享几个引人注目的例子。

Hailo - 自定义调度顶上的弹性资源池

Hailo是一个免费的智能手机应用程序,它可以让人们冰雹许可出租车直接到他们的位置。Hailo拥有超过60,000司机和一百多万人次的全球网络。Hailo始建于2011年,自1日已建成的AWS在过去的几年中,Hailo已经从一个AWS区域运行在多个地区运行的基于微服务架构的单片应用演变。以前,每个微服务运行实例的集群一个静态分区之上。Hailo遇到的问题是,在每个分区的资源利用率低。这种架构是不是很可扩展的,Hailo不希望它的工程师对基础设施的细节或微服务的位置担忧。

Hailo决定它要基于业务优先级和其它运行指标之上的弹性资源池调度容器。他们选择亚马逊作为ECS集群管理器,因为它是一个托管服务,可以轻松地执行任务状态,完全通过API调用暴露群集状态。这使得Hailo建立与逻辑的自定义调度程序,满足他们特定的应用需求。

提醒 - 平台即服务

提醒是一个Web和移动应用,使教师短信的学生和留在与家长联系。提醒有24M用户和超过150万教师在其平台上。它提供每月150M的消息。提醒最初使用的Heroku运行从消息递送引擎,前端API,和web客户端的整个应用基础设施,聊天后端。大多数这些基础设施的部署作为一个大型单片应用。

随着用户的增长,提醒要水平扩展的能力。因此,围绕2014年底,工程团队开始探索对使用的容器一个微服务架构的移动。该小组希望建立一个平台即服务(PaaS),这是与AWS的顶部Heroku的API兼容。在first, the team looked to a few open-source solutions (e.g., CoreOS and Kubernetes) to handle the cluster management and container orchestration, but the engineering team was small so they didn’t have the time to manage the cluster infrastructure and keep the cluster highly available.

简要评价亚马逊ECS之后,球队决定在此建服务之上的PaaS的。亚马逊ECS为全面管理,并提供运营效率,允许工程资源,只专注于开发和部署应用程序;必威体育精装版app官网有没有群集管理或规模。今年六月,提醒开源的PaaS的解决方案对ECS为“帝国”。提醒锯大的性能提升(例如,等待时间和稳定性)与帝国以及安全利益。他们在未来几个月的计划是核心基础设施的90%迁移到帝国。

亚马逊ECS - 全面管理平台

这些只是一对夫妇的我们从客户看到的用例。亚马逊ECS架构使我们能够提供一个高度可扩展,高度可用,低延迟的集装箱管理服务。访问的能力共享群集状态,乐观并发通过API使客户能够创建自定义的任何解决方案的容器,他们需要。我们把重点放在消除对客户的未分化繁重。与Amazon ECS,没有集群管理器安装或操作:客户可以和应该只专注于开发优秀的应用软件。必威体育精装版app官网

自去年十一月我们的预览,我们已经交付了一些功能。头以上杰夫·巴尔的博客对的特征的概括,我们在过去一年增加。请阅读我们的文件参观我们安慰开始。我们仍然有很多在我们的路线图,我们重视您的反馈:请邮寄的问题和请求我们的论坛/ R / AWS

评论

博客评论由Disqus