Squid或其他HTTPcaching与SSDcaching存储?

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

显而易见的好处是这些系统有很高的读取速度,我期望我的命中率相当高。

假设我可以将7个SSD放入RAIDconfiguration中。 (有些情况会让我收拾得更多)

实施问题:

  • 我应该使用RAID0吗? (我希望驱动器最终失败,所以这看起来很危险。)

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

  • 我应该使用RAID5吗? (SSD已知具有“不良”的写入性能和写入限制,并且所有额外的奇偶校验写入可能会显着减慢这一点)。

  • 我应该把每个磁盘当作自己的squid数据存储吗? (鱿鱼如何处理多个数据存储?以及如果/当​​一个失败时会发生什么?)

  • 我应该忽略数据存储,只是让SSD进入大的SWAP分区,让linux虚拟机做这件事情? (似乎马虎)

任何人在生产环境中使用固态硬盘的build议将不胜感激。 (特别是如果你使用HTTPcaching)

在过去的9个月里,我们一直在ssd硬盘上使用清漆,这对我们来说工作得非常好。 我们以前使用一个鱿鱼记忆只有caching与鲤鱼层。 它工作,但内存碎片是一个真正的问题,需要频繁重新启动。 Squid 2.x也将只使用一个内核,使其在当前的硬件上效率相当低。

对于我们的caching非常友好的站点,我们可以看到在一台服务于100Mbit / sstream量的8核心机器上大约有10%的CPU使用率。 在我们的testing中,我们在用2个1Gb端口达到cpu限制之前耗尽了带宽。

我对使用ssdcaching运行清漆有一些build议。

  • 随机写入性能真的很重要。 在决定使用intel x-25m之前,我们尝试了几家供应商的ssd驱动器。 我们已经看到4k随机写入的一些小小的.1MB / s,我们用x-25m获得了24MB / s的4k随机写入。

  • RAID0。 2.0中的caching不是持久的,所以不需要担心冗余。 这确实会使重新启动受到伤害,但这种情况很less见。 你可以做一些事情,比如加载一个新的configuration,清除对象而不重启。

  • mmap模式。 清漆caching可以被映射到一个文件或使用交换空间。 使用交换对我们来说效果不佳,它倾向于使用更多的I / O带宽来提供相同数量的stream量。 在linux的swapin代码中有一个4段的readahead,我们写了一个补丁来删除这个,但是还没有在生产中试过。

  • 截止日程安排程序。 与2.6.28 +这是ssd意识到,performance良好。 我们尝试了noop,但发现截止date更为公平,因为I / O带宽变得有限。

  • 禁用预读。 由于没有旋转延迟,所以没有必要仅仅因为可能需要读取额外的数据。 I / O带宽在这些事情上是宝贵的。

  • 运行2.6.28+。 linux上很多空间的mmap都给了内存pipe理者一个很好的锻炼,但是拆分lru补丁帮了很大忙。 当我们更新时,kswapd cpu使用率下降了很多。

我们已经发布了我们的vcl文件以及一些我们在链接文本中使用清漆的工具。 vcl还包括一个整洁的hack实现一个非常快速的基于maxmind数据库的geoiplookup服务器。

我不使用固态硬盘作为HTTPcaching,但我可以做这些观察:

并非所有SSD都是平等的,所以你必须非常小心挑选体面的。 FusionIO使PCIe支持的SSD成为真正的高端性能(容量相对较低),但成本高昂。 英特尔的X25-E SLC固态硬盘性能非常好,而且价格更实惠,但容量仍然很低。 做你的研究! 我可以肯定地推荐X25-E SLC变种,因为我在生产系统中使用这些变种。

还有其他SSDS可以给你很好的读/写速度,但是对于像caching这样的东西来说,重要的是随机IO,而且大量的SSD将给出与旋转磁盘大致相同的随机性能。 由于在SSD上写入放大效应,旋转磁盘往往performance更好。 许多固态硬盘的质量控制器质量较差(例如较旧的JMicron控制器),在某些情况下可能会出现显着降低的性能。 Anandtech和其他网站与像iometer这样的工具做比较,在那里检查。

当然,固态硬盘很小。 英特尔X25-E,我想说的是我见过的最好的SATA SSD,只有32和64 GB的变种。

对于RAID级别,标准的RAID性能说明仍然适用。 对RAID 5进行写操作主要涉及读取要修改的数据块,读取奇偶校验块,更新奇偶校验,写入数据块以及写入奇偶校验,所以它的性能仍然比其他RAID差水平,即使是SSD。 然而,像X25-E这样的驱动器具有如此高的随机IO性能,这可能更不重要,因为它仍然要比同样大小的arrays的旋转磁盘上的随机IO好。

从我看到的情况来看,RAID控制器的带宽已经饱和了,以至于从7个磁盘RAID组中获得最大的好处,至less就顺序性能而言。 当前的SATA控制器型号(3ware,areca等)不能超过800MB / s。 在多个控制器(例如,多个RAID1而不是单个RAID10)上具有更小的arrays将改善这种情况,尽pipe每个arrays的单个性能将受到影响。

关于一个HTTPcaching,我认为你最好用一个体面的旋转磁盘arrays和大量的内存。 频繁访问的对象将留在内存caching中 – 无论是在squid的内部caching中,还是在OS的fscaching中。 简单地给一台机器更多的RAM可以显着减less由此造成的磁盘负载。 如果你正在运行一个大型的鱿鱼caching,你可能会需要大量的磁盘空间,高性能的SSD仍然只有相对较低的容量。

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

兄弟姐妹

在我的情况下,我build立了四个服务器,每个都有16GB的RAM。 我设置了9GB作为内存caching供Squid使用。 我将它们configuration为一组兄弟,因此在查找数据之前,查询一台服务器将查询其他服务器。 总共我有36GB的内存caching。 当他们之间的沟通开始陷入泥潭的时候,我不会得到四个兄弟姐妹。

贵宾

我为客户端configuration了四台服务器的VIP进行通话。 这解决了当一台服务器停机时发生的情况。

孩子

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

鱿鱼本身

我没有真正看过3.0,但2.x仍然是单线程的。 在某些时候,你将会耗尽CPU或TCP缓冲区。 如果可能的话,我会把caching分散到2-3个以内。 如果你看到系统在不断发展,你也可能想要制定划分你的Squid农场的计划。

在任何情况下祝你的SSD构build。 我很有兴趣听到这样的结果,因为我将来可能会走这条路。

为什么你甚至考虑突袭10或5.你想在这里performance。 你不关心,如果驱动器只是下降,因为它只是一个caching。

只要使用RAID 0或保持分开。 我认为单独会更好,因为驱动器故障不会取消您的整个caching。

Squid文档build议不要使用RAID,而是在额外的磁盘上设置额外的caching目录。