知识卡片
事件驱动解决时间耦合
内容
服务间耦合可以分成好几类:实现耦合(换个实现细节不影响对方)、部署耦合(能不能独立发布)、时间耦合(两个服务必须同时在线才能完成一次交互)。请求/响应模式,不管是同步阻塞还是响应式非阻塞,本质上都没有解决时间耦合——下单服务发请求给目录服务时,目录服务必须此刻正好在线且能响应,这也是为什么要专门给这类交互配熔断器、超时、重试这套完整的韧性机制。事件驱动架构换了个模型:生产者发布事件后就不再关心谁、什么时候去消费,消费者可以在任意时刻读取处理,两者不需要同时在线——这才是真正意义上解除了时间耦合。发散:这解释了熔断器、重试这些模式为什么在事件驱动架构里显得没那么必要——它们是专门为治疗”时间耦合”这个病开的药,换成异步消息之后,病因本身被移除了,药也就用不上了(当然消息代理本身的可用性又是另一层需要韧性保障的东西)。
参考来源
《Cloud Native Spring in Action》第10章《Event-driven applications and functions》