然而,产品表是主要工作负载的一部分,因为它被用来获取用户试图购买的产品的价格。用户表、使用情况表和余额表被创建为分区表,从而实现高并发性的读写访问。
2.4.2 数据
工作负载在一个稳定的数据集上运行,该数据集根据集群的大小进行扩展。不同集群的起始数据集大小遵循以下比例:
2.4.3 工作负载
工作负载由两个并行运行的操作组成,即分配限额和添加用户/余额。这些操作在Java + SQL中实现,涉及到使用条件逻辑执行多个SQL语句,这些语句提供的好处是减少网络行程和在每个逻辑事务中实现更多工作。
起始数据集加载之后,以相同的频率并行调用工作负载中的两个操作以实现目标吞吐量。两个操作都很复杂,涉及到必须通过连接多个表的数据做出的决定。通过将每个操作实现为VoltDB 预存程序,整个操作将作为一个完整事务成功或失败,并将状态返回给客户端应用:
“
分配额度 — 访问 4 个表。仅在确认用户的账户余额充足时分配额度,并在成功分配之后减少余额。
添加用户/余额 — 访问 2 个表。添加一个新用户到系统或增加某个用户的余额。
2.4.4 衡量标准
基准测试应用在不同的节点配置上运行,以证明VoltDB 在运行高度事务型工作负载时的可扩展性。我们在每种节点配置上捕捉延迟和吞吐量数据点,并使用它们绘制可扩展性曲线。
我们在运行10 分钟后捕捉数据点。此等待期帮助我们确保系统达到中等CPU利用率(介于 55%和 60%之间)的稳定状态,并且每台机器的RAM利用率大致为33%。
基准测试在Google Cloud实例上进行。节点配置如下:
关于基准测试结果的背景,我们想要说明的是,基于我们与电信客户的对话,针对要求最为苛刻的5G 应用的SLA 是低于5 毫秒的可预测延迟,以及每秒处理 2~6 百万数据行的能力和线性扩展的能力。我们可以在这些严格的SLA的背景下看待基准测试结果。
VoltDB(4 个分区在4 核机器上运行 )的吞吐量和延迟
这张图表展示了吞吐量与节点数量的近似线性扩展。测试的最大集群含有27个节点。观察到的最高吞吐量是每秒740,703次运算。
上图还表明,对于每个测试的集群大小,第99百分位延迟符合 SLA 所要求的5毫秒(27个节点的集群除外,其延迟略长于5 毫秒)。考虑到5G级电信SLA是所有行业或用例中最为严格的,以及计费应用的复杂性,VoltDB 轻松超越吞吐量和延迟SLA 是一项非常了不起的成就。
VoltDB(16 个分区在16 核机器上运行)的吞吐量和延迟
基准测试在16核机器上运行,该机器更接近于生产系统中的配置,因此可以很好地衡量VoltDB 的性能。同样, VoltDB展现出了线性可扩展性,并在27节点集群上实现了超过每秒300万次运算的吞吐量,因而它可以满足或超越SLA要求。
对于各种集群尺寸,VoltDB 的延迟远低于SLA要求的5毫秒。对于3个节点的较小集群,它的第99百分位延迟略长于3毫秒,而对于其他集群配置,它的延迟低于3 毫秒!