当前位置: 首页 > news >正文

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

在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)”主页被裁剪成了特定的视图。它使用了一个并行元端点层,后者反过来又调用了原子组件端点。只有最底层的组件(它们不是元端点)能够和数据库交互。

\\

8ac53cb5796ccb871ee69b36190be0a2.png

\\

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

\\

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

\\

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

\\

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

相关文章:

  • SpringBoot中AOP的配置
  • iOS标准库中常用数据结构和算法之查找
  • CoreText实现图文混排之点击事件-b
  • 性能优化技巧 - 集群维表
  • 不同机器下,游戏编程如何保证物体移动具有相同的速度
  • 量子通信是个鸡肋,没有证券分析师说得那么好
  • 微信,QQ这类IM app怎么做——谈谈Websocket
  • DRF如何序列化外键的字段
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • iOS开发UI篇—CAlayer层的属性
  • Surrogate data 代理数据
  • 延迟
  • 网络设备
  • 马哥2016全新Linux+Python高端运维班第二周作业
  • 如何搭建配置php开发环境
  • 自己简单写的 事件订阅机制
  • 2017-09-12 前端日报
  • AHK 中 = 和 == 等比较运算符的用法
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • fetch 从初识到应用
  • Flex布局到底解决了什么问题
  • JAVA SE 6 GC调优笔记
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • java取消线程实例
  • nodejs实现webservice问题总结
  • node入门
  • python大佬养成计划----difflib模块
  • React as a UI Runtime(五、列表)
  • 翻译:Hystrix - How To Use
  • 分享几个不错的工具
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 类orAPI - 收藏集 - 掘金
  • 如何利用MongoDB打造TOP榜小程序
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 走向全栈之MongoDB的使用
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • #1014 : Trie树
  • #define用法
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $forceUpdate()函数
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (超详细)语音信号处理之特征提取
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (三)elasticsearch 源码之启动流程分析
  • (四)鸿鹄云架构一服务注册中心
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)Sql Server 保留几位小数的两种做法
  • (转)可以带来幸福的一本书
  • (转载)(官方)UE4--图像编程----着色器开发
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net core 源码_ASP.NET Core之Identity源码学习