写点什么

Amazon EC2 容器服务背后的技术

  • 2015-07-24
  • 本文字数:1796 字

    阅读完需:约 6 分钟

Amazon EC2 Container Service (ECS) 是一个高度可扩展的高性能软件容器管理服务,它支持 Docker,使用户可以轻松地在 Amazon EC2 实例集群上运行应用程序。近日,Amazon 首席技术官 Werner Vogels撰文介绍了Amazon ECS 的架构。下图是Amazon ECS 包含的基本组件:

Amazon ECS 的核心是集群管理器,这是一个处理集群协调和状态管理任务的后台服务,它的上面是不同的调度器。集群管理和容器调度相互分离,用户可以构建自己的调度器。集群是一个供用户应用程序使用的计算资源池,而所谓的资源是指由容器划分的 Amazon EC2 实例的 CPU、内存和网络资源。Amazon ECS 通过运行在每个实例上的 Amazon ECS 容器代理协调集群。该代理允许 Amazon ECS 与 EC2 实例通信,并在用户或调度器请求时启动、停止和监控容器。它是用 Go 编写的,在 GitHub 上遵循 Apache 许可协议开源。

为了协调集群,需要一个有关集群状态的唯一信息源,提供诸如集群包含的 EC2 实例、运行在实例上的任务、组成任务的容器以及可用资源或已占用的资源这样的信息。这样,才能成功地启停容器。为此,他们将状态存储在一个键 / 值存储中。在任何现代集群管理中,键 / 值存储都是一个核心。而且,为了实现持久性和高可用性,预防网络分区或硬件故障,该键 / 值存储需要采用分布式部署。但这又带来一个问题,就是数据一致性很难保证,并发修改也很难处理。这就需要有一种并发控制机制来确保多个状态修改不会冲突。

为了实现并发控制,他们在实现 Amazon ECS 时使用了 Amazon 的其中一个核心分布式系统组件:一个基于 Paxos 算法以事务日志为基础的数据存储。该组件记录了每个数据条目的每次修改。每次写入操作都会作为日志中的一个事务提交,并且有一个特定的有顺序的 ID。数据存储中的当前值是根据日志记录所做的所有事务操作的总和。它允许 Amazon ECS 采用乐观并发的方式存储集群状态信息,在一个共享数据不断变化的环境中,这是非常合适的。

有了键 / 值存储,就可以协调集群了。而为了使用户能够利用 Amazon ECS 的状态管理功能,他们通过一组 API 开放了 Amazon ECS 集群管理器。用户可以通过它们以一种结构化的方式访问存储在键 / 值存储中的所有集群的状态信息。这组 API 成为用户在 Amazon ECS 上构建自己的解决方案的基础。Vogels 举了两个例子。

一个是自创建第一天起就托管在 AWS 上的免费叫车应用 Hailo 。在过去的几年里,该应用从一个运行在单个 AWS 区域中的单体应用程序演化成为一个运行在多个区域中的基于微服务的架构。起初,每个微服务运行在一个实例集群上。但实例为静态分区,导致每个分区的资源利用率都不高。为此,他们决定基于服务优先级和其它指标在一个弹性资源池上调度容器。他们选择了Amazon ECS,因为后者通过API 完全暴露了集群状态,使他们可以使用满足特定应用需求的逻辑构建一个自定义的调度器。

另一个是教育类通讯软件 Remind 。它起初是一个运行在 Heroku 上的大型单体应用。但随着用户数的增长,他们希望具备水平扩展的能力。因此,大约在 2014 年底,其工程团队开始探索使用容器迁移到微服务架构。他们希望在 AWS 上构建一个兼容 Heroku API 的 PaaS(平台即服务)。为了管理集群和容器编排,他们首先考察了一些开源解决方案,如 CoreOS 和 Kubernetes。但考虑到团队规模较小,他们没有时间管理集群基础设施及保持集群高可用。经过简单的评估之后,他们决定在 Amazon ECS 上构建他们的 PaaS。这样,工程团队就可以专注于应用开发和部署。在 6 月份的时候,Remind 开源了他们的 PaaS 解决方案“ Empire ”。在接下来的几个月中,他们将把核心基础设施的 90% 迁移到 Empire 上。

