响应式微服务入门
在企业级基于微服务的系统中,往往包含大量的微服务,其规模和复杂性难以在一篇文章中全面呈现。在这种情况下,跟踪一组微服务并与它们进行通信会变得极具挑战性。
微服务的自主性与隔离性
在从单体应用向微服务架构过渡时,我们了解到微服务具有隔离性。通过接缝识别,我们将模块隔离成独立的服务集,这些服务拥有自己的数据,不允许其他微服务或进程直接访问。通过专注于单一业务功能并处理好数据和封装的业务功能等方面,我们实现了微服务的自主性。异步性也是微服务的一个重要特性,它使得对微服务的调用是非阻塞的。
微服务的自主性非常重要,如果一个微服务的故障导致其他服务延迟或产生多米诺效应,那就说明我们的设计存在问题。如果微服务的隔离做得正确,并且对每个微服务要执行的功能进行了合理分解,那么整个设计就能更好地处理各种冲突、通信和协调问题。
一个设计良好的微服务,其消费者不必担心微服务失败或抛出异常。如果在规定时间内没有响应,只需重试即可。
消息驱动:响应式微服务的核心
消息驱动是响应式微服务的核心。所有响应式微服务都会定义它们可能产生的任何事件,这些事件可能包含也可能不包含额外的信息负载,这取决于单个事件的设计。事件的生成者并不关心该事件是否被处理,在该特定服务的范围内,事件生成后的行为没有进一步的定义。
这些生成的事件可以通过异步监听来捕获,没有其他服务会以阻塞模式等待这些事件。监听这些事件的服务称为订阅者,监听事件的行为称为订阅。订阅这些事件的服务称为观察者,生成事件的源服务称为可观察对象,这种模式就是观察者设计模式。
在实现每个观察者时,具体的实现方式可能与我们设计松耦合微服务的理念不