写点什么

在 Gilt 使用 Scala、Docker 和 AWS 演化微服务

  • 2015-05-22
  • 本文字数:2151 字

    阅读完需:约 7 分钟

在 2015 年 Craft 大会上, Adrian Trenaman 分享了 Gilt.com 网站的架构演进。Gilt.com 的架构从一个使用 Ruby on Rails 开发的大应用程序开始,现在已经演化成,由很多小应用程序构成的基于云的微服务平台,使用 Scala、Docker 和 AWS 来开发和部署。 Trenaman 分享了在过去八年里,他在技术上和组织管理上学到的经验教训,此间,Gilt 由一家初创公司成长为市值 10 亿美元的公司。

Gilt.com 工程副总裁 Trenaman ,从介绍 Gilt Groupe 内部的核心业务和相应的技术部署开始谈起。Gilt.com 是总部设在美国的在线购物网站,专门从事奢侈品牌和生活用品的限时抢购。限时抢购的业务特点是,网站的峰值流量大量集中在销售启动之前的 15 分钟内,然后在接下来的两个小时内迅速减少到一个很低的基线流量。这样的业务模式在很大程度上意味着,应用程序发生故障的成本取决于一天中发生问题的时刻。

基本上是在每天中午 12 点,我们的客户像野牛群一样冲向我们的网站。这是我们每天乐得接受的拒绝服务攻击……

Gilt.com 网站始建于 2007 年,是一个 Ruby on Rails 开发的大应用程序,数据库用的是 PostgreSQL。当流量增加后,我们加上了 memcached 缓存层,并将网站内特定的业务功能移植到一系列的批处理作业中。在接下来的 4 年中,流量的增长开始对原有的架构造成压力,而且由于大应用程序的性质是一个“整体”,任何地方发生崩溃都会导致网站及业务支撑应用都彻底瘫痪。

2011 年,我们开始使用 Java 编程语言和 Java 虚拟机(JVM),对原始的大应用程序,按业务功能提取代码并提供服务。Trenaman 指出,这次改进没有删除原来的单一数据库依赖,因为总是有投资回报率更高的工作要做。然而,许多的小服务维护了一份主数据库的本地只读数据副本,而且,“购物车”服务使用了 Voldemort 作为自己的数据存储系统。

Trenaman 描述了 2011 年 Gilt 的架构,“庞大、松散类型的 JSON/ HTTP 服务”,数据是粗粒度的键 / 值对,跨服务边界交换。公司以惊人的速度不断创新,无意间,开发团队在“Swift”查看服务中,创造了一个新的基于 Java 的大应用,成为创新过程中的瓶颈。该架构最终导致“人们只关注代码库中的一部分”。

Trenaman 说,从 2011 年开始,Gilt 技术领导层决定以战略主动为中心(即所谓的逆康威定律策略)重组团队,此举的首要目标是使代码上线能够快速和简单。团队中并没有明确的架构师角色,一个以微服务为基础的“很多小应用程序( LOSA )”架构的出现,主要是 Gilt 的工程师文化和价值观驱动的。每个团队的目标和关键绩效指标(KPI)设定在一项主动性工作上,许多的主动举措就此开始,时至 2015 年,已经产生了大约 156 个微服务。

当我们将 Scala (一种运行在 JVM 中的编程语言)引入技术栈中时,加快了微服务数量的增长。Trenaman 分享了 Gilt 服务的现状,平均每个服务由 2000 行代码和 5 个源文件组成,运行在生产中的实例有 3 个。在 2011 年到 2015 年期间,Gilt 还决定了将遗留的应用程序栈“提升并转移”到 Amazon Web Services (AWS) 云上,新的微服务也开始部署于 AWS 平台之上。Trenaman 指出,Gilt 当前运行的服务绝大多数运行在 AWS EC2 t2.micro 实例上,虽然 t2.micro 只有相对较少的计算能力,但可以提供“爆发性的性能”。

Trenaman 指出,Gilt 非常看好微服务架构,因为它为 Gilt 团队带来了如下优点:

  • 减轻了团队之间的依赖——从而使代码上线更加快速。
  • 允许多个主动举措并行进行。
  • 支持多种技术 / 语言 / 框架。
  • 支持优雅地降级服务。
  • 使用“一次性代码”推进创新——这种方式易于对创新的判定,失败或继续。

