数据中心内的延迟是多少?我问这个假设有几个数量级的差异


17

我试图找出一些我找不到很好答案的东西。

如果我说一个REDIS缓存(或某些外部内存缓存)位于一个数据中心,而一个应用程序服务器位于同一数据中心,那么读取数据的网络连接速度(延迟,吞吐量)将是多少?在这两台机器之间?

例如,网络的“速度”是否仍比从REDIS上的高速缓存中寻找我的数据的RAM的速度至少高一个数量级?

我的最终问题是-是否将所有这些存储在REDIS上的内存中实际上提供了任何实用程序?与REDIS是否将所有这些都缓存到SSD上相反?内存很昂贵。如果网络确实不是数据中心内的瓶颈,则内存具有价值。否则,事实并非如此。

我想我的一般问题是,尽管数据中心内的未知数众多,并且无法进行概括和差异化,但是我们是否在谈论计算机系统中的内存延迟与内存中DC的最佳内部网络之间的数量级是否足够?减少延迟不会显着提高性能吗?我知道有很多变量,但是变量有多接近?这些变量真的那么重要吗?例如,采取双曲线的立场,磁带机的速度要比网络慢,因此磁带对于高速缓存不是理想的选择。


1
它还取决于每个事务的往返次数,这通常是在一系列查询中序列化的实际问题。更复杂的查询界面,服务器端过程或反规范缓存可以减少影响。
eckes

Answers:


19

“每个人都应该知道的延迟图”有多种版本,例如:

实际情况是,不仅仅是延迟。这是多种因素的组合。

那么,数据中心内的网络延迟是多少?延迟,嗯,我会说它总是在1ms以下。它比RAM快吗?否。它靠近RAM吗?我不这么认为。

但是问题仍然存在,是否相关。那是您需要知道的基准吗?您的问题对我来说很有意义。由于一切都是有代价的,因此您应该获得更多的RAM,以便所有数据都可以保留在RAM中,还是可以不时从磁盘读取数据。

您的“假设”是,如果网络等待时间比SSD的速度高(慢),那么将所有数据都存储在RAM中将不会使您受益,因为网络速度会很慢。

看起来会这样。但是,您还必须考虑并发性。如果您一次收到1,000个数据请求,那么磁盘可以执行1,000个并发请求吗?当然不是,那么处理这1,000个请求需要多长时间?相比RAM?

很难将其归结为单个因素,例如重负载。但是,是的,如果您只进行一次操作,网络的等待时间就是您可能不会注意到SSD与RAM的差异。

就像直到12Gbps磁盘出现在市场上一样,一个10Gbps的网络链接不会因为单个磁盘流而成为过载,因为磁盘是瓶颈。

但是请记住,磁盘正在执行许多其他操作,您的进程不是计算机上的唯一进程,您的网络可能承载其他内容,等等。

另外,并非所有磁盘活动都意味着网络流量。从应用程序到数据库服务器的数据库查询仅是非常小的网络流量。来自数据库服务器的响应可能很小(一个数字)也可能很大(一千行包含多个字段)。要执行此操作,服务器(是否有数据库服务器)可能需要执行多个磁盘搜索,读取和写入操作,但仅通过网络发送回很小的一部分。绝对不是一对一的网络磁盘RAM。


到目前为止,我避免了您问题的某些细节-特别是Redis部分。

Redis是开源的(BSD许可)内存数据结构存储,用作数据库,缓存和消息代理。- https://redis.io/

好的,这意味着一切都在内存中。抱歉,此快速SSD驱动器在这里无法为您提供帮助。Redis可以将数据持久保存到磁盘,因此可以在重启后将其加载到RAM中。这只是为了不丢失数据,或者在重新启动后必须重新填充冷缓存。因此,在这种情况下,无论如何都必须使用RAM。您将必须有足够的RAM来容纳您的数据集。RAM不足,我想您的操作系统会使用swap-可能不是一个好主意。


