时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

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

评论

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

如何设置和使用 Proxifier教程

Geek_bf375d

爬虫 https IP 代理IP 代理IP设置

SQL 算术运算符:加法、减法、乘法、除法和取模的用法

小万哥

MySQL 数据库 程序员 sql 后端开发

《三国杀》完成鸿蒙原生应用开发,更多游戏品类加入鸿蒙生态

最新动态

微服务常用的组件与相关问题

想要飞的猪

spring中的设计模式

想要飞的猪

如何在VMMask指纹浏览器中设置代理

Geek_bf375d

爬虫 https IP 跨境电商 TikTok

iOS 的IP代理设置

Geek_bf375d

爬虫 https IP 代理IP 代理IP设置

Windows 10 上的代理设置

Geek_bf375d

爬虫 https IP 代理IP 代理IP设置

Windows 7 上配置代理服务器

Geek_bf375d

爬虫 https IP 代理IP 代理IP设置

国内开源的低代码框架有哪些?

代码生成器研究

redis高可用的方案都有哪些?

想要飞的猪

低代码开发平台真的靠谱吗?

代码生成器研究

springMVC是如何处理请求的与Spring容器有何关系?

想要飞的猪

企业数字化转型,如何战略性的使用数据和 IT ?

飞算JavaAI开发助手

彻底搞懂Redis事务机制

程序员花卷

缓存 分布式数据库 后端 事务 redis 精讲

2023年度盘点:10款好用的AI图片生成工具推荐!总有一款是你的菜。

彭宏豪95

人工智能 设计 在线白板 AIGC AI绘画

如何在没有 Root 权限的 Android 上设置IP代理

Geek_bf375d

爬虫 https 代理IP 代理IP设置 跨境电商

如何在 PS4 中添加IP代理

Geek_bf375d

爬虫 https 代理IP 代理IP设置 跨境电商

kafka的核心组件以及特点

想要飞的猪

为什么美国程序员工作比中国程序员工作轻松、加班少?

代码生成器研究

如何为 Windows 8.1 设置代理

Geek_bf375d

爬虫 代理IP 代理IP设置 免费代理ip 跨境电商

AI大模型驶向产业之海,需要高质数据“河道”引航

脑极体

存储

Android 上的代理设置

Geek_bf375d

爬虫 代理IP 代理IP设置 跨境支付 HTTPS协议

mysql的索引以及优化时的注意项

想要飞的猪

springboot是如何解决这些问题的?

想要飞的猪

当我遇见腾讯混元大模型|社区征文

法医

大模型

Windows 11 的代理设置:启用和禁用

Geek_bf375d

爬虫 IP 代理IP 代理IP设置 HTTPS协议

spring核心功能与他们的实现总结

想要飞的猪

ZK的数据结构以及协议

想要飞的猪

Logii 指纹浏览器中如何设置代理

Geek_bf375d

爬虫 https IP 代理IP 代理IP设置

Linux的代理设置

Geek_bf375d

爬虫 代理IP 代理IP设置 跨境电商 HTTPS协议

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