# MySpace 体系结构

> 原文： [http://highscalability.com/blog/2009/2/12/myspace-architecture.html](http://highscalability.com/blog/2009/2/12/myspace-architecture.html)

**更新：** [演示：MySpace.com 的幕后](http://www.infoq.com/news/2009/02/MySpace-Dan-Farino)。 MySpace 的首席系统架构师 Dan Farino 分享了 MySpace 的一些出色内部操作工具的详细信息。

MySpace.com 是 Internet 上增长最快的网站之一，每天有 6500 万订户和 260,000 新用户注册。 MySpace 通常因性能不佳而受到批评，不得不解决其他站点很少遇到的可伸缩性问题。 他们是如何做到的呢？

网站：http：//myspace.com

## 信息来源

*   [演示文稿：MySpace.com 的幕后故事](http://www.infoq.com/news/2009/02/MySpace-Dan-Farino)*   [Inside MySpace.com](http://www.baselinemag.com/print_article2/0,1217,a=198614,00.asp)

    ## 平台

    *   ASP.NET 2.0*   视窗*   其*   SQL Server

    ## 里面有什么？

    *   3 亿用户。*   将每秒 100 吉比特的速度推向互联网。 HTML 内容为 10Gb /秒。*   4,500 多个 Web 服务器 Windows 2003 / IIS 6.0 / APS.NET。*   1200 多个运行 64 位 Windows 2003 的缓存服务器。16GB 的对象缓存在 RAM 中。*   500 多个运行 64 位 Windows 和 SQL Server 2005 的数据库服务器。

    *   MySpace 每天处理 15 亿次页面浏览，并在一天中处理 230 万并发用户*   成员资格里程碑：
    -500,000 用户：一个简单的体系结构绊倒
    -100 万用户：垂直分区解决了可伸缩性问题
    -300 万用户：横向扩展胜于向上扩展
    -900 万用户 ：站点迁移到 ASP.NET，添加了虚拟存储
    -2 千 6 百万用户：MySpace 采用 64 位技术*   对于两个 Web 服务器和一个数据库，500,000 个帐户的负载太多。*   在 1-2 百万个帐户
    下，他们使用了围绕垂直分区概念构建的数据库体系结构，并为网站的各个部分提供了单独的数据库，这些部分提供了不同的功能，例如登录屏幕，用户个人资料和博客。
    -垂直分区方案有助于分担数据库读取和写入的工作量，并且当用户需要新功能时，MySpace 会将新数据库联机以支持它。
    -MySpace 从使用直接连接到其数据库服务器的存储设备切换到存储区域网络（SAN），在该区域中，磁盘存储设备池通过高速专用网络捆绑在一起，并且数据库连接到 SAN。 SAN 的更改提高了性能，正常运行时间和可靠性。*   拥有 300 万个帐户
    时，垂直分区解决方案并没有持久，因为它们在所有垂直切片中复制了一些水平信息，例如用户帐户。 进行如此多的复制将导致失败并降低系统速度。
    -网站的各个部分上的博客之类的单个应用程序对于单个数据库服务器而言会变得太大。
    -将所有核心数据重新组织成逻辑组织到一个数据库中
    -将其用户群分为 一百万个帐户块，并将所有键入这些帐户的数据放入一个单独的 SQL Server 实例中*   900 万至 1700 万个帐户
    -迁移到 ASP.NET，该站点使用的资源比以前的体系结构少。 运行新代码的 150 台服务器能够完成以前需要 246 台的工作。
    -再次看到存储瓶颈。 实施 SAN 已经解决了一些早期的性能问题，但是现在该网站的需求开始逐渐使 SAN 的 I / O 容量不堪重负-它可以在磁盘存储中读写数据的速度。
    -超过了每个数据库一百万个帐户划分方法的点击次数限制。
    -迁移到虚拟化存储体系结构，其中整个 SAN 被视为一个巨大的存储容量池，而无需特定磁盘专门用于服务特定应用程序。 MySpace 现在针对来自相对较新的 SAN 供应商 3PARdata 的设备进行了标准化*   添加了一个缓存层，即位于 Web 服务器和数据库服务器之间的一层服务器，其唯一的工作就是捕获内存中经常访问的数据对象的副本并将它们提供给 Web 应用程序，而无需数据库查找。*   2600 万个帐户
    -移至 64 位 SQL Server，以解决其内存瓶颈问题。 他们的标准数据库服务器配置使用 64 GB 的 RAM。*   **水平联合数据库**。 数据库是按目的分区的。 具有配置文件，电子邮件数据库等。分区基于用户范围。 每个数据库中都有 100 万用户。 因此，由于 Profile1 和 Profile2 一直拥有 3 亿用户，因此一直到 Profile300。*   不使用 ASP 缓存，因为它们的前端命中率不够高。 中间层缓存的命中率确实很高。*   **故障隔离**。 通过数据库将请求细分为 Web 服务器。 每个数据库仅允许 7 个线程。 因此，如果数据库运行缓慢，则仅那些线程将变慢，其他线程中的流量将流动。

    ## 运作方式

    *   **PerfCollector** 。 通过 UDP 集中收集性能数据。 比 Windows 更可靠，并且允许任何客户端连接并查看统计信息。*   **基于 Web 的堆栈转储工具**。 可以右键单击有问题的服务器，并获取.Net 托管线程的堆栈转储。 过去必须将 RDC 插入系统并附加调试器，然后在 1/2 以后得到答案。 缓慢，不可扩展且乏味。 不仅仅是堆栈转储，它还提供了有关线程正在做什么的大量上下文信息。 故障排除更加容易，因为您可以看到数据库上有 90 个线程被阻塞，因此数据库可能已关闭。*   **Web 库堆转储工具**。 转储所有内存分配。 对开发人员非常有用。 手动节省数小时的时间。*   **Profiler** 。 从头到尾跟踪请求并生成报告。 查看网址，方法，状态以及所有可帮助您确定缓慢请求的内容。 查看锁争用，是否抛出了很多异常，可能是有趣的事情。 重量很轻。 它在生产中的每个 VIP（100 个服务器的组）中的一个盒子上运行。 每 10 秒采样 1 个线程。 始终在后台跟踪。*   **Powershell** 。 Microsoft 的新外壳，可在进程中运行并在命令之间传递对象，而不是解析文本输出。 MySpace 开发了许多 Commandlet 以支持操作。*   开发了自己的异步通信技术来解决 Windows 网络问题并将服务器视为一个整体。 可以发送.cs 文件，对其进行编译，运行并重新发送响应。*   **Codespew** 。 在其通信技术上推送代码更新。 过去每天执行 5 次代码推送，现在每周减少 1 次。

    ## 得到教训

    *   您可以使用 Microsoft 技术来建立大型网站。*   从一开始就应该使用缓存。*   缓存是存储不需要在数据库中记录的临时数据的更好的位置，例如，为跟踪网站上特定用户的会话而创建的临时文件。*   内置的 OS 功能可检测拒绝服务攻击，可能会导致莫名其妙的故障。*   将您的数据分发到地理位置不同的数据中心以处理电源故障。*   从一开始就考虑使用虚拟化存储/群集文件系统。 它使您能够大规模并行化 IO 访问，同时能够根据需要添加磁盘而无需任何重组。*   开发在生产环境中工作的工具。 无法在测试环境中模拟所有内容。 在测试过程中，无法在质量保证中模拟 API 的用途和规模。 合法的用户和黑客会遇到在测试中没有遇到的极端情况，尽管质量检查人员会发现大多数问题。*   向硬件抛出问题。 比将其后端软件更改为新的工作方式更容易。 这个例子是他们为每百万个用户添加一个新的数据库服务器。 更改其方法以更有效地使用数据库硬件可能会更有效，但仅添加服务器会更容易。 目前。

我从未见过如此专注于网站架构的网站。 它所包含的丰富信息使我感到启发！

64 位硬件是这里的关键。 由于使用 32 位硬件，所有不良名称窗口的性能均很差。 大多数 Linux / unix 硬件在更早的时候就迁移到了 64 位硬件。 64 位计算机支持的额外 RAM 完全改变了计算机的性能。

“您可以使用 Microsoft 技术来建立大型网站。”

从个人 Myspace 经验来看，您似乎还是不能。 它无法正常运行，并且各处都出现错误。 通过丢弃每第二个或第三个请求，看起来像“可伸缩性”，从而减少了系统上的负载。

我认为他们宁愿将 ASP.NET 与 Cold Fusion 结合在一起，而不仅仅是.NET

MySpace 使用 NewAtlanta 提供的 BlueDragon.NET 在.NET 上运行其 CFML 代码。 在这里了解更多信息； [http://blog.newatlanta.com/index.cfm?mode=entry &条目= 764C1F4A-89D7-A61A-F9F71128027172A7](http://blog.newatlanta.com/index.cfm?mode=entry&entry=764C1F4A-89D7-A61A-F9F71128027172A7)

感谢您发布本系列文章，对于任何想要扩展的人来说，它都是一个巨大的资源。 我在博客中引用了它：

[http://smoothspan.wordpress.com/2007/09/17/who-doesnt-love-java-youd-be-surprised-and-part-2-of-the-toolplatform-rants/](http://smoothspan.wordpress.com/2007/09/17/who-doesnt-love-java-youd-be-surprised-and-part-2-of-the-toolplatform-rants/)

干杯，

体重

150 个服务器可容纳 2600 万个帐户？

每个服务器 173,333 个帐户。

那真的是一个很好的基准吗？ 我都不知道。 Facebook 使用多少台服务器？

[http://codershangout.com](http://codershangout.com)
编码人员可以进行视频群聊的地方！

I think they rather combine ASP.NET with Cold Fusion and not only .NET

I think they rather combine ASP.NET with Cold Fusion and not only .NET

感谢您提供信息。

他们的标准数据库服务器配置使用 64 GB 的 RAM。 -哇 64GB 的 RAM，那真是太棒了！

真正有趣且有用的文章，非常感谢！

我的空间是有用的网站，例如 facebook

那是一篇引人入胜的文章，也让我看到 SQL Server 和 ASP.Net 可以（尽管拥有聪明的组织和许多硬件）可以支持如此庞大的用户群。

感谢您分享这一信息。

Myspace 正在成为互联网上领先的社区中心。 其订户比任何其他中心都多。 我猜它甚至击败了 Orkut。
-----
[http://underwaterseaplants.awardspace.com“](<a rel=) >水下海洋植物
[http://underwaterseaplants.awardspace.com/seaweed .htm“](<a rel=) >海藻... [http://underwaterseaplants.awardspace.com/easyaquariumplants.htm”](<a rel=) >简易水族馆植物

从什么迁移到 ASP.NET？

我对“投入更多的硬件”而不是“有效地构建代码”的方法感到有些惊讶。

这闻起来像是一篇文章，提到了 MS 的优点，却没有提及缺点。为什么不提及它相对于开放平台的成本呢？ 我个人认为，如果有很多高流量网站（如 Facebook）建立在开放平台上，则意味着有可能开放。 那么，为什么我们要向 MS 付款呢？ 要拥有越来越多的专有非标准兼容技术？ 我认为除了微软之外，它不会对其他任何人有利。