# NYTimes 架构：无头，无主控，无单点故障

> 原文： [http://highscalability.com/blog/2014/1/13/nytimes-architecture-no-head-no-master-no-single-point-of-fa.html](http://highscalability.com/blog/2014/1/13/nytimes-architecture-no-head-no-master-no-single-point-of-fa.html)

![](img/e344a023a89234e354fd84f1c9ab2deb.png)

纽约时报（NYTimes）的系统架构师 Michael Laing 向[表示了极大的敬意](http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2014-January/032920.html)，使他们了解 [RabbitMQ](http://www.rabbitmq.com/) 的使用以及 RabbitMQ 邮件列表中的整体体系结构。 结束语表明这绝对是一个可以学习的架构：

> 尽管 Fabrik 看起来很复杂，但它具有简单的组件，并且主要是原理和管道。 掌握的关键点是没有头脑，没有主人，没有单点故障。 在撰写本文时，我可以看到组件发生故障（不是 RabbitMQ），并且我们正在对其进行修复，以使它们更加可靠。 但是系统不会失败，用户可以连接，并且消息可以传递，无论如何-所有这些都在设计参数之内。

由于很短，因此，我不能说得更好，这里我只复制几个原始资源：

> 简短说明一下，感谢 RabbitMQ 团队的出色产品。
> 
> 我们一流的在线产品 www.nytimes.com 具有新外观和新基础，现在包括使用 RabbitMQ 实现的消息传递体系结构。
> 
> 这种架构- Fabrik -在俄勒冈州和都柏林的 6 个 AWS 区域中分布了数十个 RabbitMQ 实例。 实例分为“批发”和“零售”两层。 通过 websockets / sockjs 连接到客户端。
> 
> 该系统自今天启动以来，已自动扩展到约 500,000 个用户。 连接时间保持在 200ms 左右。
> 
> Fabrik 提供突发新闻，视频提要等订阅服务，并将添加更多基于事件的服务。 它还支持与注册用户的订阅状态有关的个人消息传递。
> 
> 没有 RabbitMQ，该系统将无法实现。 这是一个无处不在的组件，从未动摇或失败过。
> 
> We are using: a single Amazon Linux AMI, RabbitMQ, Cassandra 2, python 2
> 
> 我们将皮卡搭配龙卷风和 libev 用于 nytuseaбrik 批发和零售产品； 我们的内部客户使用 Java 和 PHP。
> 
> 我们使用 Rabbit MQ 作为消息传递系统。 目前，我们处理的消息包括突发新闻警报和实时视频警报。 我们的内部客户通过 AMQP 向 fabrik 发送这些消息。 然后，我们将它们发送到堆栈中，以确保它们已交付。
> 
> 我们在堆栈的所有层都有 Rabbit，并用铁锹将它们连接起来。 我们自己的内部代码有助于根据那里的服务级别路由消息。 某些消息（例如突发新闻）必须尽快发出。 因此，我们将它们散布到整个群集中，然后将它们铲到其他区域的群集中进行处理。 消息从那里发送到前端进行传递。
> 
> 我们还将 Rabbit 用于个别邮件。 如果您是 NYTimes 的注册用户，我们可以亲自向您发送消息。 信用卡到期之类的事情。
> 
> 在生产中，我们在 c1-xlarges 的每个区域都有一个 RabbitMQ 客户端 3 集群和一个核心 3 集群。 弗吉尼亚州 c1 介质的代理群集将客户端连接到客户端群集。 所有服务都是并行的，因此我们可以添加更多的核心和客户端。
> 
> 零售层会自动缩放并使用 c1-medium，并且将单个兔子铲子连接到其中一只核心兔子。 每个 python websocket / sockjs 网关最多支持 10 万个客户端。
> 
> 我们将自动部署到 AWS 虚拟私有云中的子网中。 客户端通过最小的延迟被路由到最快的健康区域。
> 
> 在技​​术组件中，网关是最复杂的。 我们将逐步将其转移到开源中，并且第一部分可能是 python websocket / sockjs 库，坦率地说，它击败了大多数其他内容，并完全符合相关标准。 可以粗略地认为它是由 python 管理的 C 协同进程，因此，可以在其他语言/环境中重用。
> 
> 我们在 2 个区域/ 6 个区域中有一个 12 节点的 Cassandra 集群。 它用于消息的持久性和缓存。 我们不在 RabbitMQ 中使用持久性。 我们的服务是幂等的，重要的消息可能会被多次复制，从而创造有意竞速的条件，从而以最快的速度获胜。
> 
> Although it may seem complex, Fabrik has simple components and is mostly principles and plumbing. The key point to grasp is that there is no head, no master, no single point of failure. As I write this I can see components failing (not RabbitMQ), and we are fixing them so they are more reliable. But the system doesn't fail, users can connect, and messages are delivered, regardless - all within design parameters.

## 相关文章

*   [在 Reddit 上](http://www.reddit.com/r/programming/comments/1v4gzj/nytimes_architecture_system_doesnt_fail_users_can/)

一篇非常有趣的文章。 只是有机会略读，但我期待学习更多。

一个快速的问题：我注意到报价的字符集似乎存在问题（也许是从复制/粘贴时起？）。 NYTimes 架构名称周围有一些奇怪的符号。

我已将图像上传到 imgur，并提供了它对我的外观的屏幕截图。 没什么大不了的，但以为您可能想知道。 您可以在 [http://imgur.com/9IfuLX5](http://imgur.com/9IfuLX5) 上看到图像。

肖恩，可能是因为您的浏览器未设置为查看或接受 utf-8 字符？

托德（Todd），带有说明链接的错字-文章将其拼写为解密

这就是将字符发布到邮件列表的方式