为什么我们不只使用异步消息/事件作为微服务体系结构中的唯一通信方式,并删除所有sync / http调用?
我无法想象在任何情况下同步如何比异步具有优势。
想象一下以下三个服务A,B,C中的呼叫链:
UI-> A-> B-> C
想象一下,所有服务都有(有限)线程池来服务传入的请求。
A中已接受来自UI的连接请求的线程将向B发出HTTP请求。
由于对B的请求是IO的一种形式,因此该线程将被抢占,直到从A-> B-> C-> B-> A传输数据为止,从而浪费了很长时间。
其他服务也会发生类似的线程抢占。
如果我们有消息驱动的设计,则每个服务中都可以有以下线程池:
请考虑以下事件顺序:
requestId -> requestObject
的全局映射中。这种设计的优势在于,线程是免费的,可立即增加服务的吞吐量,此外还具有消息驱动的体系结构的通常优势,例如可伸缩性和可扩展性(消息也可以通过日志,跟踪,数据分析来读取)或其他任何生产服务甚至不知道的服务。
要处理超时,我们可以采用以下策略:
那么为什么基于HTTP的微服务架构如此流行?