我们运营一个报纸风格的网站,并正在将我们的架构从无定形的架构整合为更具可扩展性和弹性的解决方案。
我在考虑以下事情:
internet
|
h/w firewall
|
h/w load balancer
| |
| control server (nagios, mail server & misc)
|
pair of nginx load-balancing reverse caching proxies
| |
pair of apache app servers pair of mogilefs storage nodes
and mogilefs trackers
|
pair of mysql dbs (master/slave)
and mogilefs db
所有机器都将运行 64 位 centos。
我们需要能够在应用服务器上同时为 7 个用户提供服务,并且每秒提供 840 个静态文件。所以我考虑制定如下规格:
- mogilefs 存储节点 - 2GB RAM,Intel Atom(1.6GHz)
- 应用服务器 - 8GB RAM,AMD Athlon II X2 (2.8GHz)
- 反向代理和控制服务器 - 4GB RAM,AMD Athlon II X2 (2.8GHz)
- dbs - 8GB RAM,AMD Phenom II X6(2.8GHz)
所有服务器都配有 7.2krpm 磁盘。数据库中的数据量并不大,因此基本上可以全部缓存在缓冲区中。此外,我们的 memcached 未命中率仅为 15% 左右,因此数据库的负载并不大。
未来阶段将是循环 DNS,所有内容将镜像到不同的数据中心。
这个拓扑结构中是否缺少什么?是否有人对任何组件做过类似的事情?这些机器看起来是否规格过低/过高?
谢谢
编辑
更多信息:
每秒由 apache 提供的同步页面浏览量为 7 个 - 很多 cms 内容无论如何都会被缓存在磁盘上并尽可能使用 memcached。每秒需要提供 840 个静态文件 - 但这可能有点太高,因为在遥远的未来到期日期,只有一小部分页面浏览量将使用客户端的冷缓存。
唯一的管理员会将静态内容上传到 mogilefs 存储节点。他们每天可能会上传约 100 个文件。我是 mogilefs 的新手 - 他们只会使用商品磁盘(7.2krpm)
然后可以通过以下方式访问此内容http://静态*.ourdomain...Nginx 将代理对此内容的请求并将其缓存在本地,因此虽然第一次检索可能有点慢,但后续检索将来自 nginx 缓存。
答案1
在一个简单的问题中提出这个问题有点太笼统了。您需要就您提出的解决方案和负载提供更多输入:
- 哪些负载(页面/缓存页面/资产)将由该堆栈中的哪些软件(nginx、mogilefs、localfs、apache)提供?负载均衡器将做什么?它是什么类型?
- 您将使用哪种 CMS?它如何与 mogile 交互?您的 mogilefs 将在哪种存储上运行?
- 虽然你可以在 2Gb 节点上运行 mogile happy,在 4Gb 节点上运行 apache,但我不会吝惜 RAM。内存越大,运行起来就越顺畅。
- 你没有提到 CPU,这在 CMS 图中更为重要
另外,我没有看到任何 memcached;这取决于可能有用的设置。
7 个同时在线的用户听起来并不多,您认为每秒的页面浏览量是多少?
编辑反映新信息:
还有很多细节需要完善,但这似乎是合理的。很多都取决于你如何配置 nginx 缓存和 CMS。还要考虑网络,我建议至少千兆位。
我有点担心 mogilefs 的性能。如果您仍处于设计阶段,我建议您根据您的要求考虑替代方案(可能是直接文件系统复制)或未来的迁移方案。
此外,您的负载均衡器目前是设计中非常高级的元素。除非您非常确定性能和功能方面的要求,否则我会将所有选项保留在那里。
答案2
您正在从(动态)网络服务器执行约 7 个页面请求/秒,以及对(小文件)静态内容执行约 850 个请求/秒,为此您需要一个具有约 10 台服务器的多层架构?
我一想,这听起来太慢了。要么是你建的太多了,要么是你的网站代码太慢了,或者是其他原因?
我建议对您的应用程序进行彻底的基准测试,然后据此估算您的负载所需的硬件。
一些想法:
拥有 2 个负载平衡层会增加复杂性,有必要吗?只需一个硬件负载平衡器和一个缓存服务器(Squid 或 Varnish)如何?
永远不要在实际服务器上使用 Atom CPU,它们的性能太弱了。
我不明白你为什么要使用像双核 Athlon 这样的旧台式机级 CPU。现代四核服务器 CPU 在实际使用中至少快 2 倍。使用现代更强大的硬件将使你能够整合层并简化你的架构。
MogileFS 可能很棒;除了它的起源和多年来被广泛使用并取得巨大成功之外,我对它了解不多。但为什么要设置一种你不熟悉的技术只是为了扩展到 2 台服务器?如果你只需要 2 台配备 Intel Atom CPU 的服务器的性能水平,那么就放弃该配置,而使用一台配备快速磁盘子系统(4 或 8 磁盘 RAID 10 或 SSD)的现代四核服务器。
建议:
- 对您自己的应用程序进行基准测试,并获取适合您实际缓存命中率的最佳指标。
- 也许可以找一位之前已经多次建立过类似项目的顾问,与他一起进行最终的设计?
上面的架构很合理,经过深思熟虑。但请获取一些有关各个部分实际性能的数据。:-)