WAVE SUMMIT 2021深度学习开发者峰会 点击报名 了解详情
写点什么

Etsy 如何及为什么迁移到 API 优先的架构

2016 年 8 月 08 日

在 QCon 纽约 2016 大会上,Etsy 软件工程师 Stefanie Schirmer 介绍了其公司如何成功转换到 API 优先的架构,实现了多设备支持,解决了服务器端性能问题,被开发团队迅速采用。

Etsy 工程团队已经名声在外,他们设计的架构针对变更进行了优化,方便了持续试验,让他们可以每天部署50 次。因此,你可能会觉得意外,几年前,他们还在研究解决严重的性能问题。

他们的目标是1000 毫秒以下,因此,他们需要降低每个客户端请求的服务器处理时间。遗憾的是,单线程的PHP 世界轻易不允许并发API 调用,只能缓慢地顺序执行。Schirmer 及其同事需要解决如何实现并发,否则,他们就会冒着永久性性能问题的风险。更为复杂的是,他们并不清楚,性能退化的根本原因是后台问题,还是客户端请求的性质。

遗憾的是,开发团队不能只是致力于提高性能。除了要支持和升级Etsy.com 网站外,移动应用的新特性需要从平台上增加可扩展性。这两个问题的解决方案需要API 团队采用一种新的设计哲学,同时要保证它们是开发团队所熟悉且易于为他们所使用的API。

Etsy 使用“元端点(meta-endpoints)”创建了一个两层的 API,而不是依赖于一个有一组扁平端点的 API。和 Netflix eBay 的 ql.io 的模式类似,Etsy 的每个元端点都聚合了多个其他的端点。这让服务器端可以将底层的通用资源组合成设备或视图特有的资源。

整个技术栈构成了一棵多层的树,如下图 Schirmer 的幻灯片所示。面向客户的“订制(bespoke)”主页被裁剪成了特定的视图。它使用了一个并行元端点层,后者反过来又调用了原子组件端点。只有最底层的组件(它们不是元端点)能够和数据库交互。

元端点层降低了组合网站和移动应用订制视图的复杂性。不过,多个元端点单线程处理无法满足性能需求。Etsy 工程师利用 cURL 发起并行 HTTP 调用,甚至是修改libcurl 以满足需求。自定义的监控工具在请求通过框架扇出时将其调用层次可视化,让开发人员可以定位故障点。

他们还创建了其他的内部工具,用于简化新API 的应用。Etsy 首先自动化了API 客户端(它知道每个端点的具体参数)生成,然后又配上了文档,简化了开发人员的学习曲线。团队没有采用一种通用的培训方法,而是参加实验小组、代码实验室、午餐和学习研讨班,以及与有经验的开发人员结对。

Schirmer 认为,她讲述的故事是一个关于架构变革的案例,可以移植到其他系统。与 API 辅助工具和服务相关的工作有助于平台团队将新 API“卖给”开发人员。为此,Schirmer 及其同事一直保持着与开发团队的沟通,以确保框架在不断演化的过程中可以照顾到所有人的利益。

查看英文原文 How and Why Etsy Moved to an API-First Architecture

2016 年 8 月 08 日 19:001537
用户头像

发布了 1008 篇内容, 共 315.3 次阅读, 收获喜欢 284 次。

关注

评论

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

区块链在农业领域能有什么用武之地?

CECBC区块链专委会

区块链技术 上链 农业链 三农

架构师训练营 Week 02 作业

Wancho

架构师训练营第二周作业 (3)

hiqian

架构师实现自己架构的主要手段

_MISSYOURLOVE

极客大学架构师训练营

极客大学架构师训练营 编程的本质与未来 第三课 听课总结

John(易筋)

极客时间 极客大学 架构师 极客大学架构师训练营 编程的未来

使用接口隔离原则优化 Cache 类的设计

李广富

Flink on Zeppelin (3) - Streaming篇

章剑锋_Jeff

大数据 flink 流计算 Zeppelin

架构师训练营 -week2-总结

sljoai

架构师训练营第2周总结

Glowry

极客大学架构师训练营

架构师训练营第二周作业

子豪sirius

架构师训练营第0期第二周作业

无名氏

依赖倒置原则 DIP 依赖反转原则

第 2 周 - 学习总结

大海

极客大学架构师训练营

架构师训练营-week2-作业

sljoai

作业 week

依赖倒置原则

Halley

训练营第二周作业

Mr冰凉

架构师训练营 - 第二周作业

Melo

第 2 周 - 课后作业

大海

分布式唯一ID解析

Chank

软件设计原则

jason

架构师训练营--第二周作业

_MISSYOURLOVE

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

OOD设计原则之DIP

无心水

极客大学架构师训练营 面向对象设计原则 OOD SOLID

第 02 周 开发编程框架 命题作业

Jaye

架构师训练营-week2-作业

晓-Michelle

极客大学架构师训练营

设计原则之依赖倒置和接口隔离

林昱榕

极客大学架构师训练营 依赖倒置 设计原则 接口隔离

架构师训练营 - 第二周作业

zcj

极客大学架构师训练营

架构师训练营第二周 - 总结

无心水

极客时间 架构师 极客大学架构师训练营 23种设计模式 面向对象设计原则

软件设计原理

李海明

专栏

Week 02- 作业:设计原则

dean

极客大学架构师训练营

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

子豪sirius

训练营第二周总结

Mr冰凉

极客大学架构师训练营--编程的未来 面向对象 依赖倒置原则 -- 第二次作业

John(易筋)

极客时间 极客大学 架构师 极客大学架构师训练营 依赖倒置原则

Etsy如何及为什么迁移到API优先的架构-InfoQ