对于是否使用RMQ / Kafka / Http等进行微服务之间的通信,我有些不知所措。我希望对此有所了解。首先,我的客户端是一个移动应用程序,可以进行同步调用并等待响应。
直觉上,我不希望Java服务器和Python分类器之间的内部通信是同步的,因为我希望具有高吞吐量,因为我可能有成千上万(希望)的客户端同时发送请求。
如何进行非阻塞请求-响应,并同时将请求检索到同一客户端?
客户端<-http-> Java <-?-> Python
答案 0 :(得分:0)
在您发布的问题中,我想到的是,也许您可以在两者之间添加一层缓存。应用程序启动后,此缓存将立即预加载一些数据(取决于您可以负担的内存大小)。您可以具有时间限制的缓存或LRU(取决于您的体系结构)。 Redis提供了一种简单有效的方法。这里只有浪费的时间才是网络延迟。 注意:我是这个平台的新手,并且还在回答的初期。因此,建议的任何改进将不胜感激。谢谢。
答案 1 :(得分:0)
如果您希望使用非阻塞式扩展解决方案,建议将Kafka用作服务器和客户端之间的中间层。
这样,客户端会将同步请求发送到kafka,然后等待服务器响应。
同时,服务器运行消费者的多线程系统,该系统轮询(即消费)用户请求并将响应发送给客户端。
因此,可以说客户端Bob发送了一个请求,它在专门的kafka主题中排队,还有数百万其他用户请求等待响应。
服务器处理所有繁重的请求,最终进入Bob的事件,并在5秒后最终发送响应,现在Bob收到了响应,并可能为该请求关闭了“会话”(没有像HTTP这样的实际会话,但您可以选择其他一些压缩/编码格式。
选择事件的格式和详细的通信方式时,应考虑一些安全措施,由于您的问题更为基本,因此请保留此讨论供以后使用。