我们正在利用 Apache Ignite 集群实现低延迟分布式计算系统。所有数据都存储在内存中。现在我们每秒支持大约 600 个分布式计算请求,延迟约为 50-200 毫秒。计算非常复杂并且涉及不同的缓存。我们还支持数据更新。
当数据在读取的同时更新时,我们遇到了可扩展性问题。我们的数据不是原子的(涉及多个缓存)。实际上所有的数据都被分成了段,我们通过集群来分布这些段。 在进行搜索计算时,每个节点都会扫描其所有本地段并找到结果。
当我们进行一次更新时,我们会影响存储该数据的单个段。
但问题是,在单个节点上的单个段更新期间,整个搜索计算被阻塞或重复,以支持整个结果的一致性。
我知道Hadoop限制这种情况并且不允许在HDFS中更新,只保存新版本。但我们的情况并非如此,因为收集不同版本的数据需要大量内存并会导致重复。
是否有任何架构技术可以通过此类更新来支持可扩展性?
我们尝试通过重复来实现乐观交易,但计算经常重复。 READ_COMMITED 级别破坏了一致性。 REPEATABLE_READ 正在阻塞。
最佳答案
我认为您可以采用一个事务 block (一个段?),通过删除重复项并连接对相同键进行操作以进行单个操作来优化它,然后以事务方式运行其余部分。
关于java - 我们如何实现可扩展的计算网格,并具有支持低延迟和一致性的大规模并发内存更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464140/