hantsy
2020-06-20 16:06:06 +08:00
这种处理挺复杂的,大部分项目都是在业务不断优化过程中完成的。
这不是一个教程能够教出来的东西,也不是看一本什么 Spring Cloud 内幕之内可以搞定的,长期的项目实践过程是必须的。
传统的事务基本靠边站,Saga 模式几乎是必须的。JakartaEE/Microprofile 在起草一个 Long Running Action 规范。一些工作流,状态机项目也在做同样的事情,比如 Spring 下的 Statemachine 项目(支持 ZK ),每步执行结果状态决定下一步,提供正常路径和补偿回退处理方案。
针对这种处理,Microservice 架构上设计归为分两种处理方式。
1,每个服务管理自己的状态变更,触发下一步处理。比 Order Service 保存订单,触发一个**OrderPlaced**事情(通 MessageBroker ),Logistics Service 订阅这个消息,立即处理。回退一样在某个服务中通过发送一个失败事件,一步步回退。无中心化管理状态,开发上比较简单,自由,也有很多挑战(状态定义的变更向后兼容性的问题等)。
2,状态的管理中心化,每个服务集中处理自己的业务,最后状态更新和决定下一步由管理调度角色决定。现在有很多类似工作流项目开始介入这种模式,充当一种调度者的角度。
但话说回来,我在上海时候参与一些项目,接触到国内的一些人对 MS 的认识,什么补偿措施没有的项目一样跑的,用 了 Spring Cloud Netflix 就觉得自己在做微服务,这种看起来像 MS 的大把,实际上系统比单体程序脆弱得多。