SpringCloud 空闲分布式解决方案
幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数
研究了很久的幂等性解决方案。终于实现了一个模型。抛砖引玉,希望各路大神指正
1、主要是基于Spring MVC的HandlerInterceptorAdapter + ResponseBodyAdvice + redis的分布式锁。
2、幂等的请求。需要在请求中加入header参数X-REQ-IDEM-ID,并赋值UUID,用于标记同一次请求
3、如果同一请求发生竞争。通过redis的nx来竞争锁。竞争失败的请求返回状态码499
4、如果请求时,当前UUID状态正在处理中,那么返回499
5、客户端收到reponse code 为 499。则需要通过重试策略来获得执行结束后的值
6、对于有内部转发的请求的幂等处理方式。因为在servlet规范中,forawrd在一个jvm里面会是由同一个线程处理。而且Spring MVC的不管内部出现几次forward(有人为forward,也有controller 层向上抛异常的error也会有forward到默认的/error),会在内部跳转的结束后,调用ResponseBodyAdvice。所以只需要关心ResponseBodyAdvice的内部实现即可
The Container Provider should ensure that the dispatch of the request to a target servlet occurs in the same thread of the same JVM as the original request.
7、代码和使用手册参考:https://github.com/amu007/springcloud-idempotent-starter
推荐阅读
-
SpringCloud 空闲分布式解决方案
-
面试官:请说出几种常用的分布式身份识别解决方案
-
SpringCloud-Feign 多文件上传解决方案
-
分布式架构 springmvc++mybatis+springboot+springcloud+redis
-
分布式交易的七种解决方案,逐一讲述
-
分布式交易与解决方案 | 京东物流技术团队
-
SpringCloud 电影院售票系统 - 微服务 - 分布式
-
SpringCloud分布式开发的五大神器-Ribbon
-
分布式机房运行和维护管理解决方案
-
基于 NFC 的无线电池管理 BMS - ● 主动读取内部传感器:利用 NFC 技术,BMS 能够主动读取内部传感器的数据 [... 考虑车辆外使用案例中的空闲状态场景:NFC 技术可用于处理闲置状态下的电池组读取,例如在第二次生命转移期间进行存储。 主动诊断读取:在邻近系统中部署了 BMS 的情况下,使用 NFC 技术进行主动诊断读取。 (ii) 系统结构 系统架构如图所示,在建立安全通道之前,需要对设备进行身份验证。数据链路通信层由 NDEF 记录处理,而数据存储可以是离线的,也可以是数据库中的在线存储。活动和空闲状态的诊断读数取决于设备和数据方向,需要与外部 NFC 阅读器进行通信。软件架构分为三层,包括硬件抽象层(HAL)、中间层(中间件)和应用层。HAL 处理硬件驱动组件,中间件执行设备验证,而应用层则由开发人员根据安全漏洞和格式扩展*定义。 为确保安全,系统采用了一个安全模型,为 BMS 和主动诊断读取情况格式化应用数据。安全考虑因素包括设备相互验证、使用安全通道(加密和防篡改)以及确保电池组内读数的安全。 考虑到不同的 BMS 拓扑,包括集中式、调制式、分布式和分散式,系统需要满足设备相互验证和使用安全通道的要求。对于每种拓扑结构,都必须考虑将性能开销降至最低。电池是封闭的,对其进行物理攻击不可行或成本太高。外部攻击可能也很困难。基于对称或非对称加密技术的自动验证可用于保护电池组读数。安全协议在验证阶段和会话密钥确认阶段采用双密钥加密,以抵御攻击。中间件在数据格式验证、确认和处理中发挥关键作用,确保数据传输安全。 (iii) 唤醒模型设计