评估应用程序的商品硬件
-
20-09-2019 - |
题
假设,我想开发堆栈溢出网站。假设每天有 100 万个请求,我如何估计支持该网站所需的商品硬件数量。是否有任何案例研究可以解释在这种情况下可能实现的性能改进?
我知道 I/O 瓶颈是大多数系统中的主要瓶颈。提高 I/O 性能的可能选项有哪些?我认识的人中很少有
- 缓存
- 复制
解决方案
您可以通过多种方式提高 I/O 性能,具体取决于您用于存储设置的内容:
- 如果您的应用程序在其 I/O 中显示良好的空间局部性或使用大文件,请增加文件系统块大小。
- 使用 磁盘阵列10 (条带化+镜像)用于性能+冗余(磁盘故障保护)。
- 使用快速磁盘(性能方面:SSD > FC > SATA)。
- 将工作负载划分在一天中的不同时间。例如夜间备份,白天正常应用 I/O。
- 关 时间更新 在你的文件系统中。
- 缓存 NFS 文件句柄又名 草垛 (Facebook),如果将数据存储在 NFS 服务器上。
- 将小文件合并成更大的块,也称为 大表, 数据库.
- 避免非常大的目录,即同一目录中有很多文件(而不是在层次结构中的不同目录之间划分文件)。
- 用一个 聚集的 存储系统 (是的,不完全是商品硬件)。
- 尽可能优化/设计您的应用程序以实现顺序磁盘访问。
- 使用 内存缓存. :)
您可能想查看“经验教训”部分 StackOverflow架构.
其他提示
看看这个方便的工具:
以及戴尔的另一份指南:
http://www.dell.com/content/topics/global.aspx/power/en/ps3q01_graham?c=us&l=en&cs=555
如果你想要自己的类似 stackoverflow 的社区,你可以注册 堆栈交换.
您可以在这里阅读一些案例研究:
高可扩展性 - Rackspace 现在如何使用 MapReduce 和 Hadoop 查询 TB 级数据http://highscalability.com/how-rackspace-now-uses-mapreduce-and-hadoop-query-terabytes-data
http://www.gear6.com/gear6-downloads?fid=56&dlt=case-study&ls=Veoh-Case-Study
每天 100 万个请求是 12 个/秒。堆栈溢出足够小,您可以(通过有趣的标准化和压缩技巧)将其完全放入 64 GB Dell PowerEdge 2970 的 RAM 中。我不确定缓存和复制应该在哪里发挥作用。
如果您在标准化方面遇到问题,可以使用 256GB 的 PowerEdge R900。
如果您不喜欢单点故障,您可以连接其中一些,然后通过套接字(最好是在单独的网卡上)推送更新。对于主存系统来说,即使是 12K/秒的峰值负载也不应该成为问题。
避免 I/O 瓶颈的最佳方法是不进行 I/O(尽可能多)。这意味着一个类似 prevayler 的架构,具有批量写入(丢失几秒钟的数据没有问题),基本上是一个日志文件,并且为了复制也将它们写入套接字。