在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架构所面临的一系列挑战:
可以访问CraftConf网站,获取更多关于Adrian Trenaman的“ Gilt的可伸缩微服务 ”演讲的信息。可以访问 Gilt技术博客 ,获取文中所述的Gilt技术的进一步细节。
查看英文原文: Scaling Microservices at Gilt with Scala, Docker and AWS
感谢张龙对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 )。