# Slashdot Architecture-互联网的老人如何学会扩展

> 原文： [http://highscalability.com/blog/2007/11/12/slashdot-architecture-how-the-old-man-of-the-internet-learne.html](http://highscalability.com/blog/2007/11/12/slashdot-architecture-how-the-old-man-of-the-internet-learne.html)

**Slashdot effect**: overwhelming unprepared sites with an avalanche of reader's clicks after being mentioned on Slashdot. Sure, we now have the "Digg effect" and other hot new stars, but Slashdot was the original. And like many stars from generations past, Slashdot plays the elder statesman's role with with class, dignity, and restraint. Yet with millions and millions of users Slashdot is still box office gold and more than keeps up with the young'ins. And with age comes the wisdom of learning how to handle all those users. Just how does Slashdot scale and what can you learn by going old school?

Site: http://slashdot.org

## 信息来源

*   [Slashdot 的设置，第 1 部分-硬件](http://meta.slashdot.org/article.pl?sid=07/10/18/1641203&tid=124)
    *   [Slashdot 的设置，第 2 部分，软件](http://meta.slashdot.org/article.pl?sid=07/10/22/145209)
    *   [Slashdot 第 3 部分的历史-成为公司](http://meta.slashdot.org/article.pl?sid=07/10/17/1412245)
    *   [Slashdot 的历史第 4 部分-昨天，今天，明天](http://meta.slashdot.org/article.pl?sid=07/10/31/1631213)

    ## 该平台

    *   MySQL
    *   Linux（CentOS / RHEL）
    *   磅
    *   Apache
    *   Perl
    *   内存缓存
    *   LVS

    ## 统计资料

    *   从 1999 年开始构建系统。
    *   每月有 550 万用户访问。
    *   每天增加 7,000 条评论。
    *   每天的浏览量超过 900 万。
    *   超过 2100 万条评论。
    *   平均每月带宽使用量约为 40-50 兆位/秒。
    *   对于同一故事[，Kottke.org](http://www.kottke.org/06/01/digg-vs-slashdot) 发现 Slashdot 交付的用户是 Digg 的 4 倍。 因此，Slashdot 还没有死。
    *   摘自 **Slashdot 的历史第 4 部分**：*在[9 月 11 日]，主流新闻网站陷入了困境，尽管我们不得不关闭日志记录功能，但我们还是设法保持运转，在一个站点中共享新闻。 通常很难获得的时间。 那一天，使该站点发生的工程师团队齐心协力，做了不可能的事情，迫使我们有限的小型硬件集群处理的流量可能是正常一天的三倍或四倍。*

    ## 硬件架构

    *   数据中心的设计与所有其他 SourceForge，Inc.站点相似，并且已证明可以很好地扩展。
    *   两个主动-主动千兆位上行链路。
    *   一对 Cisco 7301 作为网关/边界路由器。 执行一些基本过滤。 过滤是分层的，以分散负载。
    *   铸造厂 BigIron 8000 充当核心交换机/路由器。
    *   Foundry FastIron 9604s 用作某些机架的交换机。
    *   一对可机架系统（1U； P4 Xeon 2.66Gz，2G RAM，2x80GB IDE，运行 CentOS 和 LVS）用作负载平衡防火墙，将流量分配到 Web 服务器。 [BIG-IP F5](http://www.f5.com/products/big-ip/) 正在其新数据中心中部署。
    *   所有服务器均至少为 RAID1。
    *   16 个 Web 服务器：
    -运行 Red Hat9。
    -带有 2 个 Xeon 2.66Ghz 处理器，2GB RAM 和 2x80GB IDE 硬盘的机架式 1U 服务器。
    -两个提供静态内容：javascript，图像和非登录用户的首页。
    -前四个页面用于登录用户
    -10 个处理注释页面。
    -主机角色根据负载而更改。
    -所有 NFS 挂载均处于只读模式。
    *   NFS 服务器是具有 2 个 Xeon 2.4Ghz 处理器，2GB RAM 和 4x36GB 15K RPM SCSI 驱动器的 Rackable 2U。
    *   7 个数据库服务器：
    -全部运行 CentOS4。
    -2 个在主-主配置中：
    -具有 16GB RAM，4x36GB 15K RPM SCSI 的 Dual Opteron 270，
    -一个主服务器 只写数据库。
    -一个主数据库是只读数据库。
    -他们可以随时进行故障转移并切换角色。
    -2 个读取器数据库：
    -具有 8GB RAM，4x36GB 15K RPM SCSI 驱动器
    的 Dual Opteron 270，每个数据库均从一个主数据库进行同步。
    -可以增加更多规模，但目前足够快。
    -3 个其他数据库
    -具有 4GB RAM，8x36GB 10K RPM SCSI 驱动器的 Quad P3 Xeon 700Mhz
    -Accesslog 写入器和 accesslog 读取器。 使用单独的数据库是因为审核和统计信息需要大量的 CPU 时间进行计算。
    -搜索数据库。

    ## 软件架构

    *   已登录用户和未登录用户的处理方式有所不同。
    -未登录的用户将看到同一页面。 此页面是静态页面，每两分钟更新一次。
    -登录的用户具有无法缓存的自定义选项，因此为这些用户生成页面会占用更多资源。
    *   6 磅服务器（对于 SSL 为 1 磅）用作反向代理：
    -如果无法处理请求，则将其转发到 Web 服务器。
    -磅服务器与 Web 服务器在同一台计算机上运行。
    -分发它们是为了实现负载平衡和冗余。
    -SSL 由磅服务器处理，因此 Web 服务器不需要支持 SSL。
    *   16 个 apache Web 服务器（1.3 版）：
    -从/ usr / local 挂载软件到只读 NFS 服务器上。
    -图像保持简单。 编译的全部内容是：
    -mod_perl
    -挥之不去地在交付过程中释放了 RAM。
    -mod_auth_useragent 阻止机器人。
    -1 用于 SSL。
    -2 用于静态（.shtml）请求。
    -4 为动态首页。
    -6 个用于动态评论传递页面（评论，文章，pollBooth.pl）。
    -3 用于所有其他动态脚本（ajax，标签，书签，firehose）。
    *   将 apache 服务器划分为不同角色的原因：
    -隔离服务器，以防在特定页面上出现性能问题或 DDoS 攻击。 即使一部分出现故障，系统的其余部分也将起作用。
    -由于效率原因，例如 httpd 级别的缓存和 MaxClients 调整。 可以针对每个角色对 Web 服务器进行不同的调整。 对于动态 Web 服务器，MaxClients 设置为 5-15，对于静态服务器，MaxClients 设置为 25。 瓶颈是 CPU，而不是 RAM，因此，如果不能快速处理请求，那么出了点问题，排队更多的请求将无法帮助 CPU 更快地处理它们。
    *   使用只读安装有助于提高系统的稳定性。 写入/ usr / local 的任务（例如，每秒更新 index.html）在 NFS 服务器上运行。
    *   使用在 DBD :: mysql 和 DBI.pm 之上构建的自己的 SQL API。
    *   通过使用 memcached 缓存用户，故事和评论文本，极大地提高了性能。
    *   大多数数据访问是通过为每种数据类型定制的 get 和 set 方法以及执行一个特定更新或选择的方法进行的。
    *   多主复制体系结构即使在阻止查询（如 ALTER TABLE）期间也可以保持站点完全正常运行。
    *   [多遍日志处理](http://slashdot.org/journal.pl?op=display&nick=jamie&uid=78724&id=93006&)用于检测滥用情况并挑选哪些用户获得了 Mod 积分。
    *   创建了针对垃圾邮件的审核系统。 起初只是几个朋友，然后是很多朋友。 这没有扩展。 因此，引入了“ mod points”系统，以便对系统做出贡献的任何用户都可以审核该系统。
    *   禁止活动用户防止机器人过度使用。

    ## 得到教训

    *   最富创造力的时期是资金紧缺，团队规模很小，每个人都在帮助其他人做任何需要做的事情。
    *   不要浪费时间优化代码，因为您太便宜了，无法购买更多机器。 购买硬件并花时间在功能上。
    *   卖给一家大公司，您将失去控制。 不断面临着去开发新产品，融合广告商提供的内容以及投放大型广告的阴暗面的压力。
    *   对希望您变得像其他所有人一样的力量说不。 尽管许多竞争对手来来去去，但 Slashdot 仍然存在，因为他们：*继续保持编辑独立性，适度的广告数量，广告和内容之间有明显的区别，当然，我们继续选择合适的故事来吸引人们 给我们现有的听众...不要花我们的时间去吸引其他听众，这些听众只会淡化讨论，从而使日复一日的你们中的许多人到来。*
    *   将服务器隔离到不同的策略域中，以便您可以优化它们的配置。
    *   优化通常意味着缓存，缓存，缓存。
    *   表不完整，但大多已归一化。 在大多数情况下，这可以提高性能。
    *   在过去的七年中，开发数据库支持的网站的过程发生了变化：*数据库曾经是瓶颈：集中化，难以扩展，运行缓慢。 现在，如果您进行防御性编码，那么即使是便宜的 DB 服务器也可以运行一个相当大的站点，并且由于摩尔定律，内存缓存和开源数据库软件的改进，在您不进行扩展的情况下，扩展问题才真正成为问题。 实际上是 eBay 的大小。 这是编写 Web 应用程序的激动人心的时刻。*

“对于动态 Web 服务器，MaxClients 设置为 5-15，对于静态服务器，MaxClients 设置为 25。”

只有 15 点？ 我们在每个 Apache 上有 256 个（1u 服务器 2xOpteron 双核 4GB RAM），并使用 PHP 提供 9-10 倍的页面

取决于 apache 进程在做什么。例如，它们可以等待 SQl 结果。因此，最好等待更多的进程。 他们也在等待客户端获取所有发送的数据-速度较慢的客户端，需要更多进程来保持 CPU 利用率。
但是 AFAIK slashdot 使用的是反向代理，到 apache 仅以全 CPU 速度运行 PHP 代码，并立即将数据返回给代理。 代理然后等待慢速客户端...

Slashdot 不使用 PHP，而是使用 mod_perl。

他们如何将 NFS 只读安装在 Web 服务器上并仍然写入其中？ 他们是否首先从 Web 服务器到 NFS 服务器使用 ssh？
谢谢，