[英]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 Set
和Virtual 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.