每秒亿次在毫秒延迟的事件:Giga-Scale的Nexmark

2021-03-18 03:36:06

我们'重新在Hazelcast Jet上准备一个科学纸,基于对称,数据本地非阻塞分布式处理,描述了其架构。作为这项努力的一部分,我们实施了Vendor-Neutral NexmarkbenchmarkMarkmarkMarkmark套件,该套件包括8个流询问,该查询旨在刺激ickutypical'重新询问您的真实时间。

查询处理拍卖,卖方和出价的域模型。 forexample,查询5要求:"哪些拍卖已经达到了最高的Price,最后一个时期?"

与我们以前的基准相比,这主要集中在单个联线葡萄项(特别是GC引起的延迟尖峰)上,这次我们侧重于水平可扩展性:Jet'延迟和吞吐量的行为如何添加越来越多的节点?

在45个节点和720个VCPU的集群中,喷气机达到每秒1亿甚至26毫秒的99%延迟。

在我们以前的经历中,我们不需要任何低级GC调整参数来获得JVM的杰出结果,但您必须使用最近的JDK。我们让JVM使用其默认的G1收集器并使用所需的暂停目标配置。此外,请注意,我们的尺寸喷射器' S线程池有点低于系统容量:16-VCPU机器上最多14个线程。 TheiMimportant技巧允许GC在背景中工作,使用Jet'实时计算。

至于测量方法,它与以前相同。事件Comefrom作为喷射在相同的JVM内存的发电机。每一个事件都有预定的发生时刻,它是发电机'一旦时间到来,就尽快履行它。任何潜在境内介绍事件对报告的延迟计数。

在输出方面,我们只需尽快停止延迟时钟,我们观察到与最新结果对应的SomeData项。我们将系统分级与查询结果理想的时刻进行比较。例如,如果查询涉及时间窗口,那么窗口&#34的那一刻;关闭",是理想的时刻。

我们不要求Jet将结果发送到任何外部系统,因为我们希望我们的结果专注于喷气式飞机'单独的性能。在Ghithmark中涵盖的代码可在GitHub上使用。

对于第一个基准测试我们提出了这个问题:使用每秒50个结果更新的时间分辨率和100万赛量的输入速率,不同的簇大小的99.99%延迟是多少?

该基准测试的主要部分是深入探测可能导致延迟尖峰的稀有SystemEvents,但是Nexmark查询的原始定义询问更低的更新频率(一旦Perminute一次)。此时,几乎足够的足球数据来报告第99百分位数,整整一周才需要100分钟,以获得99.99百分点。因此,我们每秒改变为50次(20毫秒的更新期)。

必须每20毫秒报告另一套完整的结果(10,000个数据点),喷气机没有时间从任何HiccupGreater恢复超过几毫秒。出于此原因,我们将GCPAuse目标配置为5毫秒(-xx:maxgcpausemillis = 5)。

Nexmark NON' t定义了临时涉及的不同键的数量,我们将其设置为10,000的基准。

我们使用每个节点的12个喷射线程的设置,主要是因为那个'我们在以前的基准中使用的swhat。我们得到了这些结果:

最大的最坏情况是最大群集(20个节点)中的查询5,并出现为16毫秒。

我们的第二个问题是:这是每秒达到十亿个事件的吞吐量需要多少的硬件,同时保持其实际级别的延迟?

为测试此测试,我们选择了似乎最棘手的Nexmark查询,似乎是基准1的结果。这是查询5,其中在20节点群集中显示99.99%的延迟16毫秒。

从这次我们' LL在输入方面为输入方产生了更大的压力,旨在获得最高的吞吐量,我们放宽了时间升级。我们每秒询问两个更新(每500milliSecs设置的新结果),因此必须将百分位数调整为99%,以使其实用。我们还放宽了GC时序,设置-XX:maxgcpausemillis = 50。

我们从一个节点开始,找到最大的事件速率Jetcan跟上。 &#34的定义;保持"是在测试期间偏向的延迟界限,并不断增加。在增加群集尺寸时被宣布了这个过程,直到达到了十亿美元的OURGOAL。这是我们发现的:

首先,喷气机能够在Asingle节点上处理每秒2500万场比赛,甚至更令人印象深刻地,这一数字保持缩放线性,一直到我们的目标,它以40节的大小达到。

在此过程中,我们意识到我们可以让喷气喷射使用更多的线程毫无影响延迟,并且由于我们想要尽量减少EC2Stances的数量,我们让它使用14个线程。这仍然将2个VCPUS留给赫卡地GC工作等系统需求。如果仔细看,You·You an看到图表中的曲线在20-nodemark上略微向上弯曲,这是使用每节点的8.6%的线程(14与12)使用8.6%的线程拍摄的40节点测量的工件(14 vs.12)。

最大吞吐量的标准只是跟上输入,允许延迟暂时达到更高的值,只要itsettles返回。为了衡量喷射器'在各种群体的各种级别的稳定延迟下,我们在每个簇大小的最大概率的80%下进行了另一轮测试。这给了我们以下latencyChart:

我们可以看到,虽然它的增加,延迟保持较平坦的尺寸范围远远超过了你在现实生活中的射流射流。 最后,我们从安装程序开始,支持十亿个事件持续(40节点)并继续添加节点,直到我们得到稳定的低级性。 这是我们的结果:45个节点,26毫秒。