# Pinboard.in Architecture-付费玩以保持系统小巧

> 原文： [http://highscalability.com/blog/2010/12/29/pinboardin-architecture-pay-to-play-to-keep-a-system-small.html](http://highscalability.com/blog/2010/12/29/pinboardin-architecture-pay-to-play-to-keep-a-system-small.html)

![](img/9f56768c8255ee971187862f4760c08c.png)

如何在保持成功的同时保持足够小的系统规模，以使简单的向上扩展策略成为首选架构？ 例如， [StackOverflow](http://highscalability.com/blog/2009/8/5/stack-overflow-architecture.html) 可以坚持使用自己喜欢的工具链，因为他们天生就对自己的增长速度抱有刹车：世界上只有这么多的程序员。 如果这对您不起作用，请考虑以下另一种自然制动策略：**收取服务费用**。 [Paul Houle](http://twitter.com/#!/simonstl/statuses/25587487132880897) 很好地总结为：*通过构建小规模盈利的服务来避免扩展问题*。

[Pinboard.in 的联合创始人 Maciej Ceglowski 在](http://pinboard.in/)中接受了 Leo Laporte 和 Amber MacArthur 关于他们的[的采访时提出了这一有趣的观点，我之前没有适当考虑过。 HTG3] [受电子邮件保护]](http://twit.tv/natn182) 显示。

插板式纸机是一种精简的，付钱的书签机，可以及时替代快要淘汰的 Delicious。 作为一个自称是反社会书签网站，它*强调社交化*的速度。 Maciej 认为 Pinboard 是个人档案，您可以在其中永久保存所阅读内容的历史记录。 当 Delicious 的灭亡宣布时，如果 Pinboard 曾经是免费站点，那么他们会立即倒闭，但是成为付费站点有助于拉平他们的增长曲线。

过去经常与朋友共享链接的书签站点，但 Twitter 大部分已经接管了该角色。 但是，Twitter 只展示您的推特历史的一小部分而臭名昭著。 您真正想要的是一台大型服务器，它从可能在何处添加书签的地方都吸收了书签，而这正是 Pinboard 的作用。

对于 Pinboard 来说，有几点特别令我感到震惊：

*   它使用基于 MySQL，向上扩展，PHP，Perl 和无框架的传统风格简单体系结构。
*   它要求支付服务费用以支付费用并保持用户群的可管理性。
*   它根据用户数量收费以支付费用。
*   他们缓慢地构建了站点，并希望使其保持小巧，快速，可靠，因为这是一种更好的运行方式。

**网站**： [Pinboard.in](http://pinboard.in/)

## 资料来源

*   [技术基础](http://pinboard.in/blog/63/)
*   [[受电子邮件保护]](http://twit.tv/natn182) 采访
*   个人电邮

[](http://pinboard.in/blog/63/)

## 统计资料

*   1,630 万个书签
*   5200 万个标签
*   940 万个网址
*   989 GB 存档内容
*   自 2010 年 7 月 8 日以来，累计停机时间不到 1 小时。

## 平台

*   的 MySQL
*   的 PHP
*   佩尔
*   的 Ubuntu
*   装甲运兵车
*   狮身人面像
*   Cron 职位
*   S3

## 硬件

*   机器 1：64 GB，运行数据库主服务器，存储用户档案并运行搜索
*   机器 2：32 GB，运行故障转移主机，抓取各种外部提要，执行后台任务
*   机器 3：16 GB，Web 服务器和数据库从属

## 建筑

*   数据库的副本保留在所有三台计算机上。
*   该网站在 16GB 计算机上运行。 数据库完全适合 RAM，页面加载时间提高了 10 倍或更多。
*   主-主架构，带有一个额外的读取从属。 所有写入均指向一个 DB，其中包括书签，用户和标签表。
*   第二个主机运行：
    *   汇总计算，例如全局链接计数和每用户统计信息。
    *   使用 mysqldump 的每晚数据库备份。 备份以压缩格式存储到 S3。
*   Perl 脚本运行后台任务：
    *   下载外部提要，为启用了存档功能的用户缓存页面，处理传入的电子邮件，生成标签云以及运行备份。
    *   选择 Perl 是因为现有的技能和 CPAN 中可用的大型支持库。
    *   诸如大多数流行书签之类的功能是由通常在每晚运行的 cron 作业生成的，但是当负载过高时将其关闭。
*   PHP 用于生成 HTML 页面：
    *   不使用模板引擎。 没有使用框架。
    *   APC 用于缓存 PHP 文件。
    *   不使用其他缓存。
*   [Sphinx](http://www.sphinxsearch.com/) 用于搜索引擎和全局标签页。

## 得到教训

*   **咒语。** Pinboard 的目标是：快速，可靠和简洁。 他们认为这些是可以赢得并留住客户的素质。 当出现问题时，例如大规模增长，他们总是优先考虑，以便保持这些系统质量。 例如，他们的首要任务是防止数据丢失，这决定了更改其服务器体系结构。 因此，从概念上讲，该站点在增长的时期内是令人困惑的……如果站点可以快速可靠地保存链接，则可以。
*   **从开头**开始作为付费网站。 成为付费网站的好处是您不会急于吸引新用户，因此可以保持小规模。 当 Delicious 的灭亡宣布时，如果他们本来可以成为免费站点，那么它们将立即被关闭，但是成为付费站点有助于平稳增长。
*   **根据用户数量收费**。 Pinboard 具有独特的定价方案，旨在比具有免费帐户的服务更好地扩展。 价格基于当前用户数。 随着用户数量的增加，价格也随之上涨。 人们为使用的资源付费。 这与 Amazon 或 Google App Engine 的付款模式相似，但有很大的不同。 这是一次性费用。 每年只需多花$ 25，就可以缓存和搜索所有书签。
*   **使用无聊和淡入淡出的技术。** 这些有助于确保站点永远不会丢失数据并且非常快。
*   **经验法则**：如果您乐于尝试某些事物，那么它可能不属于生产领域。
*   **使切换尽可能简单**。 Pinboard 通过自动导入和导出到 Delicious 并支持 Delicious API 来消除采用异议。
*   **保持小巧** **更有趣**。 当您可以提供个人客户支持并直接与用户互动时，您会拥有更好的时光。
*   **比较基于每 GB RAM 或存储空间的机器成本**。 Pinboard 最初是在 Slicehost 和 Linode 上运行的，但是当以每 GB RAM 或存储的美元成本表示的费用要高得多而又没有任何可抵消的收益时，他们便转向了另一种服务。
*   **在负载**下关闭功能。 例如，如果您需要其他地方的性能，请关闭搜索。
*   **中到大型站点是最昂贵的**。 小型站点的运行成本相对较低，但是在增长曲线的某个时刻，每个新用户的边际成本都会增加。 由于必须将数据拆分到多台计算机上并且必须购买和管理这些计算机，因此成本更高。 有一个扩展成本。 一旦您接触到数百万的用户，它就会再次变得便宜。 从小型站点到中型站点的第一步是痛苦且昂贵的。
*   **在您自己的产品**上做主。 根据您所相信的人，Delicious 在 Yahoo 的不断裁员中受到了伤害，但真正的问题是 Delicious 团队不是决策者。 新功能优先于可靠性，稳定性和创新性。 当命运掌握在他人手中时，您的工作时间或辛苦时间都没有关系。
*   **Small 并不总是有效**。 新用户席卷了[，增加了超过 700 万个书签，超过了服务整个生命周期中收集的书签，并且该网站的流量是正常流量的 100 倍以上。 结果，正常的后台任务（如搜索，归档和轮询外部提要）被暂停。 弹性的策略来处理像这样的尖峰负载并不都是坏事。](http://pinboard.in/blog/156/)
*   **查看异常页面加载时间，而不是中值页面加载时间来判断您的服务质量**。 即使大多数页面加载时间都可以接受，页面加载可能需要花费几秒钟的时间才能接受。
*   **使用功能可快速构建**。 Pinboard 快速建立的部分原因是，社交和发现功能因说``去别的地方''而被推迟了。 其他站点将使您可以与朋友共享链接并发现新的有趣内容，但是没有其他站点像个人存档那样运作，这就是 Pinboard 的利基市场。
*   **通过机器**隔离服务。 当 Web 服务器与其他服务共享计算机时，Web 服务器可能会受到打击。 另一个例子是，每天搜索索引器在进行完整索引重建时都会与 MySQL 争夺内存。

## 相关文章

*   [Erick Schonfeld 将 Pin 大小的竞争对手 Pinboard](http://techcrunch.com/2010/12/29/delicious-exodus-pinboard/) 做成“美味的出埃及记”。 *该服务最初没有处理大量请求（高峰时每分钟处理数百个请求），但该数目增加了约十倍，达到每分钟 2500 个请求。*
*   [关于 Pinboard](http://a.wholelottanothing.org/2010/12/quick-thoughts-on-pinboard.html) 的快速思考，作者：Matt Haughey
*   [回到基础：Ditch Delicious，使用 Pinboard](http://techcrunch.com/2009/07/06/back-to-basics-ditch-delicious-use-pinboard/) ，作者：Michael Arrington
*   [为什么 Pinboard.in 是我最喜欢的书签服务](http://www.messagingnews.com/onmessage/ben-gross/why-pinboardin-is-my-favorite-bookmarking-service)？
*   [del.icio.us，谢谢：插板，欢迎](http://redmonk.com/sogrady/2010/03/05/del-icio-us-pinboard/)，作者：Stephen O'Grady

为什么我不仅可以创建 Google 电子表格和表单，还可以在浏览器栏中创建该表单的书签。
您可以随时随地从私人 Google 电子表格中获取个人书签。

您可以轻松地扩展表单/电子表格以在不同选项卡中存储“任务”，“密码”等。

我缺少一个细节。 使用了什么网络服务器？ Apache，nginx 或 lighttpd？

作为用户已近一年了，可以肯定地说，Pinboard 是一项出色服务的典范，对它的功能极为有用，并且创始人在产品和技术方面都拥有正确的愿景。

从扩展的角度来看，如果您知道如何使用 mysql，那么 mysql 可以很好地进行扩展，而在扩展它的那天，流量将足够高，可以雇用聪明的人来专注于扩展部分。 否则，服务固有存在错误。

这三台服务器支持多少总用户和峰值并发用户？

安迪，您可以在这里尝试：http://techcrunch.com/2010/12/29/delicious-exodus-pinboard/

我不明白：“随着用户数量的增加，价格也随之上升”，这没有任何意义。
您拥有的用户越多，就越能充分利用基础架构，那么每位用户的成本就会下降，因此您应该能够以相同的功能级别提供更便宜的服务。 您应该利用他们所谓的“规模经济”，并能够提供更好的价格。

这没有商业意义。