繁体   English   中英

Hazelcast成员之间的高延迟(使用Topic publish / onMessage)

[英]High Latency between Hazelcast members (using Topic publish/onMessage)

我正在将Hazelcast(v3.5.4)主题用于在两个Azure VM(标准D3)上运行的一个非常简单的聊天应用程序。

发布消息时,其他成员有时最多需要15秒才能收到消息。 我记录了publish和onMessage方法,以明确hazelcast造成了延迟。 没有网络延迟,应用程序和VM使用的CPU资源几乎为零。 什么会导致这种延迟?

对于消息传递,使用主题:

private ITopic<ChatMessage> eventTopic;

@PostConstruct
private void init() {
    eventTopic = hazelcastInstance.getTopic("chat-messages");
    eventTopic.addMessageListener(new ChatMessageListener());
}

public void publishMessage(final ChatMessage chatMessage) {
    log.debug("Publish message: " + chatMessage.toString());
    eventTopic.publish(chatMessage);
}

两个天蓝色VM处于同一区域,这两个VM之间的延迟(Ping)小于5毫秒。

组播连接被禁用,使用静态TcpJoin:

@Bean
public HazelcastInstance hazelcastInstance() {
    final Config config = new Config();
    NetworkConfig networkConfig = config.getNetworkConfig();

    networkConfig.setPort(5701);
    networkConfig.setPortAutoIncrement(true);
    networkConfig.setPortCount(3);
    networkConfig.getInterfaces()
        .addInterface("10.0.0.*")
        .setEnabled(true);
    final JoinConfig join = networkConfig.getJoin();
    join.getAwsConfig().setEnabled(false);
    join.getMulticastConfig().setEnabled(false);
    join.getTcpIpConfig().addMember("10.0.0.1-2").setEnabled(true);

    return HazelcastInstanceFactory.newHazelcastInstance(config);
}

Spring Boot 1.3与hazelcast-spring 3.5.4一起使用

感谢您的答复,我在我使用的MessageListener中找到了延迟的原因

message.getPublishingMember().getSocketAddress().getHostName()

用于记录。 在Windows计算机上,getHostName方法有时最多需要15秒。

15秒很多(就像疯了一样)。 也许时钟与机器不同步?

您是否可以更改应用程序,以便让memberA将消息发布到memberB,memberB将响应发布到memberA。

在memberA上,您测量RTT(往返时间),然后将其除以2,以查看发送/接收一条消息所花费的时间。 至少您可以摆脱系统时钟的任何问题。

在Azure上,有一些概念用于Azure VM的Availability SetVirtual Network

Availability Set可以帮助将您的VM连接到虚拟网络中,以提高“ Region/Virtual Network下的通信能力。

您可以尝试使用“ Availability Set和“ Virtual Network解决问题,请参阅以下文档:https://azure.microsoft.com/zh-cn/documentation/articles/virtual-machines-how-to-configure-availability/https://azure.microsoft.com/zh-CN/documentation/articles/virtual-networks-create-vnet-arm-pportal/来做到这一点。

同时,有一份白皮书( https://hazelcast.com/resources/whitepaper-best-practices-azure/ ),您可以在Hazelcast官方资源中心上请求主题为“ Azure上的Hazelcast:部署的最佳实践”的下载链接。 。

您可以按照白皮书的内容配置网络并减少网络延迟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM