带SSD缓存存储的Squid或其他HTTP缓存?


9

我正在考虑在具有SSD驱动器的系统上设置一个鱿鱼(或可能的清漆)缓存。

明显的好处是这些系统具有很高的读取速度,我希望我的命中率会很高。

假设我可以将7个SSD放入RAID配置。(有些情况会让我收拾更多东西)

实施问题:

  • 我应该使用RAID0吗?(我预计驱动器最终会出现故障,因此这似乎很危险。)

  • 我应该使用RAID10吗?(这使我的磁盘空间减少了一半,这是昂贵的。)

  • 我应该使用RAID5吗?(众所周知,SSD具有“不良”的写入性能和写入限制,并且所有额外的奇偶校验写入都可能会大大降低此速度。)

  • 我应该只将每个磁盘视为自己的鱿鱼数据存储区吗?(squid处理多个数据存储的性能如何?如果/当一个失败时会发生什么?)

  • 我应该忽略数据存储,而只是将SSD放入大型SWAP分区中,然后让Linux VM做到这一点吗?(似乎草率)

在生产环境中使用SSD的人们的任何建议将不胜感激。(特别是如果您将它们用于HTTP缓存)


+1是一个有趣的问题,我从没考虑过将驱动器仅放在一个大型交换分区中
鲍勃(Bob)2009年

是的,确实很有趣……尽管我很想不落入SSD潮流,而只是为这笔钱增加更多的RAM。
奥斯卡·杜夫伯恩

可悲的是,我需要的缓存占用空间不适合RAM。我已经为那些对象准备了支持RAM的鱿鱼缓存。
乔尔·K

Answers:


8

在过去的9个月里,我们一直在ssd驱动器上使用清漆,它对我们来说效果非常好。以前,我们只使用带有鱿鱼层的鱿鱼内存缓存。它可以工作,但是内存碎片是一个需要频繁重启的真正问题。Squid 2.x也将仅使用一个内核,因此在当前硬件上效率很低。

对于我们的站点,该站点非常易于缓存,我们发现在服务100Mbit / s流量的8核计算机上,CPU使用率约为10%。在我们的测试中,在用2个1Gb端口达到cpu限制之前,我们用尽了带宽。

对于使用ssd缓存运行清漆,我确实有一些建议。

  • 随机写入性能确实很重要。在安装Intel X-25M之前,我们尝试了几种供SSD驱动器使用的供应商。对于4k随机写入,我们已经看到了低至.1MB / s的速度,使用x-25m可以得到24MB / s 4k随机写入。

  • 突袭0。2.0中的缓存不是持久性的,因此无需担心冗余性。这确实会使重启受到伤害,但是很少见。您可以执行诸如加载新配置和清除对象而无需重启的操作。

  • mmap模式。可以将清漆缓存映射到文件或使用交换空间。使用交换对我们来说效果不佳,它倾向于使用更多的I / O带宽来服务相同数量的流量。linux swapin代码中有一个4扇区的预读,我们编写了一个补丁来删除它,但尚未在生产中尝试过。

  • 截止时间调度程序。对于2.6.28+,这是ssd感知的,并且性能良好。我们尝试了noop,但发现由于I / O带宽变得有限,截止日期更加公平。

  • 禁用预读。由于没有旋转延迟,因此仅因为您可能需要它就无需读取额外的数据。在这些方面,I / O带宽非常宝贵。

  • 运行2.6.28+。linux上很多空间的mmap可以使内存管理器很好地锻炼,但是分割后的lru补丁很有帮助。更新时,kswapd cpu的使用率下降了很多。

我们已经在链接文本上发布了vcl文件以及与清漆一起使用的几种工具。vcl还包含一个简洁的技巧,可基于maxmind数据库实现非常快速的geoiplookup服务器。


1

我没有将SSD用作HTTP缓存,但是可以观察到以下几点:

并非所有的SSD都是一样的,因此在选择合适的SSD时必须非常小心。FusionIO生产的PCIe支持的SSD确实是高端产品(容量相对较低),但价格昂贵。英特尔的X25-E SLC SSD的性能非常好,价格更便宜,但容量仍然很低。做你的研究!我绝对可以推荐X25-E SLC变体,因为我正在生产系统中使用它们。