同时,Trenaman 敏锐地指出,基于微服务的 LOSA 架构所面临的一系列挑战:

  1. 在多个团队和服务之间,维护多套环境是非常艰难的——Gilt 认为最好的解决方案是在线上测试,比如使用“黑金丝雀”发布。
  2. 很难定义服务的负责人——Gilt 选择了让团队和部门负责并维护他们的服务。
  3. 必须采用自动化部署——Gilt 正在使用 Docker 和 AWS 开发相关的工具(其中的一些代码即将开源)。
  4. 必须定义轻量级的 API——Gilt 拥有标准化的 REST 风格 API, apidoc 正在开发中,它们正被标记为“REST 风格的 AVRO”。
  5. 保持服从,同时在生产中给予工程师充分的自主权具有挑战性——为此,Gilt 在他们的“企业持续审计库(CAVE)”应用程序中,开发了“真正聪明的警报”。
  6. 需要努力管理 I/O 激增——一些服务内调用可能是多余的,这仍是 Gilt 技术团队所的关注。比如,循环(loops)目前还没有做到自动探测。
  7. 很难跨多个服务的数据库生成报告——Gilt 正在使用的实时事件队列将事件提供给数据湖(data lake)。目前是使用 Amazon 的 Kinesis S3 服务实现的。

可以访问 CraftConf 网站,获取更多关于 Adrian Trenaman 的“ Gilt 的可伸缩微服务”演讲的信息。可以访问 Gilt 技术博客,获取文中所述的 Gilt 技术的进一步细节。

查看英文原文: Scaling Microservices at Gilt with Scala, Docker and AWS


感谢张龙对本文的审校。

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

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

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

2015-05-22 09:162328

评论

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

百度商业托管页系统高可用建设方法和实践

百度Geek说

架构 高可用

一周信创舆情观察(10.11~10.17)

统小信uos

DTCC 干货分享:Real Time DaaS - 面向TP+AP业务的数据平台架构

tapdata

OpenMLDB Weekly Update(2021.9.12-2021.9.19)

第四范式开发者社区

人工智能 机器学习 开源技术 OpenMLDB

OpenMLDB Weekly Update(2021.10.4-2021.10.11)

第四范式开发者社区

第四范式 开源技术 OpenMLDB 机器学习数据库

现成DeFi交易所系统源码开发

Shopee ClickHouse 冷热数据分离存储架构与实践

Shopee技术团队

数据库 后端 Clickhouse 存储 S3

有了这个告警系统,DBA提前预警不是难题

华为云开发者联盟

数据库 监控 GaussDB(DWS) 智能监控 告警系统

现成秒合约交易APP系统开发模板

OpenMLDB Weekly Update(2021.8.30-2021.9.6)

第四范式开发者社区

机器学习 数据库 第四范式 开源技术 OpenMLDB

OpenMLDB Weekly Update(2021.9.5-2021.9.12)

第四范式开发者社区

机器学习 数据库 第四范式 开源技术 OpenMLDB

从零到熟悉,带你掌握Python len() 函数的使用

华为云开发者联盟

Python 数据结构 函数 内置函数 len()

架构3期模块一作业

渐行渐远

架构实战营

Defi系统开发搭建(案例)

永续合约APP系统开发简介(搭建)

【云管平台】多云混合云管理平台用哪个好?

行云管家

公有云 私有云 混合云 多云 云管理

分布式事务开山之作,带你深入理解分布式事务

华章IT

ARouter 在多 module 项目中实战

逆锋起笔

android arouter 路由框架 阿里arouter

OpenMLDB: 一文了解窗口倾斜优化技术细节

第四范式开发者社区

机器学习 数据库 开源技术 OpenMLDB

官方线索|金山集团“程风破浪,码动未来”

xcbeyond

1024我在现场

OpenMLDB Weekly Update(2021.9.19-2021.9.26)

第四范式开发者社区

机器学习 数据库 开源技术 OpenMLDB

模块一

迪马

CMP是什么意思?谁能解释下?

行云管家

cmp 多云管理平台 多云管理 云管平台

开发者测试你必须知道的7件事

华为云开发者联盟

软件 开发者 测试 代码 测试工程师

阿里巴巴10个顶级开源项目,确定不来看看?

Java 阿里巴巴 开源 面试 项目

OpenMLDB Weekly Update(2021.9.27-2021.10.4)

第四范式开发者社区

机器学习 数据库 开源 第四范式 OpenMLDB

OpenMLDB Weekly Update(2021.10.11-2021.10.18)

第四范式开发者社区

第四范式 开源技术 OpenMLDB 机器学习数据库

人脸识别主板能应用哪些产品设备?

双赞工控

安卓主板 工控主板 主板定制

OpenMLDB:一文了解带参数查询语句(paramterized query statement) 的细节

第四范式开发者社区

机器学习 数据库 GitHub 开源 OpenMLDB

SpringBoot 自动装配

黄敏

在Gilt使用Scala、Docker和AWS演化微服务_Scala_Daniel Bryant_InfoQ精选文章