我们有一个系统,使用相同的数据集(键-值对)跨越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:它的性能很好,符合我们的用例,但不支持复制和持久性。
我找不到任何支持我们所有用例的东西。我正在寻求这个社区的建议,帮助我们有效地构建此系统,而不会产生严重的性能影响。感谢您的任何帮助!谢谢!
然而,我们当前用于在服务器之间同步此数据的系统存在问题:
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:它的性能很好,符合我们的用例,但不支持复制和持久性。
我找不到任何支持我们所有用例的东西。我正在寻求这个社区的建议,帮助我们有效地构建此系统,而不会产生严重的性能影响。感谢您的任何帮助!谢谢!