还有其他SSDS可能会给您带来极大的连续读写速度,但是对于诸如高速缓存之类的东西来说,重要的是随机IO,并且许多SSD会提供与旋转磁盘大致相同的随机性能。由于对SSD的写入放大作用,旋转磁盘通常会表现更好。许多SSD的控制器质量较差(例如,较旧的JMicron控制器),在某些情况下可能会导致性能显着下降。Anandtech和其他站点与iometer等工具进行了很好的比较,请在此处检查。

而且,SSD当然很小。英特尔X25-E(我见过最好的SATA SSD)只有32 GB和64 GB两种版本。

对于RAID级别,标准RAID性能说明仍然适用。基本上,对RAID 5的写入涉及读取要修改的数据块,读取奇偶校验块,更新奇偶校验,写入数据块和写入奇偶校验,因此它仍然会比其他RAID提供更差的性能。级别,即使使用SSD也是如此。但是,对于像X25-E这样的驱动器而言,具有如此高的随机IO性能,这可能就没那么重要了-因为对于类似大小的阵列,它仍将胜过旋转磁盘上的随机IO。

从我所看到的情况来看,RAID控制器的带宽过早饱和,不足以从7个磁盘RAID集中获得最大收益,至少就顺序性能而言。当前的SATA控制器(3ware,areca等)模型的速度不能超过800MB / s。尽管多个阵列的单个性能会受到影响,但跨多个控制器(例如,多个RAID1而不是单个RAID10)具有更多较小的阵列将改善此状况。

关于HTTP缓存,我认为最好使用像样的旋转磁盘阵列和大量内存。经常访问的对象将保留在内存缓存中-要么在squid的内部缓存中,要么在操作系统的fs缓存中。因此,仅给机器提供更多的内存就可以大大减少磁盘负载。如果您正在运行大型鱿鱼缓存,则可能会需要大量磁盘空间,而高性能的SSD仍然只具有相对较低的容量。


甚至X25-M都可以使用
Pyrolistical,

我已经完成作业,并且知道要避免使用JMicrons。我主要考虑的是X25-Ms(英特尔MLC),可能还有更新的(非JMicron)OCZ Vertex系列。
乔尔·K

哇,ocz顶点的最大随机写入量甚至比x25-m还要低!!!
火热

1

我对SSD驱动器不是很熟悉,但是我可以谈谈我使用的那种架构,这可能有助于解决您的一些问题。

兄弟姐妹

就我而言,我构建了四台服务器,每台服务器具有16GB的RAM。我将9GB设置为Squid使用的内存缓存。我将它们配置为一组兄弟姐妹,因此对一台服务器的查询将在查找数据之前查询其他服务器。我总共有36GB的内存缓存。我不会遇到四个兄弟姐妹,因为他们之间的沟通开始陷入困境。

贵宾

我为四个服务器配置了VIP以供客户端进行交谈。这解决了当一台服务器出现故障时发生的情况。

小孩儿

我将Web应用程序设置为查询在127.0.0.1上运行的本地Squid服务器。然后将此Squid实例的父级配置为VIP。如果整个VIP发生故障,这可以实现非常快速的故障转移。如果父母没有回应,孩子会直接查询服务。如果您使用单个Squid服务器并且没有VIP,这也很方便。当然,如果您的Web服务器上的本地Squid实例出现故障,一切都会停止。

鱿鱼本身

我还没有真正看过3.0,但是2.x仍然是单线程的。在某些时候,您将耗尽CPU或TCP缓冲区。如果可能的话,我将缓存分散在2-3个以下的盒子中。另外,如果您看到系统不断壮大,则可能希望将来计划对Squid服务器场进行分区。

无论如何,祝您的SSD造福。我很想听听结果,因为将来我可能会走那条路。


0

您为什么还要考虑突袭10或5。您想要在这里表现。您不必担心驱动器是否仅会发生故障,因为它仅是一个缓存。

只需使用raid 0或将它们分开即可。我认为单独使用会更好,因为驱动器故障不会减少整个缓存。


如果单个数据存储出现故障,Squid恢复得如何?(显然,我需要测试一下)如果Squid对于数据存储失败不满意,则RAID5是一个折衷方案。
乔尔K,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.