# 99designs 的设计-数以千万计的综合浏览量

> 原文： [http://highscalability.com/blog/2012/2/6/the-design-of-99designs-a-clean-tens-of-millions-pageviews-a.html](http://highscalability.com/blog/2012/2/6/the-design-of-99designs-a-clean-tens-of-millions-pageviews-a.html)

![](img/a183daad868477437902751c2609ac97.png) [99designs](http://99designs.com/) 是基于澳大利亚墨尔本的众包设计竞赛市场。 这样的想法是，如果您有需要的设计，就可以创建比赛，而设计师可以通过竞争在预算范围内为您提供最佳设计。

如果您是中型商业网站，那么这是一个干净的网站示例架构，可可靠地支持许多用户并在云上提供复杂的工作流。 Lars Yencken 在 99designs 上对[基础架构中的 99designs 背后的体系结构做了很好的书面介绍。 这是他们的架构的亮点：](http://99designs.com/tech-blog/blog/2012/01/30/infrastructure-at-99designs/)

## 统计资料

*   团队有 8 个开发人员，2 个开发运营人员，2 个辅助/设计师
*   一个月成千上万的独立访客
*   每月千万浏览量

## 叠放

*   很大程度上是基于 Amazon 的堆栈
*   弹性负载平衡器（ELB）
*   漆
*   PHP 与 Apache / mod_php
*   S3
*   使用 Pheanstalk 绑定进行内存队列查询的 Beanstalk
*   亚马逊的 RDS（MySQL）
*   记忆快取
*   MongoDB
*   雷迪斯
*   右秤/厨师
*   NewRelic，CloudWatch，Statsd

## 基础设施

*   分层体系结构：负载平衡，加速，应用程序，异步任务，存储和瞬时数据。
*   ELB 是可靠的，并且可以处理负载平衡和终止 SSL 连接，以便在 ELB 下方对流量进行不加密。 每个域使用单独的 ELB。
*   Varnish 用于提供基于文件的长尾媒体。
*   Varnish 快速，可配置，具有 DSL，并且具有用于调试实时流量的有用命令行工具。
*   动态和未缓存的请求是从 PHP 应用程序提供的。
*   设计存储在 S3 上。
*   S3 延迟很差，因此在每个请求之后都会在本地缓存设计。
*   可能需要很长时间的请求被异步排队到使用 Beanstalk 实现的内存队列中，该队列轻巧且性能良好。
*   PHP 工作者从队列中读取工作并执行所需的功能。
*   已计划的作业在适当的时间使用 cron 排队。
*   Amazon 的 RDS 用作数据库，并使用跨多个可用性区域的主-主复制来实现冗余。
*   滚动 RDS 备份用作灾难发现。
*   随着负载增加，请求将在读取的从属设备之间实现负载平衡。
*   S3 存储媒体文件和数据文件。
*   备份到 Rackspace 和 Cloudfiles 以进行灾难恢复。
*   Memcached 在每台服务器上运行，用于缓存查询。
*   MongoDB 中的上限集合用于记录错误和统计信息。
*   Redis 按用户存储有关为用户启用哪些功能的信息。
*   每个用户配置用于深色启动，软启动和增量功能推出。
*   亚马逊允许他们不拥有任何硬件，并保持灵活性。
*   强调使用“软件作为基础结构”精神的自动化。
*   Rightscale 使用 Chef 管理服务器配置。 服务器是一次性的。
*   使用 NewRelic，CloudWatch，Statsd 实施监视。 两个大的监视屏幕显示站点行为的仪表板。

## 得到教训

*   **测试以按比例缩小**。 高度可变的负载意味着它们大量使用了云的按比例缩减功能，这需要大量测试才能正常工作。
*   **国际客户需要 CDN** 。 他们有很多国际客户，由于他们不在美国东部服务，因此这些客户并不总是能获得优质的体验。 他们正在寻找各种 CDN，以便为国际客户提供更好的服务。
*   **在增长过程中保持稳定性需要测试和自动化。 为了支持频繁发布，他们实施了验收测试和更多的自动化功能。 基于每个用户打开和关闭功能的能力允许针对一部分用户测试新功能。**