评估应用程序的商品硬件

发布于 2024-08-17 12:40:40 字数 181 浏览 7 评论 0原文

假设,我想开发堆栈溢出网站。假设每天有 100 万个请求,我如何估计支持该网站所需的商品硬件数量。是否有任何案例研究可以解释在这种情况下可能实现的性能改进?

我知道 I/O 瓶颈是大多数系统中的主要瓶颈。提高 I/O 性能的可能选项有哪些?据我所知,很少有人会

  1. 缓存
  2. 复制

Suppose, I wanted to develop stack overflow website. How do I estimate the amount of commodity hardware required to support this website assuming 1 million requests per day. Are there any case studies that explains the performance improvements possible in this situation?

I know I/O bottleneck is the major bottleneck in most systems. What are the possible options to improve I/O performance? Few of them I know are

  1. caching
  2. replication

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

束缚m 2024-08-24 12:40:40

您可以通过多种方式提高 I/O 性能,具体取决于您用于存储设置的内容:

  1. 如果您的应用程序在其 I/O 中显示良好的空间局部性或使用大文件,则增加文件系统块大小。
  2. 使用RAID 10(条带化+镜像)来提高性能+冗余(磁盘故障保护)。
  3. 使用快速磁盘(性能方面:SSD > FC > SATA)。
  4. 将工作负载划分在一天中的不同时间。例如,夜间备份,白天正常应用程序 I/O。
  5. 关闭文件系统中的atime 更新
  6. 缓存 NFS 文件句柄,又名 Haystack (Facebook),如果存储NFS 服务器上的数据。
  7. 将小文件组合成更大的块,又名 BigTableHBase
  8. 避免非常大的目录,即同一目录中存在大量文件(而是将文件划分在层次结构中的不同目录之间)。
  9. 使用集群 存储系统(是的,不完全是商品硬件)。
  10. 尽可能优化/设计您的应用程序以实现顺序磁盘访问。
  11. 使用 memcached。 :)

您可能需要查看 的“经验教训”部分StackOverflow 架构

You can improve I/O performance in several ways depending upon what you use for your storage setup:

  1. Increase filesystem block size if your app displays good spatial locality in its I/Os or uses large files.
  2. Use RAID 10 (striping + mirroring) for performance + redundancy (disk failure protection).
  3. Use fast disks (Performance Wise: SSD > FC > SATA).
  4. Segregate workloads at different times of day. e.g. Backup during night, normal app I/O during day.
  5. Turn off atime updates in your filesystem.
  6. Cache NFS file handles a.k.a. Haystack (Facebook), if storing data on NFS server.
  7. Combine small files into larger chunks, a.k.a BigTable, HBase.
  8. Avoid very large directories i.e. lots of files in the same directory (instead divide files between different directories in a hierarchy).
  9. Use a clustered storage system (yeah not exactly commodity hardware).
  10. Optimize/design your application for sequential disk accesses whenever possible.
  11. Use memcached. :)

You may want to look at "Lessons Learned" section of StackOverflow Architecture.

梦太阳 2024-08-24 12:40:40

查看这个方便的工具:

http://www.sizinglounge.com/

以及戴尔的另一个指南:

< a href="http://www.dell.com/content/topics/global.aspx/power/en/ps3q01_graham?c=us&l=en&cs=555" rel="nofollow noreferrer">http:// /www.dell.com/content/topics/global.aspx/power/en/ps3q01_graham?c=us&l=en&cs=555

如果您想要自己的类似 stackoverflow 的社区,您可以注册与 StackExchange

您可以在此处阅读一些案例研究:

高可扩展性 - 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

check out this handy tool:

http://www.sizinglounge.com/

and another guide from dell:

http://www.dell.com/content/topics/global.aspx/power/en/ps3q01_graham?c=us&l=en&cs=555

if you want your own stackoverflow-like community, you can sign up with StackExchange.

you can read some case studies here:

High Scalability - How Rackspace Now Uses MapReduce and Hadoop to Query Terabytes of Data
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

习惯成性 2024-08-24 12:40:40

每天 100 万个请求是 12 个/秒。堆栈溢出足够小,您可以(使用有趣的规范化和压缩技巧)将其完全放入 64 GB Dell PowerEdge 2970 的 RAM 中。我不确定缓存和复制应该在哪里发挥作用。

如果您在标准化方面遇到问题,可以使用 256GB 的 PowerEdge R900。

如果您不喜欢单点故障,您可以连接其中一些,然后通过套接字(最好是在单独的网卡上)推送更新。对于主存系统来说,即使是 12K/秒的峰值负载也不应该成为问题。

避免 I/O 瓶颈的最佳方法是不进行 I/O(尽可能多)。这意味着一个类似于 prevayler 的架构,具有批量写入(丢失几秒钟的数据没有问题),基本上是一个日志文件,并且为了复制也将它们写入套接字。

1 million requests per day is 12/second. Stack overflow is small enough that you could (with interesting normalization and compression tricks) fit it entirely in RAM of a 64 GByte Dell PowerEdge 2970. I'm not sure where caching and replication should play a role.

If you have a problem thinking enough about normalization, a PowerEdge R900 with 256GB is available.

If you don't like a single point of failure, you can connect a few of those and just push updates over a socket (preferably on a separate network card). Even a peak load of 12K/second should not be a problem for a main-memory system.

The best way to avoid the I/O bottleneck is to not do I/O (as much as possible). That means a prevayler-like architecture with batched writes (no problem to lose a few seconds of data), basically a log file, and for replication also write them out to a socket.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文