近日,教育类通讯软件 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 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。
立即免费注册 AWS 账号,获得 12 个月免费套餐:点击注册
有云计算问题?立刻联系 AWS 云计算专家:立即联系
评论