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

  • 谢丽

2015 年 6 月 22 日

话题:语言 & 开发架构

近日,教育类通讯软件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 服务,如RedshiftDynamoDB,因此,新平台要直接运行在EC2上。
  • 操作简单:他们希望迁移到新平台后,操作过程同在 Heroku 上一样简单。
  • Docker:他们希望可以继续使用容器作为部署单元。
  • 有弹性:他们非常看重停机时间,希望新平台足够健壮、有弹性。

为了达成上述目标,他们研究了支持 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等。要了解更多信息或参与讨论,请点击这里


感谢郭蕾对本文的审校。

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

立即免费注册 AWS 账号,获得 12 个月免费套餐:点击注册

有云计算问题?立刻联系 AWS 云计算专家:立即联系

语言 & 开发架构