同步调用
优点:
时效性强,可以立即得到结果
缺点:
耦合度高:每次加入新的需求都需要修改原来的代码
性能下降:调用者需要等待服务提供者响应,如果调用链过长则响应时间等于每次调用时间之和
浪费资源:调用链中的每个服务在等待响应的过程中不能释放请求占用资源,高并发场景下会极度浪费系统资源
级联失败:如果服务提供者出现问题所有的调用者都会出现问题,导致微服务群故障
异步调用
优点:
耦合度低:通过发布事件而不是进行调用所以几乎没有耦合
吞吐量提升:因为通过发布事件所以不需要等待对方执行完成,耗时更短吞吐量提升
故障隔离:因为不存在调用关系所以服务器挂掉不会受影响
流量削峰:高并发来了后通过Broker做缓存,微服务通过自己的能力从Broker中获取事件并处理
缺点:
依赖于Broker的可靠性、安全性、吞吐能力
架构复杂,业务没有明显的流程线,不好追踪管理