Java 我们如何通过支持低延迟和一致性的大规模并发内存更新来实现可伸缩计算网格

Java 我们如何通过支持低延迟和一致性的大规模并发内存更新来实现可伸缩计算网格,java,apache-spark,hadoop,mapreduce,ignite,Java,Apache Spark,Hadoop,Mapreduce,Ignite,我们正在使用ApacheIgnite集群实现低延迟分布式计算系统。所有数据都存储在内存中。现在,我们每秒支持大约600个分布式计算请求,延迟约为50-200毫秒。计算非常复杂,涉及不同的缓存。我们还支持更新我们的数据 当数据在读取的同时被更新时,我们面临一个可伸缩性问题。我们的数据不是原子的(涉及多个缓存)。实际上,所有数据都被划分为段,我们通过集群来分发这些段。 在进行搜索计算时,每个节点扫描其所有局部段并查找结果 当我们进行单个更新时,我们会影响存储数据的单个段 但问题是,在单个节点上的单个

我们正在使用ApacheIgnite集群实现低延迟分布式计算系统。所有数据都存储在内存中。现在,我们每秒支持大约600个分布式计算请求,延迟约为50-200毫秒。计算非常复杂,涉及不同的缓存。我们还支持更新我们的数据

当数据在读取的同时被更新时,我们面临一个可伸缩性问题。我们的数据不是原子的(涉及多个缓存)。实际上,所有数据都被划分为段,我们通过集群来分发这些段。 在进行搜索计算时,每个节点扫描其所有局部段并查找结果

当我们进行单个更新时,我们会影响存储数据的单个段

但问题是,在单个节点上的单个段更新期间,整个搜索计算被阻止或重复,以支持整个结果的一致性

我知道Hadoop限制了这种情况,不允许在HDFS中更新,只保存新版本。但我们的情况并非如此,因为收集不同版本的数据需要大量内存并导致重复

是否有任何体系结构技术支持此类更新的可伸缩性


我们试图通过重复来实现乐观传输,但计算经常重复。读取提交的级别破坏了一致性。可重复读取是阻塞。

我认为您可以获取一个事务块(一个段?),通过删除重复项并在同一个键上加入操作来进行单个操作,然后以事务方式运行其余的操作来优化它。

我认为您可以获取一个事务块(一个段?),通过删除重复项并在同一个键上加入操作以进行单个操作,然后以事务方式运行其余的操作来优化它。

如果不深入了解用例的细节,不理解为什么必须阻止整个计算,恐怕很难提出任何有意义的建议(从商业角度)如果一个节点上只有一个部分得到更新。但是,我不关心延迟和吞吐量要求,这些都是可以实现的-参与了使用Ignite进行信用卡授权和支付的项目,99.99%的服务水平为20-50。请通过gridgain.com的dmagda给我发电子邮件。我担心这将很难实现提出任何有意义的建议,但不要深入到用例的细节中,也不要理解为什么必须阻止整个计算(从业务的角度)如果一个节点上只有一个分段得到更新。但是,我不关心延迟和吞吐量要求,这些是可以实现的-参与了使用Ignite进行信用卡授权和支付的项目,具有20-50 SLA,占99.99%。请通过gridgain.com的dmagda向我发送电子邮件。