谢谢。这确实是有用的。确实有许多与此相关的上下文差异。如果我们暂时忽略繁重的负载,从您的答案中可以看出,网络延迟确实是瓶颈,因此SSD与RAM的额外延迟根本不重要。但是现在,如果考虑到沉重的负载,SSD相对于RAM的延迟差异开始变得复杂,现在,RAM将会发光。这就是现在的结果吗?
Neeraj Murarka '19

1
很难将其归结为单个高负荷因素。但是,是的,如果您只进行一次操作,网络的等待时间就是您可能不会注意到SSD与RAM的差异。就像直到12Gbps磁盘出现在市场上一样,一个10Gbps的网络链接不会因为单个磁盘流而成为过载,因为磁盘是瓶颈。但是请记住,磁盘正在执行许多其他操作,您的进程不是计算机上的唯一进程,等等
。– ETL

1
还请注意,除了延迟之外,还有许多其他因素需要考虑,特别是大多数实际服务需要在不同的机器上运行服务器程序的多个实例,因此“本地RAM中的所有内容”通常根本不可行。
克莱里斯

但是10g网络链接是低端的。我的服务器通过200 Gb连接到我的主干(是的,2x100g链接)。
TomTom

3

计算机系统中有许多高速缓存层。在应用程序层插入一个可能会有益,可以缓存API和数据库查询。还有可能是临时数据,例如用户会话。

像Redis这样的数据存储通过网络(快速)或UNIX套接字(甚至更快)提供这种服务,就像使用数据库一样。

您需要衡量应用程序的实际性能,但让我们举一个例子。假设一个普通用户请求执行5个API查询,每个查询耗时50毫秒。250 ms是用户可检测到的延迟。与缓存结果相反。即使缓存位于镇上不同的可用区域中(不是最佳状态),命中最多也可能是10毫秒。这将是5倍的加速。

实际上,数据库和存储系统也具有自己的缓存。但是,通常获得预取结果要比再次通过数据库引擎和存储系统层更快。此外,缓存层还可以减轻其背后的数据库的负担。

有关生产中此类高速缓存的示例,请参阅关于体系结构Stack Overflow基础架构博客。成千上万的HTTP请求产生数十亿的Redis命中率是非常重要的。

内存很昂贵。

访问时间为100 ns的DRAM大约比固态永久存储快100倍。这种性能相对便宜。对于许多应用程序,更多的RAM购买了宝贵的速度和响应时间。


您能否说明一下如何计算这5个API查询中的每一个查询花费50毫秒的时间?那是在应用程序的幌子下打数据库并进行查询并计算结果集,而不是只是在城镇之间打了一个缓存,而该缓存恰好已将查询字符串本身作为键进行缓存,并具有该结果的缓存副本组?
Neeraj Murarka '19

1
我把这些数字补齐了,但是可以。进行查询并再次计算结果可能比获得该预先计算的结果要慢。为了简化和提高速度,像Redis这样的实现通常都在内存中。遍历IP网络或UNIX套接字传输也可以非常快。综上所述,并不是每个设计都需要这种缓存内容。
John Mahowald

明白了 我想我或多或少都了解。似乎在很多情况下,但并非总是如此,即使遍历数据中心到附近的高速缓存中,该高速缓存可能处于同一美国州(或加拿大省等)(也许区域是一个很好的语义),如果它实际上导致高速缓存命中,则相对于尝试从其本地数据库通过算法重新计算该值的过程而言,这将是一个很大的优势。但是,然后可能位于远程的缓存不会因为处于内存中而提供很多价值。它也可能基于SSD。
Neeraj Murarka '19

1
远程数据中心是最坏的情况,理想情况下,缓存层距离客户端不到1毫秒。也许是相同的可用区,甚至在同一主机上。您可以根据需要缓存到持久性存储。或者,您可以将固态存储用于主数据库,加快所有查询的速度,并且可能不需要缓存层。有多种可能的设计。
John Mahowald
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.