我正在使用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一起使用
答案 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 Set
和Virtual Network
。
Availability Set
可以帮助您将虚拟机加入虚拟网络,以提高Region/Virtual Network
下的沟通能力。
您可以尝试使用Availability Set
和Virtual 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:部署最佳实践”主题的下载链接。
您可以按照白皮书的内容配置网络并减少网络延迟。