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裸机。下图是迁移完成后的系统架构示意图:

可以看出,他们将一个“路由器”应用程序附加到了面向互联网的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中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

你可能感兴趣的:(Empire:一个基于Docker和Amazon ECS构建的自管理PaaS平台)