![如何缓解服务器上的高磁盘读取量?](https://linux22.com/image/639149/%E5%A6%82%E4%BD%95%E7%BC%93%E8%A7%A3%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E9%AB%98%E7%A3%81%E7%9B%98%E8%AF%BB%E5%8F%96%E9%87%8F%EF%BC%9F.png)
我们目前在 Web 服务器上托管了一个 3TB 的图片库,所有图片都可供用户搜索。由于网站上某个时间大约有 400 名活跃用户,我们的磁盘读取量将达到 100% 的 I/O 利用率,这似乎可能成为瓶颈。这都是由实际的图像读取而不是数据库(我们使用 Redis 在 RAM 中缓存)引起的。我们认为使用 Varnish 之类的东西不会对我们有帮助,因为读取几乎是随机的 - 我们有大约 700 万张图片,据我们所知,没有哪一组图片的读取量比其他图片多得多。我们使用 Cloudflare 的免费计划,但它似乎没有帮助。我们根本买不起一个完整的 CDN,因为我们每月要推送大约 10TB 的带宽,这将花费数千美元。
答案1
水平扩展,而不是垂直扩展。不要让一台服务器完成所有工作,而要设置多台服务器来完成相同的工作。它们可能不都托管相同的数据,这样可以允许较小的一组服务器进行访问。Hadoop 可能是实现此目的的一种方法。另一种方法可能只是它的编码方式。将许多小型服务器放在 varnish 后面肯定会对您有所帮助。
即使没有花哨的软件,域分片也是一种减少单个节点负载的方法:http://mvark.blogspot.com/2009/06/what-is-domain-sharding_17.html