Amazon EC2的引擎盖下容器服务

| | 评论( )

在我上一篇关于Amazon EC2服务(Amazon ECS)容器,我讨论的两个关键组件运行现代分布式应用程序集群:可靠的状态管理和灵活调度。亚马逊ECS使得构建和运行集装箱的应用程序很简单,但如何使亚马逊ECS有趣的发生。今天,我想探索亚马逊ECS架构这个架构实现。下面是图的基本组件亚马逊ECS:

我们如何协调集群

让我们来谈谈亚马逊ECS实际上是做什么。亚马逊ECS的核心是集群管理器,后端服务,处理集群的任务协调和状态管理。在集群管理器位于不同的调度器。集群管理和集装箱调度组件相互解耦允许客户使用和构建自己的调度器。集群是一个可用的计算资源池客户的应用程序。资源池,在这个时候,中央处理器,内存,和网络资源的Amazon EC2实例分区的容器。集群通过亚马逊ECS坐标亚马逊ECS集装箱代理集群中的每个EC2实例上运行。代理允许亚马逊ECS与EC2实例集群中的通信开始,停止,和监控容器要求由用户或调度程序。代理是用,有一个最小的足迹,并可以在GitHub Apache许可证。我们鼓励贡献和反馈是最受欢迎的。。

我们如何管理状态

协调集群,我们需要一个源在集群本身的真理:EC2实例的集群,任务在EC2实例上运行,容器组成一个任务,和可用资源或占领(e。g。,网络端口,内存,CPU、等等)。没有办法成功地启动和停止容器没有准确的知识集群的状态。为了解决这个问题,国家需要存储在某个地方,所以任何现代集群管理器的核心是一个键/值存储。。

这个键/值存储作为单一的事实来源在集群上的所有信息(状态,和所有更改状态转换)输入和存储。健壮和可伸缩,这个键/值存储需要分布式的耐用性和可用性,防止网络分区或硬件故障。但由于键/值存储分布,确保数据是一致的和处理并发的变化变得更加困难,特别是在一个国家的环境也在不断变化(e。g。,停止和启动容器)。因此,某种形式的并发控制必须到位,以确保多个状态改变不冲突。例如,如果两个开发人必威体育精装版app官网员请求一个EC2实例的所有剩余的内存资源的容器,只有一个容器可以获得这些资源,另一个必须告诉他们的请求无法完成。。

为了实现并发控制,我们实现了亚马逊ECS使用亚马逊的核心分布式系统原语之一:基于Paxos-based事务日志的数据存储,保存记录数据条目的每一个变化。任何写入数据存储作为事务提交在《与特定的订单ID。当前值在数据存储的总和所有事务记录的日志。从数据存储任何阅读在《华尔街日报》只是一个快照。写入成功,提出必须写最新的交易自上次阅读。此原语允许亚马逊ECS与乐观并发存储集群状态信息,这是理想的环境中不断变化的数据是共享的(如当代表共享的计算资源池的状态如亚马逊ECS)。这个架构提供亚马逊ECS高可用性,低延时和高吞吐量,因为数据存储是从不悲观地锁。。

通过API编程访问

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

通过“列表”命令,客户可以检索集群管理下,EC2实例运行在一个特定的集群,运行的任务,和容器的配置组成(我的任务。e。,任务定义)。通过“描述”命令,客户可以检索特定的EC2实例的细节和可用的资源。最后,客户可以在集群启动和停止任务。最近,我们进行了一系列的负载测试在亚马逊ECS,我们想分享一些性能特征的顾客应该期待在亚马逊ECS在构建应用程序。。

上面的图表显示了一个负载测试,我们从亚马逊ECS添加和删除实例集群,并测量了50和99百分位延迟的API调用“DescribeTask”超过一百七十二小时内。正如您可以看到的,延迟仍然相对趋于稳定,尽管大波动集群大小。亚马逊ECS能够与你无论多么大的集群规模大小,所有没有你需要操作或规模集群管理器。。

这组API行为形成的基础的解决方案,客户可以建立亚马逊ECS。一个调度器提供逻辑如何,的时候,,启动和停止容器。亚马逊ECS的架构设计共享集群的状态和允许客户运行许多种类的调度器(e。g。,本包装,传播,等)作为他们的应用程序的需要。架构允许调度器查询集群和分配资源的确切状态从一个公共的游泳池。乐观并发控制在允许每个调度程序来接收请求的资源没有资源冲突的可能性。客户已经创建了亚马逊ECS之上的各种有趣的解决方案,我们希望分享几个引人注目的例子。。

Hailo——自定义调度在一个弹性资源池

Hailo是一个免费的智能手机应用,它允许人们直接冰雹正规出租车的位置。Hailo已经超过60岁的全球网络,000司机和超过一百万名乘客。Hailo成立于2011年,是建立在AWS自第一天。在过去的几年中,Hailo已经从单一的应用程序运行在一个AWS地区microservices-based架构运行在多个地区。在此之前,每个microservice跑在一个集群实例的静态分区。Hailo经历的问题是在每个分区资源利用率低。这种架构不是很可伸缩、和Hailo不想让其工程师担心基础设施的细节或microservices的位置。。

Hailo决定要安排容器基于服务优先级和其他运行时度量在一个弹性资源池。他们选择亚马逊ECS集群管理器,因为它是一个托管服务,可以很容易地执行任务,充分暴露了集群状态通过API调用。这使得Hailo构建一个定制的调度器与逻辑,满足他们的特定的应用程序需求。。

提醒——平台即服务

提醒是一个网络和移动应用程序,使学生和老师短信与父母保持联系。提醒有24 m用户和超过1。5米老师在其平台上。它提供每月150的消息。提醒最初使用Heroku运行整个应用程序基础设施从消息传递引擎,前端API,和web客户端,后端聊天。大部分的基础设施部署为一个大整体应用程序。。

随着用户的增长,提醒想要的规模水平的能力。所以在2014年年底,工程团队开始探索走向microservices架构使用容器。团队想要构建一个平台即服务(PaaS)兼容Heroku API在AWS上。起初,研究小组几个开源解决方案(e。g。,CoreOS和Kubernetes)处理集群管理和集装箱编配,但工程团队很小,所以他们没有时间来管理集群基础设施和保持集群的高可用性。。

亚马逊ECS简要评估后,团队决定建立他们的PaaS的这项服务。亚马逊ECS完全管理和运营效率提供允许工程资源只关注开发和部署应用程序;必威体育精装版app官网没有集群管理和规模。今年6月,提醒开源对ECS的PaaS解决方案为“"帝国"。提醒看到性能大幅上涨(e。g。,延迟和稳定性)与帝国以及保障福利。他们的计划在接下来的几个月里超过90%的核心基础设施迁移到帝国。。

亚马逊ECS -完全管理平台

这些只是几个用例我们看到的客户。亚马逊ECS架构允许我们提供高度可伸缩的,高可用性,低延迟容器管理服务。与开放式并发访问共享的集群状态的能力通过API授权客户创建任何自定义容器所需的解决方案。我们专注于消除客户的未分化的重任。与亚马逊ECS,没有集群管理器安装或操作:客户可以而且应该只关注开发伟大的应用程序。必威体育精装版app官网。

我们已经发表了许多的功能自去年11月我们的预览。去杰夫·巴尔的博客回顾的特性我们增加了在过去的一年。阅读我们的文档和访问我们的控制台开始。我们还有更多的在我们的路线图,我们重视您的反馈:请提出问题和请求我们的论坛或在/ r / aws。。

评论

博客评论的Disqus