写点什么

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

  • 2016-08-08
  • 本文字数:1077 字

    阅读完需:约 4 分钟

在 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-08-08 19:001809
用户头像

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

关注

评论

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

learn go with tests 学习笔记(六)进程同步

半亩房顶

Go 语言

《effective-go》 学习笔记

半亩房顶

Go 语言

Java项目如何分层

老胡爱分享

分层架构 项目

learn go with tests 学习笔记(四)依赖注入

半亩房顶

Go 语言

字符串匹配 - Sunday算法

半亩房顶

数据结构与算法 字符串匹配算法

MySQL事物-学习笔记

Edison

MySQL 数据库 数据库事务

计算机网络基础(十五)---传输层-TCP协议详解

书旅

计算机网络 网络 协议栈 协议族

Netty之旅:你想要的NIO知识点,这里都有!

一枝花算不算浪漫

Netty nio

learn go with tests 学习笔记(五)并发

半亩房顶

Go 语言

零代码/无代码 vs 低代码 如何分类?如何区别?到底有什么不同?分析超过20款零代码低代码产品

代码制造者

编程 低代码 行业资讯 零代码

Python爬取微信公众号文章保存到数据库

wjchenge

“啰嗦”是成事唯一正确的方法

霍太稳@极客邦科技

团队管理 个人成长 团队协作 沟通

秒懂云通信:如何使用阿里云号码认证服务(小白指南)

阿里云Edge Plus

云通信 通信云 号码认证

learn go with tests 学习笔记(三) 指针和错误

半亩房顶

Go 语言

政策加持迎来区块链技术应用“红利期”

CECBC

500行代码写一个俄罗斯方块游戏

程序员生活志

我是如何参与硅谷顶级开源项目并赚得2500美金

阿水

硅谷 Minio

菊长说丨一文读懂MySQL4种事务隔离级别

华为云开发者联盟

MySQL 数据库 事务隔离级别 事务 华为云

企业网站搭建避坑指南

姜奋斗

网站 新手指南 企业 网站搭建 避坑

用户体验(UX)设计≠用户界面(UI)设计

刘华Kenneth

敏捷 设计 UX 用户体验

话题讨论 | 特朗普正式封禁微信,iPhone 和微信二选一?

InfoQ写作社区官方

写作平台 话题讨论

Web 开发必须掌握的三个技术:Token、Cookie、Session

华为云开发者联盟

HTTP Token web开发 session Cookie

关于微服务架构思考

Arthur

learn go with tests 学习笔记(二) 数组与切片

半亩房顶

Go 语言

消息疯狂堆积!RocketMQ出Bug了?

Edison

RocketMQ 中间件

learn go with tests 学习笔记(一) hello world

半亩房顶

Go 语言

疫情之年 下半年区块链应用落地会加速么?

CECBC

区块链 场景应用落地

RocketMQ源码解析-开篇

Edison

RocketMQ 中间件

Executor看不懂?教你如何盘它

Edison

后端 线程池

人生修炼秘籍

xiaoboey

时间管理 人生修炼 知行合一 熵增 时间复利

learn go with tests 学习笔记(七)反射

半亩房顶

反射 Go 语言

Etsy如何及为什么迁移到API优先的架构_重构_Thomas Betts_InfoQ精选文章