#弹力设计
##隔离性设计
隔离是对系统进行解耦
实现方式如下:
1、按业务拆分
2、按用户拆分
##异步通讯设计
系统解耦不单单是把业务拆分,拆分后业务之间如何通讯
实现方式如下:
1、按请求响应模式
2、按订阅模式
3、按Broker模式
第2、3中模式就是事件驱动模式。
##幂等性设计
一次调用和N次调用某个资源时,具有相同的副作用
实现方式如下:
1、下游系统提供查询接口,如果查询到说明成功,否则失败。
2、提供全局ID,唯一标识,上游系统只管调用,幂等性由下游系统保证。
推荐Twitter 开源项目Snowflake,分布式id生成算法。
##补偿事务设计
分布式系统或者当下流行的微服务,一个业务流程会调用多个服务,而一个业务少不了数据的一致性。例如: 下单、支付、扣库存。所以通过CAP原理,经过对ACID和BASE理论分析,得出强一致和可用性场景。大多数分布式系统是很难做到强一致的,针对弱一致或最终一致业务补偿机制是很有必要的。
1、尽最大努力执行完这个业务流程(幂等性、重试机制)
2、监控整个流程中的状态(调用前的状态,调用后的状态,期望的状态),把状态数据保存到一个高可用和稳定的组件上。
3、失败时进行回滚,撤销操作。
##重试设计
1、重试要针对特定的错误进行重试,例如超时、等待繁忙。而有明确业务错误(http 503,权限等)的不必去重试。
2、设定重试阈值,例如3次。
##熔断设计
当重试阈值之后,应该进行熔断操作。
可自行研究Spring Cloud Hystrix
##限流设计
自行研究Spring Cloud Zuul
持续更新中......