如果您的任务是为可扩展的高性能优先级高于其他所有网站的网站推荐开源解决方案堆栈,您会建议什么?
对定义的一些尝试:
可扩展性:部署后,只需添加更多硬件,解决方案堆栈就能够从少数用户扩展到数百万用户。解决方案堆栈永远不应成为瓶颈。
性能:想象一个网站可以处理数百万用户,数百TB的数据(HTML,图像,视频等),每天大量的流量,每年至少99.99%的正常运行时间。
解决方案堆栈应至少指定:
如果需要,您还可以建议其他程序,库,工具等(例如语言特定库,负载平衡器,缓存)。
答案 0 :(得分:3)
在设计高性能和可扩展的网站时,有许多关键领域:
任何人都无法在Stackoverflow上为您提供完整的解决方案。您需要坐下来确定要向用户提供的内容类型,内容的更改频率以及存储位置。
对于内容的缓存,你应该看一下:Squid,Apache的mod_cache和memcached
应考虑物理磁盘。如果您通过拥有多个Web服务器来扩展您的解决方案,那么您将共享一个内容副本(视频,图像等),还是每个服务器都有一个副本?如果共享一个副本,则要注意该单个磁盘上的IO。如果每个服务器都有一份内容副本,则需要保持副本同步。
数据库使用应保持在最低限度。永远不要将图形存储在数据库或其他可以保存在磁盘上的平面文件中的内容 - Web服务器可以很好地从磁盘提供文件,但数据库并不是那么好用。想一想你需要放入数据库的内容以及数据改变和阅读的频率。什么时候需要锁定该数据库?数据库中的9次是系统中的瓶颈。
高速缓存。缓存。缓存。考虑提供尽可能多的静态内容。构建您的网页HTML一次,然后将其存储为缓存文件 - 磁盘或memcached或类似文件。
直接回答您的一些技术问题:
Web服务器是给定的:Apache Httpd。不是最快的,但防弹和高配置。
操作系统:您的操作系统永远不会成为您的瓶颈,因此选择稳定且受到良好支持的产品 - CentOS运行良好。DB:你明显的选择是mySQL和Postgres。 Postgres具有更好的性能,但正如我之前所说,你必须将数据库活动保持在最低限度。
语言:没关系。认真。您可以在Python,Ruby,PHP,Java,.NET等任何地方创建可扩展,性能良好的站点。您的语言不会成为您的瓶颈。
答案 1 :(得分:2)
我可能不会尝试重新发明轮子并制定自己的解决方案,我会看到其他成功网站是如何做到的。一个很好的起点是High Scalability.他们记录了一些最成功的网站是如何形成的以及他们如何管理他们庞大的基础设施。
答案 2 :(得分:1)
我建议您使用网络服务器:
nginx [engine x]
在其website以及网络的other corners中,您可以收集有关它的更多信息,包括使用它的热门网站。一个很好的例子是Hulu.com,处理大量的视频流。据说它比lighttp工作得更好,这是Apache在原始性能方面的典型竞争对手。
另一个有趣的方面是它已经包含负载平衡。