Hazelcast 异步写入是否具有传递性?
Is Hazelcast async write transitive?
我正在使用 Hazelcast 进行一些简单的基准测试,看看它是否适合我们对分布式数据网格的需求。这个想法是让奇数个服务器(例如 5 个)具有'> n/2' 复制(例如 3 个)。
所有服务器和客户端 运行 在我的本地计算机上(无网络延迟)我得到以下结果:
5 x H/C server (sync backup = 2, async backup = 0); 100 Client Threads : 35,196 puts/second
5 x H/C server (sync backup = 1, async backup = 1); 100 Client Threads : 41,918 puts/second
5 x H/C server (sync backup = 0, async backup = 2); 100 Client Threads : 52,007 puts/second
正如预期的那样,异步备份允许比同步备份更高的吞吐量。对于我们的用例,我们可能会选择中间选项(1x 同步和 1x 异步),因为这可以让我们在弹性和性能之间取得可接受的平衡。
我的问题是:如果Hazelcast配置了1x sync和1x async,执行同步备份后节点崩溃(server returns 'OK' to client and client thread 进行)但是在执行异步备份之前(因此数据只在一个副本上而不是第二个副本上),接收到同步备份的节点会接手异步备份的任务,还是会等到整个集群重新余额和来自崩溃节点的 'missing' 数据从副本重新分配?如果是后者,一旦集群重新平衡,将总共有 3 个数据副本,如果节点没有崩溃,或者只有 2 个副本,因为同步节点假定另一个节点已经收到它的副本了吗?
分区所有者负责创建所有备份。
换句话说:第一次备份不会为第二次备份创建新的备份请求 - 这是所有者的全部责任。
如果持有备份副本的成员过时,则会启动反熵机制,备份分区将更新以匹配所有者。
当一个成员出现故障时,第一个 (=sync) 备份最终会被提升为新的分区所有者。新所有者有责任确保配置的冗余得到遵守 - 将创建一个新备份以确保有 2 个配置的备份。
我正在使用 Hazelcast 进行一些简单的基准测试,看看它是否适合我们对分布式数据网格的需求。这个想法是让奇数个服务器(例如 5 个)具有'> n/2' 复制(例如 3 个)。
所有服务器和客户端 运行 在我的本地计算机上(无网络延迟)我得到以下结果:
5 x H/C server (sync backup = 2, async backup = 0); 100 Client Threads : 35,196 puts/second
5 x H/C server (sync backup = 1, async backup = 1); 100 Client Threads : 41,918 puts/second
5 x H/C server (sync backup = 0, async backup = 2); 100 Client Threads : 52,007 puts/second
正如预期的那样,异步备份允许比同步备份更高的吞吐量。对于我们的用例,我们可能会选择中间选项(1x 同步和 1x 异步),因为这可以让我们在弹性和性能之间取得可接受的平衡。
我的问题是:如果Hazelcast配置了1x sync和1x async,执行同步备份后节点崩溃(server returns 'OK' to client and client thread 进行)但是在执行异步备份之前(因此数据只在一个副本上而不是第二个副本上),接收到同步备份的节点会接手异步备份的任务,还是会等到整个集群重新余额和来自崩溃节点的 'missing' 数据从副本重新分配?如果是后者,一旦集群重新平衡,将总共有 3 个数据副本,如果节点没有崩溃,或者只有 2 个副本,因为同步节点假定另一个节点已经收到它的副本了吗?
分区所有者负责创建所有备份。 换句话说:第一次备份不会为第二次备份创建新的备份请求 - 这是所有者的全部责任。
如果持有备份副本的成员过时,则会启动反熵机制,备份分区将更新以匹配所有者。
当一个成员出现故障时,第一个 (=sync) 备份最终会被提升为新的分区所有者。新所有者有责任确保配置的冗余得到遵守 - 将创建一个新备份以确保有 2 个配置的备份。