# ThemBid 架构

> 原文： [http://highscalability.com/blog/2007/7/26/thembid-architecture.html](http://highscalability.com/blog/2007/7/26/thembid-architecture.html)

ThemBid 提供了一个市场，需要完成工作的人们可以广播他们的请求，并接受竞争该工作的人们的出价。 与在 HighScalability 上介绍的许多网站不同，ThemBid 的流行程度不及 Paris Hilton。 它不是媒体的宠儿，也不是行业的巨头。 但是我喜欢的是他们有一个策略，可以构建网站的观点，并且足够亲切地分享有关如何构建网站的非常详细的说明。 他们甚至深入研究了所使用的各种软件包的实际安装细节。 看看他们的工作，任何人都可以从中受益。

网站：http：//www.thembid.com/

## 信息来源

*   [使用 Ubuntu，Symfony 和 Lighttpd 构建可扩展的 Web 2.0 站点](http://blog.thembid.com/index.php/2007/04/05/build-scalable-web-20-sites-with-ubuntu-symfony-and-lighttpd/)

    ## 平台

    *   Linux（Ubuntu）*   Symfony*   Lighttpd*   的 PHP*   电子加速器*   蚀*   慕宁*   AWStats

    ## 里面有什么？

    ### 统计资料

    *   从 2006 年 12 月开始工作，到 2007 年 3 月进行了完整的演示。*   一名开发人员/系统管理员与兼职图形设计师合作。*   启动后针对了数千名用户。

    ### 架构

    *   **硬件**。 具有 2GB RAM 的双核服务器*   **存储**。 RAID1 上的 2 x 36SCSI 10K RPM。*   **数据中心**。 由于过去的积极经验，他们与 Layeredtech 一起使用了托管服务器。*   **开发环境**。 Ubuntu 和 Eclipse。*   **操作系统**。 他们选择 Ubuntu 的服务器发行版是因为它们是在客户端使用的，并且 Ubuntu 支持“比典型的 IT 部署更简单的安装和更容易的维护”。*   **Web 服务器**。 Lighttpd 用于处理静态内容并将动态 PHP 页面请求转发到 FastCGI。*   **数据库**。 MySQL 的。 当需要增长时，想法是转向主从配置，它们可能是 MySQL 集群。*   **Web 框架**。 之所以选择 PHP 是因为他们知道它，并且 Digg 和 Yahoo 等其他成功的网站也成功地部署了 PHP。 他们选择 Symfony 作为那里的框架，是因为它具有出色的文档和活跃的开发社区。 雅虎也使用 Symfony。 这个决定对他们来说效果很好。*   **PHP 缓存**。 eAccelerator 用于编译和缓存 PHP 脚本。*   **对象和内容缓存**。 该计划是要缓存很多内容。 对于像他们这样的出价网站，这是有道理的。 许多片段会被反复使用，因此将它们放入内存将加快整个系统的速度，并减轻数据库和 IO 系统的压力。 最初，基于内存的文件系统顶部使用了 SQLite 缓存。 该选择是因为它得到了 Symfony 的支持。 当有 memcached 插件可用时，他们会尝试的。*   **客户端缓存**。 Lighttp 的 mod_expire 模块用于防止浏览器不必要地重新下载很少更改的 Javascript，样式表和图像。*   **监视**。 Munin 用于监视其资源使用情况。 只需访问“ yoursite.com/status”即可查看发生了什么。*   **日志分析**。 AWStats 用于跟踪点击数和请求类型。 此信息可用于确定瓶颈。

    *   **可伸缩性计划**。
    -使用 Munin 告诉何时考虑升级。 当您的增长趋势很快将与资源趋势交叉时，就该采取行动了。
    -将 MySQL 移至单独的服务器。 这样可以释放资源（CPU，磁盘，内存）。 您要在此服务器上运行的内容取决于其功能。 也许在上面运行一个 memcached 服务器。
    -使用 memcached 移至分布式内存缓存。
    -添加 MySQL 主/从配置。
    -如果需要更多的 Web 服务器，我们可以在前端使用 LVS 作为负载均衡器。

    *   **Future Directions** . Work on fault tolerance.

    ## 得到教训

    *   **使用通用的低成本工具**，只需几个人就可以相当快地创建一个不错的网站。 而且您的系统将强大而强大。 没有偷工减料。

    *   **使用系统的反馈**了解需要优化的内容以及何时进行扩展。

    *   **好的文档和活跃的社区吸引了人们**。 对于人们决定使用什么产品，这些都是非常有吸引力的品质。 当看起来您可能在未来无路可走而无所适从时陷入困境时，很难使用工具链。 如果您使工具变得难以理解，学习，使用和部署，那么它们将变得死气沉沉。

    *   **坚持使用熟悉的**。 它可能不是最佳的，也可能不是最佳的，但更重要的是您要开始并取得进步。 您不想延迟发布网站，这样您就可以学习一个完全不同的工具链，这可能会使您的生活变得更轻松，并且在某些未来的计划中。 未来是现在。

    *   **使用对他人有用的东西**。 Yahoo 和 Digg 使用 PHP 的事实是一个很好的建议。 当然，PHP 不是构建站点的唯一方法，但它确实降低了风险水平并帮助您在晚上入睡。 这也意味着有一个活跃的社区可以在您遇到问题时为您提供帮助。

我希望您能为我的 Wiki 撰写有关整个可伸缩性问题的文章。 我希望使其成为网站，seo，sem 创建 Wiki。 我喜欢这些资源，很可能会将您的许多想法添加到我的网站中。 这篇文章是如此复杂，完美地引导了我。 为了制作更多的访问者，对您的策略进行视频/截屏怎么办？

本文错过了很多真正的高可伸缩性问题。

如果站点扩展到 Ebay / Amazon 的规模，此可伸缩性计划是否可行？ 没有。

设计高度可扩展的网站时，您需要一个计划来扩展各个方面。 这包括数据库，内容生成，静态数据和网络。

可伸缩性与您使用的硬件，RDBM 或编程语言/框架无关。 这是关于它们如何彼此交互以及如何摆脱单个瓶颈点。

本文中的体系结构是有缺陷的，不应用作可伸缩性模型。