# Evernote Architecture-每天有 900 万用户和 1.5 亿个请求

> 原文： [http://highscalability.com/blog/2011/5/23/evernote-architecture-9-million-users-and-150-million-reques.html](http://highscalability.com/blog/2011/5/23/evernote-architecture-9-million-users-and-150-million-reques.html)

![](img/2b7cd4ef58b70bf0a20de70c8654141f.png)

[Evernote](http://evernote.com/) 的人们很友好，可以在标题为 [Architectural Digest](http://blog.evernote.com/tech/2011/05/17/architectural-digest/#) 的帖子中写出他们的体系结构概述。 Dave Engberg 描述了他们的网络，分片，用户存储，搜索和其他自定义服务的方法。

Evernote 是一个很棒的应用程序，部分实现了 [Vannevar Bush](http://en.wikipedia.org/wiki/Vannevar_Bush) 对 [memex](http://en.wikipedia.org/wiki/Memex) 的惊人[视觉](http://commons.nwc.hccs.edu/dylla/2011/02/08/6/)。 维基百科简要地描述了 Evernote 的功能：

> Evernote 是一套用于记录和存档的软件和服务。 “注释”可以是一段可格式化的文本，完整的网页或网页摘录，照片，语音备忘录或手写的“墨水”注释。 注释也可以具有文件附件。 然后可以将注释分类到文件夹中，进行标记，添加注释，进行编辑，给定注释并进行搜索。 Evernote 支持多种操作系统平台（包括 Android，Mac OS X，iOS，Microsoft Windows 和 WebOS），并且还提供在线同步和备份服务。

这里的关键是 Evernote 存储了大量数据，这些数据必须进行搜索，并通过它们的云同步到您使用的任何设备。

另一个关键是 Evernote 的业务模式和成本结构的影响。 Evernote 以其首席执行官的想法为基础，以[免费增值模式](http://www.fastcompany.com/magazine/147/next-tech-remember-the-money.html)的开创而著称：*获得 100 万人付款的最简单方法是让 10 亿人使用。* Evernote 旨在以 1％的转化率实现盈利。 免费的在线服务将用户限制为每月 60 MB，而高级用户每年需支付 45 美元才能使用 1000 MB /月。 为了盈利，他们大多数会存储大量数据而无需花费大量金钱。 没有太多的额外空间，这说明了其架构的简单实用性。

这篇文章简短明了，因此一定要详细阅读。 一些要点：

*   **控制成本**。 Evernote 在加利福尼亚州圣塔克拉拉的数据中心用完了一对专用机架。 使用云将无法以足够便宜的成本提供足够的处理能力和存储，从而无法使 Evernote 的业务模型正常工作。 由于他们的负载似乎并不尖锐，因此使用他们自己的 colo 站点非常有意义，尤其是考虑到他们如何利用 VM 来提高可靠性。
*   **基于数据**的性质的体系结构。 用户注释彼此独立，这对于 Evernote 在 90 个分片中将其 950 万总用户分片非常实用。 每个分片都是一对两个四核 Intel SuperMicro 盒，它们具有大量 RAM 和采用镜像 RAID 配置的 Seagate Enterprise Drive *完整机箱。 所有存储和 API 处理均由分片处理。 他们发现使用直接连接的存储具有最佳的性价比。 使用具有相同冗余级别的远程存储层将花费更多的成本。 将驱动器添加到服务器并使用 DRDB 复制的开销和成本都很低。*
*   **应用冗余**。 每个盒子运行两个虚拟机。 主 VM 运行核心堆栈：Debian + Java 6 + Tomcat + Hibernate + Ehcache +条纹+ GWT + MySQL（用于元数据）+分层本地文件系统（用于文件数据）。 DRDB 用于将主 VM 复制到另一个设备上的辅助 VM。 心跳信号用于故障转移到辅助虚拟机，因为主要虚拟机已死。 一种聪明的方式来使用这些功能强大的机器，并使用更少的资源来构建可靠的系统。
*   **数据可靠性**。 用户数据存储在两个不同物理服务器上的四个不同企业驱动器上。 每晚备份通过专用的 1Gbps 链路将数据复制到辅助数据中心。
*   **快速请求路由**。 用户帐户信息（用户名，MD5 密码和用户分片 ID）存储在内存中的 MySQL 数据库中。 可靠性来自 RAID 镜像，到辅助磁盘的 DRBD 复制以及每夜备份。 这种方法使用户向其数据的路由成为一种简单而快速的内存中查找，同时仍然具有很高的可用性。
*   一个由 28 个 8 核服务器组成的单独池处理图像以进行搜索，手写识别和其他服务。 这是自定义软件，是功能强大的附加值，其他任何人都无法轻易复制。
*   Puppet 用于配置管理。
*   使用 Zabbix，Opsview 和 AlertSite 进行监视。

未来的文章有望将重点放在单个子系统上。 我很期待这些，因为您必须欣赏他们为其业务模型创建的系统的优雅性。 一个值得学习的好例子。

## 相关文章 [

*   [与 Phil Libin 讨论 EverNote 的新 memex](http://blog.jonudell.net/2008/04/07/a-conversation-with-phil-libin-about-evernotes-new-memex/) ，作者：乔恩·乌德尔（Jon Udell）
*   [笔记软件](http://en.wikipedia.org/wiki/Comparison_of_notetaking_software)的比较
*   [Evernote 宣布 Dan Dan 的“闪亮的新 Evernote 网站”](http://www.geardiary.com/2011/03/29/evernote-announces-shiny-new-evernote-web/)

嗨，托德-感谢您的客气话。 在阅读您的帖子时，我进行了一些小的更正：
-我们的总注册用户略超过 950 万……100k 只是我们在每个分片上输入的数字。 （每月活跃用户超过 3M）
-您错过了以我的名字写的'g'...这可能意味着您是体育迷，因为那个 Dick Enberg 家伙总是把它拼错。 :-)

无需发布此评论，我只是认为我会通过。
谢谢，
戴夫

感谢您所做的更正 Dave。 对那个家伙没有太大的爱，我只是很难打字:-)

感谢您的精彩文章！

只是一个澄清问题； 您写道：“数据可靠性。用户数据存储在两个不同物理服务器上的四个不同企业驱动器上”。

您是否在此表示它们将数据存储在具有两个驱动器的一个 VM 上，然后将数据复制到另一台物理计算机上的具有两个驱动器的另一 VM 上（如下面的“应用程序冗余”所述）？