目录

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)定时同步任务:即使实时同步接口失败了,还可以使用定时同步任务,同步数据库中的全量信息。

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

 

 

 

 

 

 

 

 

 

 

Logo

开源、云原生的融合云平台

更多推荐