去年11月,我曾宣布的预览的乐趣亚马逊EC2集装箱服务(ECS)再保险:发明。当时,我写过关于容器化如何使客户更容易地将他们的应用程序分解为更小的构建块,从而提高特性发布的灵活性和速度的文章。我还谈到了我们的客户在尝试扩展基于容器的应用程序时所面临的一些挑战,包括围绕集群管理的挑战。今天,我想深入探讨我们在构建Amazon ECS时做出的一些关键设计决策,以解决我们的客户所面临的核心问题。

在集群上运行的现代分布式应用程序需要两个关键组件 - 可靠的状态管理和灵活调度。这些挑战,工程师构建软件系统一直在试图解决时间长的问题。在过去,许多集群管理系统假定集群将要被专用于单一应用程序或将静态分割,以适应多个用户。在大多数情况下,这些集群运行的应用是有限的,由管理员设定。你的工作常常放在作业队列,以确保公平和提高集群利用率。对于现代分布式应用程序,许多这些方法打破,尤其是在亚马逊EC2和Docker容器启用了高度动态的环境。我们的客户期望旋转起来计算资源池为他们的需求集群和动态地改变现有的资源为自己的工作随着时间的推移而改变。他们希望这些集群跨越多个可用区,并越来越多地要分发多个应用程序 - 封装在Docker容器 - 无需静态分区集群。这些应用程序通常是长时间运行的进程和优先的不同程度的短暂工作的混合。也许最重要的是,我们的客户告诉我们,他们希望能够开始与一小簇和增长,随着需求的增长而不会增加操作复杂性。

现代调度系统需要更好的状态管理提供比传统的集群管理系统。横跨亚马逊EC2实例的集群中运行Docker容器客户需要知道这些容器运行,无论他们是在他们的理想状态。他们还需要关于正在使用的资源和剩余的可用资源以及信息的能力,以应对故障,包括的可能性,整个可用性区域可能变得不可用。这就要求客户将其集群的状态存储在一个高度可用和分布式key-value存储。我们的客户告诉我们,缩放和操作这些数据存储系统是非常具有挑战性的。此外,他们认为这是未分化的繁重而宁愿集中精力上运行他们的应用和发展其业务。让我们深入到亚马逊ECS的创新,解决了这些多大的复杂性和运行的高性能,高可扩展性多克尔感知集群管理系统的“肥料”的问题和排除。

使用Amazon ECS进行状态管理

在亚马逊,我们已经建立了一些核心分布式系统的原语支持我们的需求。亚马逊ECS是建立在这些原语中的一座山顶 - 基于Paxos的事务日志维护状态转换的历史。这些转变提供和使用接受乐观并发控制然后,将复制已接受的提议,从而实现高度可用和高度可伸缩的ACID兼容数据存储。然后,我们在一组简单的api后面公开这种状态管理。您可以调用Amazon ECS列表并描述api来访问集群的状态。这些api提供了集群中的所有实例以及在这些实例上运行的所有任务的详细信息。无论您是拥有一个实例和几个容器的集群,还是拥有100个实例和1000个容器的动态集群,Amazon ECS api都能够快速响应。不需要安装,也不需要管理数据库。

使用Amazon ECS进行调度

基于Amazon ECS的状态管理系统使我们能够为客户提供非常强大的调度功能。Amazon ECS作为共享状态的集群管理系统运行,允许调度器完全可见集群的状态。调度程序争夺它们所需的资源,而我们的状态管理系统解决冲突并提交可串行化事务,以确保集群状态的一致和高可用视图。需要这些事务保证来确保状态更改不会丢失,这是确保作业拥有所需资源的一个非常重要的属性。这允许多个调度程序并行地做出调度决策,允许您快速创建越来越常见的分布式应用程序。

亚马逊ECS包括像长期运行的服务或运行一次的作业常见的工作负载调度,客户可以编写自定义调度,以满足他们独特的业务或应用的需求。这意味着没有任务队列,无需等待任务的开始,同时锁定到位,而且最重要的应用是得到他们所需要的资源。

我希望这篇文章给你一些见解如何以及为什么我们建立亚马逊ECS。必威体育精装版app官网开发具有这些能力的系统是很难,需要在建设,缩放和操作分布式系统了很多经验。与Amazon ECS,这些功能都只需几个API调用提供给您。构建现代应用程序从未如此简单。对于新的亚马逊ECS式服务调度等功能的演练,请阅读杰夫·巴尔的帖子在AWS博客上,想了解更多的特性和功能,请阅读Chris Barclay在AWS计算博客

评论

博客评论由Disqus