写点什么

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

评论

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

详解责任链模式

大头星

浅谈 GET 和 POST 区别

叉叉敌

面试 post GET

Python代码调试指南

wangkx

Python Python基础

关于Aborted connection告警日志的分析

Simon

MySQL MySQL错误日志

ARTS打卡Week 11

teoking

看智微智能互动录播系统如何建设“三个课堂”

InfoQ_967a83c6d0d7

utf8字符集下的比较规则

Simon

MySQL 字符集

速看!今天我才知道,UUID还分五个版本

麦洛

Java uuid

1.Flink任务之间通信开销-6

小知识点

scala 大数据 flink

想不出来问题的你

escray

学习 面试

架构师训练营第十一周作业

Melo

代理模式详解

大头星

Java中的一些限制

xiaoxi666

disruptor 高性能队列最佳选择

柿子

队列 disruptoer 高性能队列

MacOS抓包工具Charles

叉叉敌

ios charles 抓包

6. 二十不惑,ObjectMapper使用也不再迷惑

YourBatman

json Jackson ObjectMapper

要刷LeetCode了,才发现自己连时间复杂度都不懂

大头星

算法 LeetCode

【Elasticsearch 技术分享】—— ES 常用名词及结构

程序员小航

Java 搜索引擎 elastic ES Lucene Elastic Search

顺时针遍历矩阵,提高系统高并发350倍,React Native原理浅析 组件设计原则 安全架构 防火墙ModSecurity John 易筋 ARTS 打卡 Week 14

John(易筋)

ARTS 打卡计划 组件设计原则 React Native 高并发优化

你期待的薪酬是多少?

escray

学习 面试

Docker 安装及配置镜像加速

哈喽沃德先生

Docker 容器 微服务

rockchip的yocto编译环境搭建

良知犹存

Linux yocto rockchip

从Vessel到二代裸金属容器,云原生的新一波技术浪潮涌向何处?

华为云开发者联盟

Docker 容器 云原生 k8s Vessel

ARTS打卡(20.08.17-20.08.23)

小王同学

我与游戏相伴【自我访谈2】

叶阳夏烟

系列 游戏 访谈录 剧情游戏 仙剑奇侠传

大数据技术思想入门(三):分布式文件存储的流程

cristal

Java 大数据 hadoop 分布式

架构师训练营 - 第 8 周学习总结

红了哟

一家估值20亿美元的公司,竟然没有办公室?

Atlassian

远程办公 Atlassian Jira

Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存

newbe36524

Docker 云计算 微服务 .net core ASP.NET Core

想问面试官什么问题么?

escray

学习 面试

“深化产教融合·共育数字人才”全国产教融合信息化高峰论坛·江苏站成功举办

InfoQ_967a83c6d0d7

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