转载

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

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

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

  • 缺少安全控制 :他们完全采用微服务/SOA架构,有一整套的内部服务。在Heroku上,每个服务都公开暴露在互联网上,因此需要身份验证、DoS缓解、积极的安全补丁等等。
  • 缺少可见性 :他们需要一个可以显示应用程序性能的、更清晰的视图。虽然Heroku提供了可选方案,但他们希望深入到操作系统层面。
  • 缺乏灵活性 :他们希望可以构建不受HTTP-only限制的服务。在Heroku上,他们无法控制路由层,所以,向不同的上游服务增加速度限制、常规身份验证、路由路径等中间件功能困难度增加。

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

  • AWS :他们已经使用了许多Amazon服务,如 Redshift 和 DynamoDB ,因此,新平台要直接运行在 EC2 上。
  • 操作简单 :他们希望迁移到新平台后,操作过程同在Heroku上一样简单。
  • Docker :他们希望可以继续使用容器作为部署单元。
  • 有弹性 :他们非常看重停机时间,希望新平台足够健壮、有弹性。

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

于是,Remind的一个团队开始了Empire的构建工作。由于受Deis、Flynn、 Netflix Asgard 、 SoundCloud 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裸机。下图是迁移完成后的系统架构示意图:

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

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

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

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

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

感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 Empire:一个基于Docker和Amazon ECS构建的自管理PaaS平台 )。

正文到此结束
Loading...