[关闭]
@lsmn 2015-06-20T06:27:34.000000Z 字数 2299 阅读 3803

Empire:一个基于Docker和Amazon ECS构建的自管理PaaS平台

Remind Empire Docker Amazon PaaS


摘要

近日,教育类通讯软件Remind同名母公司开源了他们的自管理PaaS平台Empire。Empire是Amazon EC2容器服务(ECS)上面的一个控制层,提供了一个基于Docker的容器集群。Remind工程师Eric Holmes撰文介绍了Empire产生的过程及相关技术。

正文

近日,教育类通讯软件Remind同名母公司开源了他们的自管理PaaS平台Empire。Empire是Amazon EC2容器服务(ECS)上面的一个控制层,提供了一个基于Docker的容器集群。Remind工程师Eric Holmes撰文介绍了Empire产生的过程及相关技术。

2011年,Remind始于一个托管在Heroku上的单体Rails应用程序。Heroku使他们可以专注于产品构建,而不用关心基础设施建设。在起步阶段,那是个很好的选择。但现在,他们已经有2500万用户,其产品有大约50个后端服务构成。为此,他们需要超过200个dynos来支撑所有应用程序。他们开始认识到,需要创建一种可以满足业务增长需求的架构,而那在Heroku上是无法办到的,这主要是因为:

而对于未来的解决方案,他们希望可以满足如下要求:

为了达成上述目标,他们研究了支持Docker的开源平台DeisFlynn。Deis的复杂度超出预期,而Flynn没有一个稳定的版本,并且使用了一个完全自定义的负载均衡器,而不是一种像HAProxyNginxELB这样的稳定的方案。因此,他们放弃了这两个选项。

于是,Remind的一个团队开始了Empire的构建工作。由于受Deis、Flynn、Netflix AsgardSoundCloud Bazooka等项目的影响,他们最初选择基于CoreOS构建,并将fleet用于后台调度,但调度后台被设计为可插拔的。但是,在测试故障模式时,他们发现,etcd(当时是0.4版本)的脆弱和fleet的Bug导致了许多问题,他们无法解决像零宕机部署这样的问题。之后,他们还考察了Kubernetes,但是,由于需要运行一个虚拟网络,他们放弃了该选项。

巧合的是,Amazon ECS在那时正式公开发布,他们觉得它可以解决他们的大部分问题,比如,该服务集成了AWS Elastic Load Balancing(ELB),可以实现零宕机和“连接清空(connection draining)”。经过一些基本的测试后,他们将调度后台换成了Amazon ECS。每个定义在Procfile文件中的进程都直接映射到Amazon ECS中的一个“服务”。ELB取代了自定义的路由层。Route53解决了服务发现问题。DHCP使得服务只需要知道需要访问的应用的名称。如此一来,他们从系统中去除了许多变化中的部件,如etcd;他们的集群主机现在是部署了Docker和Amazon ECS代理的Ubuntu裸机。下图是迁移完成后的系统架构示意图:

此处输入图片的描述

可以看出,他们将一个“路由器”应用程序附加到了面向互联网的ELB上。该应用运行着Nginx及OpenResty,并将请求路由到恰当的私有应用程序。它还负责生成请求ID,用于追踪请求在服务间的传递路径。这样做的最大好处是,他们可以像管理Empire内其它应用程序那样管理这个路由器应用。将来,他们可能会用Kong取代Nginx 。

如今,Empire已经成为一个易于安装的自管理PaaS平台。它实现了Heroku平台API的一个子集,这意味着用户除了可以使用Remind提供的emp CLI之外,还可以使用hkHeroku CLI。虽然还没有达到1.0版本,但Empire已经运行着Remind的大部分应用程序和服务。而且,由Heroku迁移到Empire之后,服务的性能获得了大幅提升。Remind后续还会为Empire增加许多功能,他们希望Empire最终也能够支持以Kubernetes作为调度后台。

按照Holmes的说法,小型初创公司应该选择Heroku,因为那是部署应用程序的最简单方式。Empire需要用户构建自己的日志和指标基础设施,而且目前还处在活跃的开发中。但如果遇到了Remind公司遇到的限制,那么可以选择Empire作为基础设施。

Holmes的文章在Hacker News上引发了激烈的讨论,话题主要围绕相关技术和平台,比如,Vulcand、Kong、Cloud FoundryOpenShiftDigitalOceanDokku等。要了解更多信息或参与讨论,请点击这里

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注