响应式架构

对请求、事件、失败、用户进行响应

响应式编程的基础上

原则

Responsive

Elastic

Message Driven

通过异步消息驱动不仅可以在组件之间隔离边界,松耦合,弹性也得到一定提升

Resilient

使用复制、隔离、委派等来保证系统在出现故障时的响应能力

本质

事件与消息

消息传递

事件的触发,导致了消息的传递

异步

消息流程

背压

目标透明

原始分布式时代的RPC:

但是这种统一的抽象往往会带来额外的问题,需要付出更大的成本

定界一致性

通过保证小一级模块的强一致性从而来使系统达成最终一致性

使用DDD来将相应的行为与数据划分在一起,形成事务边界

模式

单一组件

将复杂组件拆解为不同的组件,每个组件遵循SRP原则

错误内核

将状态保留在高层 当进行错误恢复时 状态得以保留从而恢复到当时状态 避免出现错误时当前组件崩溃状态丢失

任其崩溃

对于恢复成本极高的组件出现故障时,不进行修复,直接重启

为了发现故障,需要通过某种心跳监控来发现

断路器

消息流模式

请求响应

自包含消息

消息本身包含了处理所需的上下文 状态保存在消息里 处理者保持无状态

前进流

使用第三方组件是有代价的 如非必要 勿增实体

聚合器

聚合多方服务的数据 若无依赖 使用并发请求再汇总

商务握手

流控模式

推拉

由消费者根据自身处理能力进行批量拉取数据 可以解决背压问题

推模式则时效性高 主动推送

托管队列

由于速度差异或者瞬时流量 使用一个FIFO队列来进行流量整形 使系统可以平滑度过

丢弃

限流