# 如今 Etsy 的架构是什么样的？

> 原文： [http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html](http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html)

![](img/9e364140091b80d83d988a6634e2f7c6.png)

*这是 [Christophe Limpalair](https://twitter.com/ScaleYourCode) 的来宾帖子，基于他对 [Jon Cowie](https://twitter.com/jonlives) ，员工运营部所做的[采访](https://scaleyourcode.com/interviews/interview/25)（[视频](https://www.youtube.com/watch?v=3vV4YiqKm1o)） 工程师和 Breaksmith @ Etsy。*

随着 Etsy 从新平台过渡到稳定且完善的电子商务引擎，Etsy 成为了一个令人着迷的观看和研究平台。 这种转变需要进行很多文化上的改变，但最终结果却是惊人的。

如果您还没看过的话，2012 年上有一篇[帖子概述了他们的成长和转变。 但是从那以后发生了什么？ 他们还在创新吗？ 如何制定工程决策，这如何影响他们的工程文化？ 这些是我们与 Etsy 的一名运维工程师，定制厨师的作者 Jon Cowie 在新的播客节目中探讨的问题。](http://highscalability.com/blog/2012/1/9/the-etsy-saga-from-silos-to-happy-to-billions-of-pageviews-a.html)

## [](#what-does-etsys-architecture-look-like-nowadays)如今 Etsy 的架构是什么样的？

自上一次更新可追溯到 2012 年以来（在前面提到的帖子中），他们的体系结构并没有真正改变太多。 尽管这听起来有些无聊，但它概述了一个重要的概念，并为我们提供了对 Etsy 的工程文化的一些见识。 在整篇文章中，我们都会回头介绍这种文化，但这是它们的总体架构：

Etsy 的生产基础设施全是裸机。 但是，在开发方面，他们可以虚拟化环境。 这为每个开发人员提供了一个代表整个堆栈缩影的虚拟机。 最终，虚拟环境仍在 Etsy 自己的物理硬件上运行。

实际的堆栈本身仍然看起来像这样：

*   的 Linux
*   阿帕奇
*   的 MySQL
*   的 PHP
*   缓存层
*   F5 负载平衡器

它们具有许多具有不同作业的不同缓存层。 他们大量使用 memcached 缓存数据库对象。

Etsy 具有面向第三方开发人员的面向公众的 API，并且还具有内部 API。 这些 API 有缓存层，因为有些答案不是短暂的。 例如，如果一个答案生存一个小时或更长时间，他们可能会缓存它。

当然，它们也大量缓存图像和静态资产。

这里的挑战是缓存失效。 确保您没有向用户提供过时的内容，而是充分利用了缓存以尽可能减少数据库的负载。 另外，请确保您通过将其缓存到更接近最终用户的方式，更快地向用户提供响应。 Etsy 团队还深深地关心着这件事，这在其工程博客 CodeasCraft.com 上的定期性能报告中可以明显看出。

尽管总体架构几乎相同，但这并不意味着 Etsy 工程师和 Ops 团队一直坐在那里摆弄他们的拇指。 好吧，也许其中一些有，但是我离题了...

## [](#so-what-are-their-ops-challenges-do-they-still-have-to-put-out-fires)那么他们的操作挑战是什么？ 他们还必须灭火吗？

我们只是看到了它们在成熟可靠的技术方面会如何出错，因此他们不会花费太多时间扑灭火灾。 新问题往往来自引入新系统。 我敢肯定，你们中的许多人以前都读过这篇文章：您介绍了一个新的系统，该系统在纸上可以解决您的所有问题。 除非它对您环境中当前的其他组件具有复杂且“不可能”的反应。 因此，您必须找出导致问题的原因以及解决方法。

老实说，如果您从事这一领域，那么您可能会活在当下。 这些有趣的挑战使您抓狂，您真的想弄清楚，以便继续进行下一个挑战。 除非有时花费的时间太长，然后变得很麻烦。

大多数公司面临的另一个挑战是试图雇用优秀人才。 您在哪里还能找到优秀的人才？ 如果您正在使用新的“热门功能”，则可能很难找到该人才，而且价格会昂贵得多。 但是，如果您选择像 PHP 这样成熟的东西，它并不是那么困难。 仍然很难，但是不像为 Scala 找到人那样难。

到目前为止，已有许多 PHP 工具出现了十年，而语言也是如此。 许多前沿漏洞已被消除。 这意味着更少的难以发现的怪异错误，以及更多的专家可以聘用。

## [](#does-that-mean-they-never-change-anything-in-their-architecture)这是否意味着他们从不更改架构中的任何内容？

不，绝对不是。 这意味着他们拥有制定使用新技术的决策的明确流程。

他们实际上使用一种工具来创建“体系结构评论”，支持者在其中输入支持材料和该思想背后的理论。 然后，一个团队将提出一个他们认为适合 Etsy 当前环境的概念。

让我们看一个最近的例子。 他们介绍了 Kafka 用于事件流水线。 为了做到这一点，一个团队提出了一个用例，说明了为什么要使用 Kafka 以及如何解决 Etsy 的实际问题。 然后，他们进行了体系结构审查，高级工程师和所有相关方聚集在一起讨论该提案。

它是一种成熟且成熟的技术吗？

它会真正解决问题吗？这是解决问题的最佳方法吗？

组件将如何与我们的系统反应？

谁来支持这个？

一旦回答了这些问题，它们便进入实施阶段。

在上线之前，它必须经历另一个称为“可操作性审查”的过程，该过程将验证一切是否就绪。 这包括设置适当的监视和警报，为每个待命人员设置适当的程序，等等。 与该实现有关的每个人都必须参与“什么，何时，如何”。

另一个重要的考虑因素是：“我们可以通过在已经拥有的工具上构建它来做到这一点吗？” 稍后，我们将详细介绍。

这些是在实施建议的技术之前必须回答的问题。 这种彻底的分析可能需要一些时间，但是对于已建立的电子商务平台而言，正常运行时间至关重要。

“我们非常重视站点的正常运行时间，可靠性和总体可操作性。”

## [](#customizing)自定义

我们已经看到 Etsy 的文化如何促进稳定。 我们还没有讨论的是它如何鼓励定制现有工具。

就像我们刚刚看到的那样，与其实施一个新的工具来解决问题，不如定制一个正在使用的工具，这更有意义。 一个典型的例子是定制 Chef。 乔恩·考伊（Jon Cowie）成为一些有影响力的厨师定制的一部分，例如[刀叉](https://github.com/jonlives/knife-spork)。 这种自定义实际上来自 Etsy 团队试图解决的问题。 当多个开发人员同时对同一 Chef Server 和存储库进行更改时，更改将被覆盖。 Jon 负责这个工具，不仅为一个大型开源社区提供了帮助，而且还解决了 Etsy 的一个关键且局限性的问题。

这是激发乔恩（Jon）编写 [Customizing Chef](http://shop.oreilly.com/product/0636920032984.do) 的一部分。 这是他希望自己拥有的书。

这也是 Chef 开源文化的一个很好的例子。 乔恩（Jon）强调说，Chef 并非设计为“一刀切”的解决方案。 它旨在为人们提供一个工具包，使我们能够解决自己的自动化问题。 Chef 的想法是，用户是他们自己系统的专家。 虽然它不能告诉您该怎么做，但它为您提供了工具，因此您可以自己做出决定，然后告诉您想要什么。

当然，这并不是说定制没有自己的问题。 如果自定义某些内容，则必须“拥有它”。 一旦决定开源该工具或自定义工具，它将变得更加复杂。 实际上，Etsy 在决定开放源代码工具之后就对此产生了疑问。 他们将开放该工具的源代码，但随后工程师将在本地下拉版本，为 Etsy 基础结构对其进行编辑，然后再将其推回主存储库。 许多项目只是没有被更新。

他们是如何解决的？ 通过适当的程序。 就像想要在系统中引入新技术一样，如果您想在 Etsy 开放项目的源代码，则需要回答一些有关该项目及其维护方式的问题。

它也很多都承认哪些项目不再需要维护了。 他们最终完成了多个项目，并明确表示不再进行更新。 这样一来，他们就可以重新组合并专注于内部实际使用的工具。

“因此，我们已经建立的流程更加适合确保我们只开源自己在生产中积极使用的东西。”

因为归根结底，如果没有人要维护一种工具，那么它可能不会对整个社区有所帮助。

## [](#what-about-you)你呢？

您的过程和思维方式有何不同？ 您从 Etsy 的方法中学到了什么吗？ 从他们的工程文化和开放源代码实践怎么样？

[关于 HackerNews](https://news.ycombinator.com/item?id=11345723)