编年史地图 vs Redis vs Koloboke

5
我们有一个系统,使用相同的数据集(键-值对)跨越50个服务器。每小时对此数据集的更新次数约为1000次,并且必须在这些50台服务器上进行复制。我们有一个主系统,接收这些更新并负责将这些更新传播到其他服务器。目前,我们每小时以文件形式将整个数据集(而不是增量更新)同步到所有服务器。然后将此数据加载到不可变的Koloboke映射中。每个服务器每秒处理大约25000个请求,每个请求在该映射中执行30个查找。这些服务器接收到的请求的平均响应延迟必须最大约为3毫秒,因此内存中的koloboke映射在维护此响应时间方面表现良好。
然而,我们当前用于在服务器之间同步此数据的系统存在问题:
1)很多时候,关键数据同步在其中一台服务器上失败,导致收入损失
2)由于此数据存储在内存中,因此不具有持久性,我们需要在每次服务器重新启动或每小时更新时重新加载此数据,这会影响应用程序的启动时间。
为了使其更有效率,我已经探索了Redis、Chronicle Maps和Koloboke库中的Mutable maps。但是我遇到了它们的限制:
Redis:Redis支持复制和持久性。但是,在使用其基准测试实用程序时,我发现它可以支持的查找次数仅略高于我们的平均用例(0.8-1.1百万请求与每秒0.75百万的查找次数)。此外,对Redis的调用将通过网络进行,这将影响我们的平均响应时间3ms。
Chronicle Maps:在进一步探索后,我发现Chronicle Maps支持复制、持久性,并且可以提供高达3000万个请求/秒的服务。乍一看,它似乎是一个不错的选择,但后来我发现它们与multimaps不兼容,而我们在应用程序中生成了multimaps。此外,他们将数据存储在堆之外,因此反序列化数据的成本会导致性能下降。
Koloboke:它的性能很好,符合我们的用例,但不支持复制和持久性。
我找不到任何支持我们所有用例的东西。我正在寻求这个社区的建议,帮助我们有效地构建此系统,而不会产生严重的性能影响。感谢您的任何帮助!谢谢!

你有兴趣聘请Chronicle进行咨询吗?特别是如果这导致了收入损失。例如,我们可以开发一个复制的多映射解决方案。使用离堆内存上的飞行权重可以减轻反序列化的成本。 - Peter Lawrey
1个回答

5
这种情况在Aerospike中可以轻松处理。Aerospike可以配置成与您运行这些服务器的方式完全相同。一旦对服务器群集进行任何更新,Aerospike将为您更新所有服务器。乍一看,Aerospike也可以满足您的读取延迟要求。此外,Aerospike可以同时从RAM和SSD或HDD上存储数据以实现持久性。似乎是Aerospike量身定制的案例。您可以使用Aerospike Community Edition免费运行概念验证。或者,如果您想进行3个月的企业版试用许可并获得Aerospike解决方案架构团队的帮助,请联系Aerospike销售。要成功进行此操作,您必须正确设置Aerospike集群的数据容量和数据延迟。如果配置不正确,您可能会驳回一个适合您的解决方案。

3
你能不能让你的语言听起来更像一个市场宣传而不是已经是了? - stan
这个答案里我读到的只有 Aerospike Aerospike Aerospike Aerospike Aerospike 和 Aerospike。 - Bharath M Shetty
用户在问题中标记了Aerospike,因此它被回答了,因为它出现在Aerospike stackoverflow线程中。哦,五年前的事了。如果冒犯了你,很抱歉。 - pgupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接