CN114666250A - 一种保持安防软件系统中数据和状态一致性的方法 - Google Patents
一种保持安防软件系统中数据和状态一致性的方法 Download PDFInfo
- Publication number
- CN114666250A CN114666250A CN202210194034.3A CN202210194034A CN114666250A CN 114666250 A CN114666250 A CN 114666250A CN 202210194034 A CN202210194034 A CN 202210194034A CN 114666250 A CN114666250 A CN 114666250A
- Authority
- CN
- China
- Prior art keywords
- service
- equipment
- access service
- equipment access
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 230000005856 abnormality Effects 0.000 claims abstract description 8
- 230000002159 abnormal effect Effects 0.000 claims description 32
- 238000004088 simulation Methods 0.000 claims description 26
- 230000004044 response Effects 0.000 claims description 18
- 238000012217 deletion Methods 0.000 claims description 10
- 230000037430 deletion Effects 0.000 claims description 10
- 230000007246 mechanism Effects 0.000 claims description 9
- 238000012545 processing Methods 0.000 description 26
- 230000008569 process Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000006855 networking Effects 0.000 description 3
- 230000010354 integration Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/10—Active monitoring, e.g. heartbeat, ping or trace-route
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
- H04L41/0813—Configuration setting characterised by the conditions triggering a change of settings
- H04L41/082—Configuration setting characterised by the conditions triggering a change of settings the condition being updates or upgrades of network functionality
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/1066—Session management
- H04L65/1073—Registration or de-registration
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Cardiology (AREA)
- General Health & Medical Sciences (AREA)
- Business, Economics & Management (AREA)
- General Business, Economics & Management (AREA)
- Multimedia (AREA)
- Hardware Redundancy (AREA)
Abstract
本发明公开了一种保持安防软件系统中数据和状态一致性的方法,在设备接入服务针对安防设备执行操作但因网络异常无法向业务服务返回操作结果时,业务服务定时向设备接入服务以同样的参数重新发起设备操作请求,直至接收到设备接入服务基于幂等性返回的操作结果并本地保存;在设备接入服务出现异常崩溃退出时,业务服务在设备接入服务重启后根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,接收设备接入服务返回的操作结果并本地保存。本发明以相比于分布式事务框架更加简便、可靠的方式实现数据和状态的统一。
Description
技术领域
本发明属于安防技术领域,具体涉及一种保持安防软件系统中数据和状态一致性的方法。
背景技术
随着应用场景的复杂度越来越高,使得软件系统越来越庞大,软件系统中碰到的问题也越来也复杂,因此在传统软件中影响较小的问题,在系统级软件中成为了必须要解决的痛点。如网络抖动问题,传统软件由于规模较小,数据和状态的管理比较简单,网络抖动带来的问题可以不解决。而在系统级软件中,网络抖动导致的请求超时会直接导致系统中各个服务的内部状态不一致,尤其是软件系统很多时候往往涉及到和硬件交互,将导致问题进一步复杂化。因此如何保证在系统中数据和状态的一致成为了亟需解决的问题。
典型的安防软件系统通常包含了网关、业务服务、设备接入服务、安防设备这四大部分。在实际使用中,网关、业务服务、设备接入服务随时都可能退出,如手动重启、服务异常崩溃等导致了服务离线或者服务在线但请求发送成功而处理结果没能返回的情况。复杂的网络环境带来的网络抖动、网络中断等也会导致同样的问题。
在分布式事务处理中,当设备接入服务处理失败,业务服务将数据和状态回滚并返回失败,此时设备接入服务和业务服务的状态就是一致的。或者业务服务超时返回失败,而设备接入服务处理成功后如果接收到分布式事务失败的通知再进行数据和状态的回滚也能保持数据和状态的一致。分布式的这种事务处理方式目前互联网行业用的比较多,但在安防领域中实用性不大,原因如下:
1)分布式事务框架的使用复杂,引入这一类的框架学习成本较大。
2)分布式事务框架数据和状态回滚失败通常需要依靠人工介入进行数据和状态修正,而部分软件项目可能会一段时间内无人工介入。
3)安防领域的大型软件项目是分期进行的,这通常意味着前期和后期的项目承接单位不是同一个,如果需要所有的项目承接单位都按照新的要求使用同一套分布式事务框架,这显然对项目前期已实现的功能改动较大。并且绝大多数情况下各个项目承接单位分布在全国各地,相互之间独立,不具备引入同一套分布式事务框架的条件。
基于以上的原因,分布式事务框架无法引入安防领域中,这导致安防领域中解决软件系统中数据和状态的一致性的问题仍然有待解决。
发明内容
本发明的目的在于提供一种保持安防软件系统中数据和状态一致性的方法,以相比于分布式事务框架更加简便、可靠的方式实现数据和状态的统一。
为实现上述目的,本发明所采取的技术方案为:
一种保持安防软件系统中数据和状态一致性的方法,所述安防软件系统包括网关、业务服务、设备接入服务和安防设备,所述保持安防软件系统中数据和状态一致性的方法用于保持业务服务和设备接入服务两者的数据和状态一致,所述保持安防软件系统中数据和状态一致性的方法,包括:
在设备接入服务针对安防设备执行操作但因网络异常无法向业务服务返回操作结果时,业务服务定时向设备接入服务以同样的参数重新发起设备操作请求,直至接收到设备接入服务基于幂等性返回的操作结果并本地保存;
在设备接入服务出现异常崩溃退出时,业务服务在设备接入服务重启后根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,接收设备接入服务返回的操作结果并本地保存。
以下还提供了若干可选方式,但并不作为对上述总体方案的额外限定,仅仅是进一步的增补或优选,在没有技术或逻辑矛盾的前提下,各可选方式可单独针对上述总体方案进行组合,还可以是多个可选方式之间进行组合。
作为优选,所述业务服务在本地保存设备接入服务的状态;
业务服务启动时将设备接入服务的状态置为离线;
业务服务接收设备接入服务启动时发起的注册并将本地保存的设备接入服务的状态置为在线;
业务服务定时向设备接入服务发起心跳,根据设备接入服务返回的心跳响应保持设备接入服务的状态为在线。
作为优选,所述业务服务定时向设备接入服务以同样的参数重新发起设备操作请求,包括:
业务服务向设备接入服务发起设备操作请求后超时未接收到设备接入服务返回的操作结果时,将该设备操作请求相关的异常数据记录到本地数据库中;
业务服务定时查询本地数据库的异常数据,根据异常数据以同样的参数重新发起设备操作请求。
作为优选,所述业务服务在设备接入服务重启后根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,包括:
业务服务连续多次未接收到设备接入服务返回的心跳响应后修改设备接入服务的状态为离线;
业务服务接收设备接入服务重启后发起的注册并将本地保存的设备接入服务的状态置为在线;
业务服务定时向设备接入服务发起心跳,根据设备接入服务返回的心跳响应保持设备接入服务的状态为在线;
业务服务根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求。
作为优选,所述设备操作请求包括添加设备请求和删除设备请求;
若所述设备操作请求为添加设备请求,则业务服务根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,包括:业务服务根据设备接入服务崩溃退出前接入的所有安防设备重新发起添加设备请求;
若所述设备操作请求为删除设备请求,则业务服务根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,包括:业务服务根据设备接入服务崩溃退出前需要删除的安防设备重新向设备接入服务发起删除设备请求,并根据设备接入服务奔溃退出前接入的除需要删除的安防设备之外的安防设备重新发起添加设备请求。
作为优选,所述设备接入服务不具备幂等性时,则设备接入服务执行幂等性模拟操作,所述幂等性模拟操作包括:
若设备接入服务收到的设备操作请求为添加设备请求,则将针对请求返回的成功结果和针对请求返回的设备已存在的错误结果进行合并处理;
若设备接入服务收到的设备操作请求为删除设备请求,则将针对请求返回的成功结果和针对请求返回的设备不存在的错误结果进行合并处理。
作为优选,所述业务服务不支持注册和心跳机制时,则业务服务执行注册心跳模拟操作,所述注册心跳模拟操作包括:
业务服务从设备接入服务提供的接口中选择一个查询类接口作为模拟接口;
当业务服务启动时将设备接入服务的状态置为离线;
若业务服务首次调用模拟接口成功则认为设备接入服务注册成功并更新本地保存的设备接入服务的状态为在线;
若业务服务连续调用模拟接口成功则认为接收到设备接入服务返回的心跳响应并保持设备接入服务的状态为在线;
若业务服务连续调用模拟接口失败则认为心跳失败更新设备接入服务的状态为离线。
本发明提供的保持安防软件系统中数据和状态一致性的方法,通过引入接口幂等和重试、注册和心跳、自动重启的设计使得数据和状态可以自动恢复实现最终一致性,相比于引入分布式事务框架更为简便,学习成本更低,同时也具备了较高的可靠性,虽然是主要描述安防系统中的设计,但也适用于大部分领域的软件系统。其次在大型软件项目中对现有服务不需要改动,实现的成本较低,尤其在系统集成项目及需要利旧的软件项目中具备实用价值。
附图说明
图1为本发明的安防软件系统的框架示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是在于限制本发明。
如图1所示,典型的安防软件系统通常包含了网关、业务服务、设备接入服务、安防设备这四大部分。安防软件系统如现有技术中的智能感知联网平台(AIOT PNP)(https://www.hikvision.com/cn/software-product/AIoT-PNP/),其包含设备接入、设备管理、资源联网和开放共享四个重点功能部分,其中的设备接入功能所搭载的服务对应于本申请的设备接入服务,设备管理、资源联网和开放共享功能所搭载的服务对应于本申请的业务服务。
其中,网关主要作用是将客户端请求按照指定的规则转发给指定的业务服务处理。业务服务的主要作用是接受请求处理业务逻辑,如果业务逻辑涉及到硬件相关的则发送请求到设备接入服务。设备接入服务的主要作用是管理设备、接受业务服务的请求并将请求下发给安防设备进行处理,同时将安防设备上报的事件发送给业务服务进行业务逻辑的处理。
为了克服现有技术中分布式事务框架无法较好应用在安防软件系统中解决数据和状态保持一致性的问题,本实施例提供一种通过引入接口幂等性和重试、注册和心跳、自动重启的设计使得系统各个服务的数据和状态能够自动恢复,实现数据最终一致性的方法。
本实施例中提供的保持安防软件系统中数据和状态一致性的方法,包括以下步骤:
在设备接入服务针对安防设备执行操作但因网络异常无法向业务服务返回操作结果时,业务服务定时向设备接入服务以同样的参数重新发起设备操作请求,直至接收到设备接入服务基于幂等性返回的操作结果并本地保存。
在设备接入服务出现异常崩溃退出时,业务服务在设备接入服务重启后根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,接收设备接入服务返回的操作结果并本地保存。
本实施例中保持业务服务和设备接入服务这两者中的数据和状态均一致。设备接入服务会记录已添加的安防设备,业务服务也会记录已添加的安防设备,这些记录属于数据是需要保持一致的。并且所添加的安防设备的在线离线状态也需要保持一致,异常崩溃重启后设备接入服务内部记录的已添加的安防设备记录就丢失了,当设备接入服务重新注册,接收到业务服务发送的添加设备请求,会重新记录已添加的安防设备以及其状态。
为了保持业务服务与设备接入服务的通信,业务服务在本地保存设备接入服务的状态。业务服务启动时将设备接入服务的状态置为离线;业务服务接收设备接入服务启动时发起的注册并将本地保存的设备接入服务的状态置为在线;业务服务定时向设备接入服务发起心跳,根据设备接入服务返回的心跳响应保持设备接入服务的状态为在线。
接口的幂等性指的是只要参数相同其返回结果必然一致,它和重试结合可用于解决请求发送成功但处理结果由于服务异常或者网络故障没能返回的情况。
因此,业务服务向设备接入服务发起设备操作请求后超时未接收到设备接入服务返回的操作结果时,将该设备操作请求相关的异常数据记录到本地数据库中;业务服务定时查询本地数据库的异常数据,根据异常数据以同样的参数重新发起设备操作请求。
由于网络异常有可能只是瞬时抖动,瞬时抖动只会导致在抖动这一刻操作结果不能返回,而其他时间的网络正常,而心跳机制是需要多次心跳响应接收不到才会置为离线,因此不会因为网络瞬时抖动而设置设备接入服务为离线。
本实施例中设备操作请求相关的异常数据包括设备操作请求的类型、设备唯一标识、设备的操作结果(成功、失败或者异常)、操作时间。容易理解的是,以上为本实施例设备的异常数据所包含的内容,在其他实施例中还可以增加或删减相应内容。
下面以安防软件系统中添加设备(或删除设备)为例描述接口幂等性和重试的整个流程。该例子中设备接入服务的接口已实现幂等性。
a、用户发起添加设备请求(或删除设备请求),该请求通过网关传达至业务服务;
b、业务服务向设备接入服务发起添加设备请求(或删除设备请求);
c、设备接入服务根据添加设备请求(或删除设备请求)接入(或删除)安防设备;
d、设备接入服务接入(或删除)安防设备成功但网络出现异常,无法向业务服务返回处理结果;
e、业务服务接收不到处理结果,超时后将异常记录到数据库并通知用户添加了离线设备(或删除异常);
f、业务服务定时查询数据库的异常记录,根据异常记录以同样的参数向设备接入服务发送添加设备请求(或删除设备请求)以重新添加(或删除)安防设备;
g、设备接入服务由于具备幂等性发现同样的参数已经处理过则直接返回处理结果给业务服务;
h、业务服务成功得到处理结果并修正数据库中的异常记录;
i、通知用户正确的结果。可以看到当操作异常后通过自动重试直到成功得到处理结果,以保持业务服务和设备接入服务中的数据和状态一致。
注册和心跳机制用于检测服务是否在线,只有在线的服务才能处理请求。通常设备接入服务启动后会向上游的业务服务发起注册请求,业务服务接受到注册请求则将其置为在线,此时意味着设备接入服务可以正常处理业务服务的请求。成功注册后业务服务和设备接入服务通过心跳请求来维持在线状态。一旦多次心跳失败则设备接入服务的状态为离线,此时意味着设备接入服务已不能正常处理业务服务的请求。以下简单描述整个流程。
a、设备接入服务向业务服务发起注册;
b、业务服务将其本地保存的设备接入服务的状态置为在线;
c、业务服务向设备接入服务发起心跳;
d、设备接入服务响应心跳;
e、业务服务保持本地保存的设备接入服务的状态为在线;
f、业务服务向设备接入服务发起心跳;
g、业务服务多次无法接收到设备接入服务的心跳响应;
h、业务服务修改本地保存的设备接入服务的状态为离线。
本实施例中通过注册和心跳机制对设备接入服务进行保活,在设备接入服务在线的前提下进行相关操作。
在实践中服务可能由于如BUG、内存不足等各种异常情况而崩溃,现有技术中面对异常奔溃时通常需要人工介入将服务重新启动。考虑到绝大多数项目都有一定时间内无人值守的指标要求。因此本实施例引入类似看门狗的技术对服务进行监控,一旦发现服务崩溃则自动进行启动。
当业务服务连续多次未接收到设备接入服务返回的心跳响应后修改设备接入服务的状态为离线。此时,设备接入服务很可能因为异常而处理奔溃状态。看门狗检测到异常奔溃后对设备接入服务进行自动重启,业务服务接收设备接入服务重启后发起的注册并将本地保存的设备接入服务的状态置为在线,业务服务定时向设备接入服务发起心跳,根据设备接入服务返回的心跳响应保持设备接入服务的状态为在线。
在设备接入服务重启后重新向业务服务注册并保持心跳,以保证恢复正常工作。业务服务在设备接入服务恢复正常后根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求。
通常设备接入服务通常具备添加设备、删除设备、修改设备、查询设备这四种接口。但由于修改设备和查询设备在效率要求不高的业务场景下不需要在业务服务和设备接入服务中保存设备信息(如设备坐标等信息),即这两种情况下不涉及到数据和状态的一致性问题。因此本实施例以添加设备和删除设备为重点描述保持数据和状态的一致。
因此若设备操作请求为添加设备请求,则业务服务根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,包括:业务服务根据设备接入服务崩溃退出前接入的所有安防设备重新发起添加设备请求;
以具体设备为例,若设备接入服务在已添加有A、B、C三个安防设备的基础上,在执行针对D安防设备的添加设备请求而崩溃时,则在设备接入服务重启并注册保活后,业务服务重新向设备接入服务发起针对D设备和原来已添加的A、B、C三个安防设备的添加设备请求。
当然针对A、B、C、D的添加设备请求可以同时发起,也可以根据业务场景逐个发起。
若所述设备操作请求为删除设备请求,则业务服务根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,包括:业务服务根据设备接入服务崩溃退出前需要删除的安防设备重新向设备接入服务发起删除设备请求,并根据设备接入服务奔溃退出前接入的除需要删除的安防设备之外的安防设备重新发起添加设备请求。
以具体设备为例,若设备接入服务在已添加有A、B、C三个安防设备的基础上,在执行针对B安防设备的删除设备请求而崩溃时,则在设备接入服务重启并注册保活后,业务服务重新向设备接入服务发起针对B设备的删除设备请求,以及针对A、C安防设备的添加设备请求。以此保证业务服务和设备接入服务中的数据和状态一致。
本实施例无需引入分布式事务框架,仅利用常规的技术手段(接口幂等和重试、注册和心跳、自动重启)即可实现保持数据和状态一致性的目的,相比于现有技术而言对应用系统的要求更低,适用性也更强。
基于此以安防软件系统中添加设备为例描述如何通过接口幂等和重试、注册和心跳、自动重启的设计使得系统各个服务的数据和状态能够自动恢复,具体包括以下步骤:
a、设备接入服务向业务服务发起注册;
b、业务服务将其本地保存的设备接入服务的状态置为在线;
c、业务服务向设备接入服务发起心跳;
d、设备接入服务响应心跳;
e、业务服务保持本地保存的设备接入服务的状态为在线;
f、用户发起添加设备请求,该请求通过网关传达至业务服务;
g、业务服务向设备接入服务发起添加设备请求;
h、设备接入服务成功接入安防设备(设备接入服务内部记录安防设备在线);
i、设备接入服务接入设备成功但网络出现异常,无法向业务服务返回处理结果;
j、业务服务接收不到处理结果,超时后将异常记录到数据库并通知用户添加了离线设备(业务服务内部记录安防设备离线,此时业务服务和设备接入服务中针对同一安防设备的所记录的状态不一致);
k、业务服务定时查询数据库的异常记录,根据异常记录以同样的参数向设备接入服务发送添加设备请求以重新添加设备;
l、设备接入服务由于具备幂等性发现同样的参数已经处理过则直接返回处理结果;
m、业务服成功得到处理结果并修正数据库中的异常记录(业务服务和设备接入服务内部记录安防设备为在线,此时业务服务和设备接入服务中针对同一安防设备的所记录的状态一致);
n、设备接入服务出现异常而崩溃退出(此时业务服务依然认为安防设备在线,但设备接入服务因为崩溃退出导致所记录的数据和状态丢失,此时业务服务和设备接入服务中针对同一安防设备的所记录的状态不一致);
o、业务服务向设备接入服务发起心跳;
p、业务服务多次无法接受到设备接入服务的心跳响应;
q、业务服务修改设备接入服务的状态为离线(此时业务服务和设备接入服务中针对同一安防设备的所记录的状态不一致));
r、监控程序发现设备接入服务已崩溃则重启设备接入服务(此时业务服务认为安防设备在线,设备接入服务没有该安防设备的记录,此时业务服务和设备接入服务中针对同一安防设备的所记录的状态不一致);
s、设备接入服务向业务服务发起注册;
t、业务服务将其本地保存的设备接入服务的状态置为在线;
u、业务服务根据之前已添加到该设备接入服务的安防设备重新向设备接入服务发起添加设备请求;
v、设备接入服务成功接入安防设备(此处不赘述设备接入服务由于异常没能返回结果的情况);
w、此时业务服务和设备接入服务均记录设备在线,业务服务和设备接入服务中针对同一安防设备的所记录的状态恢复一致。
在整个过程中经历了网络异常及服务崩溃,但业务服务和设备接入服务最终仍然状态保持了一致并恢复到了正确的状态和设备在线。
另外,以安防软件系统中删除设备为例描述如何通过接口幂等和重试、注册和心跳、自动重启的设计使得系统各个服务的数据和状态能够自动恢复,具体包括以下步骤:
a、设备接入服务向业务服务发起注册;
b、业务服务将其本地保存的设备接入服务的状态置为在线;
c、业务服务向设备接入服务发起心跳;
d、设备接入服务响应心跳;
e、业务服务保持设备接入服务的状态为在线;
f、用户发起删除设备请求(前置条件为需要删除的安防设备已经添加成功),该请求通过网关传达至业务服务;
g、业务服务向设备接入服务发起删除设备请求;
h、设备接入服务删除安防设备成功(设备接入服务不再和安防设备通信并在内部移除掉设备的信息);
i、设备接入服务接入删除设备成功但网络出现异常或发生异常崩溃,无法向业务服务返回处理结果;
j、业务服务接收不到结果,超时后将异常记录到数据库并通知用户删除失败(业务服务内部仍然有安防设备的记录及在线状态,此时业务服务和设备接入服务中针对同一安防设备的所记录的状态不一致);
k、业务服务定时查询数据库的异常记录,根据异常记录以同样的参数删除设备;
l、如果设备接入服务没有异常崩溃而重启,由于具备幂等性发现同样的参数已经处理过则直接返回处理结果;
如果设备接入服务已经异常崩溃重启过,重启并重新注册的流程参见添加设备的o到t步骤(此时业务服务内部有设备的记录,设备接入服务没有设备的记录),当接收到删除设备请求时直接返回处理成功的结果;
m、业务服务成功得到处理结果并修正数据库中的异常记录(业务服务和设备接入服务内部均移除设备的信息,此时业务服务和设备接入服务中针对同一安防设备的所记录的状态一致)。
在实际的项目实施中经常会遇到项目前期已有的服务不支持幂等及注册和心跳机制,也意味着如果不能兼容这些服务新的服务依然无法保证数据和状态一致。经过仔细的研究,发现可以通过模拟幂等性及注册和心跳机制来兼容已有的服务。
接口幂等性的模拟包括:服务提供的接口主要分为增加、删除、修改、查询四种类型。其中修改型和查询型接口由于参数相同其返回的结果必然也相同,所以通常这两类接口不需要特殊处理就已经具备幂等性。而增加型接口相同参数的调用要么返回成功要么返回已存在的错误,那么只要对已存在的错误和成功进行合并处理,可以认为具备幂等性。删除型接口相同参数的调用要么返回成功要么返回不存在的错误,只要对不存在的错误和成功合并处理,也可以认为具备幂等性。
通过以上的分析可以得出一个结论,大多数服务在不改动自身代码的情况下,只要新服务对现有服务的接口返回值进行特殊处理(部分错误返回值和成功的返回值合并处理)即可变相的认为具备幂等性,已实现接口幂等。
即在安防软件系统中,若设备接入服务不具备幂等性时,则设备接入服务执行幂等性模拟操作,所述幂等性模拟操作包括:
若设备接入服务收到的设备操作请求为添加设备请求,则将针对请求返回的成功结果和针对请求返回的设备已存在的错误结果进行合并处理。
若设备接入服务收到的设备操作请求为删除设备请求,则将针对请求返回的成功结果和针对请求返回的设备不存在的错误结果进行合并处理。
其中合并处理可以理解为把已存在(或不存在)的错误当成成功,在具体的实现逻辑中成功结果如何处理,就如何处理已存在(或不存在)的错误结果。
另外注册心跳的模拟,包括:针对已有服务不支持注册和心跳机制这种情况我们可以通过频繁调用指定接口来模拟,通常情况下我们可以从已有服务提供的接口中选择一个查询类的接口来频繁调用,由于调用的频次较高,该接口最好性能消耗较小。新服务内部会记录已有服务的在线和离线状态,同时根据调用接口的结果来更新该状态,当新服务刚启动运行时已有服务的状态为离线,在调用接口成功后则认为注册成功更新状态为在线,之后如果已有的服务由于各种异常情况已经离线,则新服务调用接口必然返回失败,多次失败即认为心跳失败置为离线。需要注意的时项目实施中一定要根据实际情况来选择接口调用的频次及调用失败的次数,保证已有服务能够正常对外响应。
即在安防软件系统中,若业务服务不支持注册和心跳机制时,则业务服务执行注册心跳模拟操作,注册心跳模拟操作包括:
业务服务从设备接入服务提供的接口中选择一个查询类接口作为模拟接口;当业务服务启动时将设备接入服务的状态置为离线;若业务服务首次调用模拟接口成功则认为设备接入服务注册成功并更新本地保存的设备接入服务的状态为在线;若业务服务连续调用模拟接口成功则认为接收到设备接入服务返回的心跳响应并保持设备接入服务的状态为在线;若业务服务连续调用模拟接口失败则认为心跳失败更新设备接入服务的状态为离线。
本实施例通过引入接口幂等和重试、注册和心跳、自动重启的设计使得数据和状态可以自动恢复实现最终一致性,相比于引入分布式事务框架更为简便,学习成本更低,同时也具备了较高的可靠性,虽然是主要描述安防系统中的设计,但也适用于大部分领域的软件系统。其次在大型软件项目中对现有服务不需要改动,实现的成本较低,尤其在系统集成项目及需要利旧的软件项目中具备实用价值。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (7)
1.一种保持安防软件系统中数据和状态一致性的方法,所述安防软件系统包括网关、业务服务、设备接入服务和安防设备,所述保持安防软件系统中数据和状态一致性的方法用于保持业务服务和设备接入服务两者的数据和状态一致,其特征在于,所述保持安防软件系统中数据和状态一致性的方法,包括:
在设备接入服务针对安防设备执行操作但因网络异常无法向业务服务返回操作结果时,业务服务定时向设备接入服务以同样的参数重新发起设备操作请求,直至接收到设备接入服务基于幂等性返回的操作结果并本地保存;
在设备接入服务出现异常崩溃退出时,业务服务在设备接入服务重启后根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,接收设备接入服务返回的操作结果并本地保存。
2.如权利要求1所述的保持安防软件系统中数据和状态一致性的方法,其特征在于,所述业务服务在本地保存设备接入服务的状态;
业务服务启动时将设备接入服务的状态置为离线;
业务服务接收设备接入服务启动时发起的注册并将本地保存的设备接入服务的状态置为在线;
业务服务定时向设备接入服务发起心跳,根据设备接入服务返回的心跳响应保持设备接入服务的状态为在线。
3.如权利要求1所述的保持安防软件系统中数据和状态一致性的方法,其特征在于,所述业务服务定时向设备接入服务以同样的参数重新发起设备操作请求,包括:
业务服务向设备接入服务发起设备操作请求后超时未接收到设备接入服务返回的操作结果时,将该设备操作请求相关的异常数据记录到本地数据库中;
业务服务定时查询本地数据库的异常数据,根据异常数据以同样的参数重新发起设备操作请求。
4.如权利要求1所述的保持安防软件系统中数据和状态一致性的方法,其特征在于,所述业务服务在设备接入服务重启后根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,包括:
业务服务连续多次未接收到设备接入服务返回的心跳响应后修改设备接入服务的状态为离线;
业务服务接收设备接入服务重启后发起的注册并将本地保存的设备接入服务的状态置为在线;
业务服务定时向设备接入服务发起心跳,根据设备接入服务返回的心跳响应保持设备接入服务的状态为在线;
业务服务根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求。
5.如权利要求4所述的保持安防软件系统中数据和状态一致性的方法,其特征在于,所述设备操作请求包括添加设备请求和删除设备请求;
若所述设备操作请求为添加设备请求,则业务服务根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,包括:业务服务根据设备接入服务崩溃退出前接入的所有安防设备重新发起添加设备请求;
若所述设备操作请求为删除设备请求,则业务服务根据设备接入服务崩溃退出前执行的操作重新发起设备操作请求,包括:业务服务根据设备接入服务崩溃退出前需要删除的安防设备重新向设备接入服务发起删除设备请求,并根据设备接入服务奔溃退出前接入的除需要删除的安防设备之外的安防设备重新发起添加设备请求。
6.如权利要求1所述的保持安防软件系统中数据和状态一致性的方法,其特征在于,所述设备接入服务不具备幂等性时,则设备接入服务执行幂等性模拟操作,所述幂等性模拟操作包括:
若设备接入服务收到的设备操作请求为添加设备请求,则将针对请求返回的成功结果和针对请求返回的设备已存在的错误结果进行合并处理;
若设备接入服务收到的设备操作请求为删除设备请求,则将针对请求返回的成功结果和针对请求返回的设备不存在的错误结果进行合并处理。
7.如权利要求1所述的保持安防软件系统中数据和状态一致性的方法,其特征在于,所述业务服务不支持注册和心跳机制时,则业务服务执行注册心跳模拟操作,所述注册心跳模拟操作包括:
业务服务从设备接入服务提供的接口中选择一个查询类接口作为模拟接口;
当业务服务启动时将设备接入服务的状态置为离线;
若业务服务首次调用模拟接口成功则认为设备接入服务注册成功并更新本地保存的设备接入服务的状态为在线;
若业务服务连续调用模拟接口成功则认为接收到设备接入服务返回的心跳响应并保持设备接入服务的状态为在线;
若业务服务连续调用模拟接口失败则认为心跳失败更新设备接入服务的状态为离线。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210194034.3A CN114666250A (zh) | 2022-03-01 | 2022-03-01 | 一种保持安防软件系统中数据和状态一致性的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210194034.3A CN114666250A (zh) | 2022-03-01 | 2022-03-01 | 一种保持安防软件系统中数据和状态一致性的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114666250A true CN114666250A (zh) | 2022-06-24 |
Family
ID=82027460
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210194034.3A Pending CN114666250A (zh) | 2022-03-01 | 2022-03-01 | 一种保持安防软件系统中数据和状态一致性的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114666250A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108874587A (zh) * | 2018-06-06 | 2018-11-23 | 亚信科技(中国)有限公司 | 一种事务的最终一致性保障方法及系统 |
CN110460627A (zh) * | 2018-05-07 | 2019-11-15 | 珠海格力电器股份有限公司 | 一种安防实现方法、安防设备及app客户端 |
US20210263779A1 (en) * | 2018-11-08 | 2021-08-26 | Intel Corporation | Function as a service (faas) system enhancements |
CN113656473A (zh) * | 2021-07-30 | 2021-11-16 | 平安消费金融有限公司 | 接口访问方法、装置、设备及介质 |
CN113986501A (zh) * | 2021-10-28 | 2022-01-28 | 西安热工研究院有限公司 | 实时数据库api无中断调用方法、系统、存储介质及服务器 |
-
2022
- 2022-03-01 CN CN202210194034.3A patent/CN114666250A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110460627A (zh) * | 2018-05-07 | 2019-11-15 | 珠海格力电器股份有限公司 | 一种安防实现方法、安防设备及app客户端 |
CN108874587A (zh) * | 2018-06-06 | 2018-11-23 | 亚信科技(中国)有限公司 | 一种事务的最终一致性保障方法及系统 |
US20210263779A1 (en) * | 2018-11-08 | 2021-08-26 | Intel Corporation | Function as a service (faas) system enhancements |
CN113656473A (zh) * | 2021-07-30 | 2021-11-16 | 平安消费金融有限公司 | 接口访问方法、装置、设备及介质 |
CN113986501A (zh) * | 2021-10-28 | 2022-01-28 | 西安热工研究院有限公司 | 实时数据库api无中断调用方法、系统、存储介质及服务器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6438563B1 (en) | Method and device for synchronizing databases in a network management system | |
JP5075736B2 (ja) | 仮想サーバのシステム障害回復方法及びそのシステム | |
US7428657B2 (en) | Method for rolling back from snapshot with log | |
CN106598992B (zh) | 数据库的操作方法及装置 | |
CN112506702B (zh) | 数据中心容灾方法、装置、设备及存储介质 | |
US8504873B1 (en) | Method and apparatus for providing in-memory checkpoint services within a distributed transaction | |
JPH06168169A (ja) | ログフォースなしに仮定コミットを持つ2相コミットプロトコルを使用する分散トランザクション処理 | |
CN111901176B (zh) | 故障确定方法、装置、设备及存储介质 | |
CN111752488B (zh) | 存储集群的管理方法、装置、管理节点及存储介质 | |
CN112513832A (zh) | 一种数据的存储方法及设备 | |
CN111342986B (zh) | 分布式节点管理方法及装置、分布式系统、存储介质 | |
US9612921B2 (en) | Method and system for load balancing a distributed database providing object-level management and recovery | |
CN114356711A (zh) | 数据库故障自愈方法、系统及相关装置 | |
CN113765690A (zh) | 集群切换方法、系统、装置、终端、服务器及存储介质 | |
CN111897626A (zh) | 一种面向云计算场景的虚拟机高可靠系统和实现方法 | |
CN114666250A (zh) | 一种保持安防软件系统中数据和状态一致性的方法 | |
JP5480046B2 (ja) | 分散トランザクション処理システム、装置、方法およびプログラム | |
CN113703669B (zh) | 一种缓存分区的管理方法、系统、设备及存储介质 | |
CN115766715A (zh) | 一种高可用的超融合集群监控方法和系统 | |
JP5515286B2 (ja) | 分散トランザクション処理システム、サーバ装置及びそれらに用いる分散トランザクションの障害復旧方法 | |
JP5466740B2 (ja) | 仮想サーバのシステム障害回復方法及びそのシステム | |
CN115617917B (zh) | 一种数据库集群多活控制的方法、装置、系统和设备 | |
JPH11288408A (ja) | 分散処理システムおよび障害解析情報の保存方法 | |
CN115185921B (zh) | 数据库故障止损方法、装置、电子设备、介质及程序产品 | |
CN117215745A (zh) | 分布式系统的任务控制方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |