微服务中的状态数据同步方式

本文探讨了微服务架构下状态数据的同步问题,特别是在设备数据采集场景中的挑战。提出了实时查库、使用Redis缓存及本地缓存三种实现方式,并详细分析了各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、业务场景

2、状态同步实现方式

2.1 实时查库

2.2  使用Redis缓存

2.3  本地缓存


1、业务场景

遇到一个小问题,涉及到微服务架构中分布式配置无法满足的场景,比如modbus数据采集,传感器数据采集等,部署方式为kubernetes。

  1. 状态数据是增量的且是动态监测出来的,比如某些设备的状态、监控项的状态数据。
  2. 实时性要求高,应用层逻辑强依赖这些状态数据,否则会出错。
  3. 状态数据要强一致性。

2、状态同步实现方式

首先回答一个问题:不检查设备状态直接采集数据,失败后做异常处理行不行?

答案是不行的:

1所有网络请求都是有超时时间的,一般modbus 从站的超时时间至少100m以上,如果是http 就更长了,至少3S吧,私有协议就不更不好说了。

2)出现异常,对系统来说总是不太好的。

3)程序员总是很严谨的。

2.1 实时查库

这种方式很简单,但是效率不够高。目前正常采集一条数据大概是10ms以内,但是查询数据就需要 30M到50M。

2.2  使用Redis缓存

这种方式也很简单,效率也有所提升,但是效率也不是特别高,查询redis也需要10ms左右。

2.3  本地缓存

这里给出一个方案,在连接的设备数不是太多的情况下(目前看没有超过500个连接),是可以的。

需要注意的地方

要提供至少三个接口

(1)实时修改接口:只有管理端手动断开设备时,或者监控平台检测到设备异常时才会调用这个接口,只有这种情况才会更新数据库。

(2)实时同步接口:由于是微服务架构,微服务部署了多个节点,修改后要实时同步到其他的微服务中去。这时只更新本地存储的设备状态,所以非常快,完全不用考虑分布式事务的问题。

(3)定时同步任务:即使实时同步接口失败了,还可以使用定时同步任务,同步数据库中的全量信息。

注意的地方:在同步数据的时候,可以给数据定义一个版本号。

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

October-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值