抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

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 服务,如 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 读者交流群InfoQ 好读者)。

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

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

2015 年 6 月 22 日 04:211706
用户头像

发布了 1008 篇内容, 共 322.2 次阅读, 收获喜欢 293 次。

关注

评论

发布
暂无评论
发现更多内容

从简历被拒到收割8个大厂offer,我用了3个月成功破茧成蝶

java小李

Java 面试

技术分析| 即时通讯和实时通讯的区别

anyRTC开发者

音视频 WebRTC 即时通讯 实时通讯 实时消息

阿里这份15w字Java核心面试笔记!GitHub凭借百万下载量位居榜首

java小李

Java 面试 Java核心笔记

阿里云飞天论文获国际架构顶会 ATC 2021最佳论文:全球仅三篇

阿里云大数据AI技术

WebAssembly正逐渐成为FaaS的主力

DisonTangor

Docker Faas webassembly

阿里大牛耗时三年整理出来的4588页Java面试诛仙手册,已全面开源

java小李

Linux Java 面试

我们向华为公司学什么?

石云升

华为 学习笔记 7月日更

纷多多拼团系统开发案例详解,纷多多拼团现成源码

系统开发咨询1357O98O718

香到爆!SpringBoot/SpringCloud全套学习脑图+面试笔记免费分享

java小李

SpringCloud Alibaba

短视频营销系统开发内容

开發I852946OIIO

HarmonyOS学习路之开发篇——线程管理

爱吃土豆丝的打工人

多线程 HarmonyOS 线程管理

阿里内网疯传的P8“顶级”分布式架构手册,GitHub上线直接霸榜了

java小李

微信业务架构 P8

阿里内网流传的9w字图解网络(全彩版)GitHub现已下载量过百万

java小李

HTTP

系统性能优化-数据结构

声网 Agora 音频互动 MoS 分方法:为音频互动体验进行实时打分

声网Agora

算法 网络

大专的我狂刷29天“阿里内部面试笔记”最终直接斩获十七个Offer

java小李

大数据 Java 面试

渣本展示Spring Cloud 架构绝活!最后成功入职阿里

java小李

Spring Cloud

独家!精挑细选三个月的臻品Java面试题,无糟粕!高质量

白亦杨

Java 编程 程序员 架构师 计算机

对话交互:封闭域任务型与开放域闲聊算法技术

OPPO小布助手

人工智能 深度学习 对话 智能助手 语义理解

模块四作业

燕燕 yen yen

架构实战营

秀出新天际的SpringBoot笔记,让开发像搭积木一样简单

java小李

Spring Boot java架构

Fil还有希望吗?目前Fil发展如何了?

IPFS星盟小熊

区块链 IPFS Filecoin fil filecoin生态

柏益美康系统开发案例详解,柏益美康开发源码

系统开发咨询1357O98O718

LeetCode题解:61. 旋转链表,闭合为环,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

北鲲云超算在生命科学领域的使用场景中有什么作用?

北鲲云

南山二脂系统开发功能,南山二脂源码案例设计

系统开发咨询1357O98O718

java并发编程

十二万伏特皮卡丘

贝丽美牙系统开发(开发案例),贝丽美牙源码设计

系统开发咨询1357O98O718

短视频平台获客软件系统开发

开發I852946OIIO

我看 JAVA 之 并发编程【二】java.util.concurrent.locks

awen

Java AQS lock Condition LockSupport

拿来吧你!从阿里P8手里抢来的的JDK源码解析手册,Alibaba真的强

java小李

jdk

Study Go: From Zero to Hero

Study Go: From Zero to Hero

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