总之,Amazon ECS 的架构提供了一种高可扩展、高可用、低延迟的容器管理服务。它允许以乐观并发的方式访问共享的集群状态信息,并通过 API 赋予用户创建自定义容器管理解决方案的能力。另外,Vogels 还提到,集群中实例的数量并不会对 Amazon ECS 的延迟产生明显的影响。

感兴趣的读者可以点击这里查看过去一年来Amazon ECS 增加的特性。


感谢郭蕾对本文的审校。

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

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

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

2015-07-24 05:223145
用户头像

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

关注

评论

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

StarRocks致工程师们的一封信

StarRocks

大数据 程序员 数据分析 工程师 StarRocks

Python OpenCV 之图像的叠加,图像处理取经之旅第 16 天

梦想橡皮擦

Python OpenCV 4月日更

拥抱云原生,基于eBPF技术实现Serverless节点访问K8S Service

UCloud技术

容器 云原生 k8s serverles

智能取色-为多元化的产品场景选择完美的色彩组合

百度贴吧技术团队

智能取色 个性化 视觉策略 沉浸感

2021年金三银四全新版互联网大厂面试题,分类80份PDF,累计4700页

Java 编程 程序员 架构 面试

零基础学Tableau系列 | 01—Tableau简介、条形图与直方图

不温卜火

数据可视化 数据清洗 4月日更

Rust:范型使用trait限定的一点总结

Microwood

rust Trait 范型 范型约束Output Add

可能是最糟糕的愚人节玩笑:科技史上的美式疯狂

脑极体

一文学完所有的Hive Sql(两万字最全详解)

五分钟学大数据

大数据 hive 4月日更

五种不同类型的领导模式

石云升

领导力 28天写作 职场经验 管理经验 4月日更

Hi Array!~~~你所经常遇见的TA!

Chalk

JavaScript 大前端 数组 array 4月日更

Spark查询优化之谓词下推

小舰

4月日更

CMS前世今生

叫练

CMS JVM 垃圾收集

I'm Back

小天同学

思考 个人感悟 4月日更

模块1作业

Geek_2e7dd7

架构实战营

从0开始的支付业务架构演进之路

誰敢得罪我

酷家乐 x StarRocks:家居SaaS独角兽如何实现数据分析全面升级,大幅降低平台成本

StarRocks

大数据 数据分析 presto 营销数字化 StarRocks

Flink中的无界数据流与有界数据流

大数据技术指南

flink 4月日更

uni-app对接金山文档在线预览服务

薛定喵君

莫高窟永不褪色的微笑,照耀在华为未曾止步的数据保护征程

脑极体

聪明人的训练(一)

Changing Lin

4月日更

Laravel 服务容器实例教程--深入理解控制反转(IoC)和依赖注入(DI)

一个大红包

4月日更

历史命令被黑客删除?教你实时备份

运维研习社

Linux 4月日更 服务器安全

1.4 Go语言从入门到精通:Go代理goproxy

xcbeyond

Go 语言 4月日更 goproxy

Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文

Java redis 程序员 架构 计算机

根据码龄来爬取CSDN博客粉丝

空城机

Python 爬虫 python 爬虫 4月日更 粉丝数据

后端开发必须要懂的Redis,Redis的数据结构

Linux服务器开发

redis 分布式 后端 web服务器 Linux服务器开发

【leetcode题目】2. 两数相加

程序员架构进阶

LeetCode 28天写作 算法解析 4月日更

ElasticSearch读写模型&数据复制模型

yhh

elasticsearch 数据复制模型

勇做全球区块链“分布式存储”领航

CECBC

分布式

新动能 · 新机遇:SaaS软件提供商 Zoho 25 周年战略再升级

科创人

Amazon EC2容器服务背后的技术_语言 & 开发_谢丽_InfoQ精选文章