Hazelcast成员之间的高延迟(使用主题发布/ onMessage)

时间:2015-12-10 18:32:53

标签: java azure delay messaging hazelcast

我正在使用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);
}

两个azure VM位于同一区域,这两个VM之间的延迟(Ping)不到5ms。

禁用多播连接,使用静态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一起使用

3 个答案:

答案 0 :(得分:2)

谢谢你的回复, 我在我使用的MessageListener中找到了延迟的原因

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

用于记录。 在Windows机器上,getHostName方法有时需要15秒。

答案 1 :(得分:1)

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

您是否可以更改应用程序,以便memberA向memberB发布消息,memberB发布对memberA的响应。

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

答案 2 :(得分:1)

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

Availability Set可以帮助您将虚拟机加入虚拟网络,以提高Region/Virtual Network下的沟通能力。

您可以尝试使用Availability SetVirtual Network来解决问题,请参阅这些文档https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-how-to-configure-availability/https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-create-vnet-arm-pportal/来执行此操作。

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

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