写点什么

在 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:161699

评论

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

第三周总结

andy

元年云“宽能力”拓宽成长型企业数字化升级之路

人称T客

week3 作业& 手撕单例模式

不在调上

从单机事务到分布式事务

ElvinYang

大白话Java多线程,小白都能看的懂的哦

root

Java 多线程 线程安全 创建线程方式 什么是多线程

代码重构--架构师必备技能

极客李

奈学教育《百万架构师》课程大纲

古月木易

极客大学架构师训练营

week3 学习总结

不在调上

极客大学架构师训练营

架构师训练营第三周课后作业

竹森先生

极客大学架构师训练营

架构师训练营Week03

Frank Zeng

第三周作业

戴维斯

极客大学架构师训练营

【week03】作业1

chengjing

Tweak原理与越狱防护

冯选刚

万恶的NPE差点让我半个月工资没了

root

Java 程序员 互联网 NPE 空指针

week 3学习总结

Geek_2e7dd7

【week03】总结

chengjing

代码重构练习三

极客李

用于可视化软件体系结构的C4模型(转载)

清风徐徐

当教育遇上区块链,会擦出什么样的火花?

CECBC

区块链技术 去中心化 防篡改 教育资源共享

中心化是人性,去中心化是技术

CECBC

区块链技术 去中心化 超级节点

瓷都景德镇牵手蚂蚁区块链,重塑非遗陶瓷产业

CECBC

区块链技术 溯源 防篡改 景德镇 非遗

有益思考一则:概率与格局

石君

思考 思维方式 格局

【架构师训练营 - 作业 -3】组合模式

小动物

极客大学架构师训练营 作业 第三周

单例和组合模式

陈皮

Week 03- 作业一:设计模式

dean

极客大学架构师训练营

奈学教育《百万架构师》课程大纲

奈学教育

极客大学架构师训练营

架构师训练营week3学习总结

Frank Zeng

week3

Geek_2e7dd7

【架构师训练营 - 周总结 -3】设计模式、重构

小动物

总结 极客大学架构师训练营 第三周

第三周作业

andy

架构师训练营第 3 周 _ 学习总结

方舟勇士

课程总结

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