CN103678163B - 数据流的切换方法、装置及*** - Google Patents
数据流的切换方法、装置及*** Download PDFInfo
- Publication number
- CN103678163B CN103678163B CN201210346656.XA CN201210346656A CN103678163B CN 103678163 B CN103678163 B CN 103678163B CN 201210346656 A CN201210346656 A CN 201210346656A CN 103678163 B CN103678163 B CN 103678163B
- Authority
- CN
- China
- Prior art keywords
- write request
- external write
- new
- request
- equipment
- 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.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据流的切换方法、装置及***。其中,该方法包括:在触发任意一个或多个新设备进入切换状态之后,新设备访问主设备的缓存区;读取主设备的缓存区中保存的外部写入请求,其中,外部写入请求由主设备接收,并将外部写入请求保存至主设备的缓存区;新设备根据外部写入请求更新本地***数据。通过本申请,能够实现异构***数据流的切换的过程简单且无需中断外部写入请求,同时保证***的更新数据不丢失。
Description
技术领域
本申请涉及计算机互联网领域,具体而言,涉及一种数据流的切换方法、装置及***。
背景技术
随着互联网***中用户数量的递增,以及各个设备之间交互的数据量的不断增大,用于进行数据处理的旧设备的***无法满足日益增长的处理需求,针对上述问题现有技术可以采用进行扩容、迁移或者***重构的方式进行解决,上述几种解决方案都需要进行数据迁移和服务切换。对于同构***的数据迁移和服务切换,目前通用的方案是先将旧设备的***停止外部写入请求,然后将需要迁移的数据复制到新设备的***中,再将外部写入请求引导到新设备的***。这种方案的优点在于简单且数据一致性很容易保证,但它的缺点在于需要中断对外写入请求。
另外,对于一些写入请求是覆盖式写入的设备***来说,可以实现不中断外部写入请求。具体的,这种覆盖式写入的方案中,当旧设备的***停止写入服务时,将外部写入请求记录到二进制日志文件,在完成数据复制后,将二进制日志文件和外部请求包一并处理,当二进制文件处理完成后,***的写入服务切换也完成。这种方案具有它的特殊性,如果***不是以覆盖式写入请求为主要来源,那么就需要处理复杂的数据时序性问题,大大提高***切换的复杂度。
上述两种方案都是应用于同构***中的数据迁移和服务切换,但对于异构***来说,由于不同设备***之间存在着差异,例如:数据存储的方式不同、对外提供的写入接口不同、操作数据的方式不同等。由此可知,上述应用在同构***的两种方案,方案一并不适用于异构***,而方案二而过程复杂且具有局限性。因此,异构***进行服务切换时,往往需要处理比同构***更为复杂的逻辑。
图1是根据相关现有技术的数据流的切换***的结构示意图。具体的,上述图1所示的异构设备***之间实现数据流的切换的实施例中,假设旧设备上的***为***A,新设备中的***为***B。下面就结合图1对该方案所实现的异构***之间数据流的切换进行详细描述如下:
图1所示的实施例通过双写控制方案来实现,双写控制方案是通过将外部写入请求归拢到双写层***,通过双写层进行写入请求的流向控制,即先写***A后写***B,还是先写***B后写***A。同时,通过指定特定条件,可以使到双写层支持部分写入请求先往***A,而部分写入请求先往***B。采用双写控制方案进行数据流的切换的过程如下:
步骤a,***进行写入请求切换,将原始写入请求由***A转到双写层,具体的如图1所示,外部写入请求在切换后,从“写请求切换1虚线”变为“写请求切换2虚线”。
步骤b,双写层控制每个写入请求,按***自设条件确定是将写入请求先发往***A还是***B。
步骤c,双写层往***A(或B)发送写请求后等待***A(或B)回包。
步骤d,双写层得到***A(或B)回包后,确认写入正常情况下,往另一个***B(或A)发送写请求包。
步骤e,双写层得到另一个***的回包,处理结束。
步骤f,当所有的写请求经双写层转往新***后,再将原始写入请求由双写层转到***B,具体的如图1所示,写请求在切换后,从“写请求切换2虚线”变为“写请求切换3虚线”。
上述图1所示的实施例存在如下问题:由于在进行***切换的过程中,需要消耗人力资源开发双写层***,同时对外接口服务需要在双写层和新旧***之间来回切换,因此存在开发量大,接口切换过程复杂的问题;另外,虽然双写控制能够支持高精度的写入流向控制,但是这是以牺牲程序代码的复杂度为前提的,因此上述方案代码复杂度高,不易研发人员维护;而且,由于在进行***切换过程中,一旦通过双写层将请求转给新***后,新***很难再进行***的发布更新,因为***的更新将会导致***瞬间的不可用,虽然时间很短暂,但是也会造成新旧数据的不一致,因此,上述方案也存在数据更新过程中丢失数据的问题;同时,由于双写层是一个单独的控制层,在完成设备***之间的切换之后,双写层会在***切换完后失去作用,从而浪费了***资源。
由上述分析可知,目前针对相关技术实现异构***的数据流的切换过程复杂,切换时需要中断对外写入请求,且容易丢失数据的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术的实现异构***的数据流的切换过程复杂,切换时需要中断对外写入请求,且容易丢失数据的问题,目前尚未提出有效的解决方案,为此,本申请的主要目的在于提供一种数据流的切换方法、装置及***,以解决上述问题。
为了实现上述目的,根据本申请的一个方面,提供了一种数据流的切换方法,该方法包括:在触发任意一个或多个新设备进入切换状态之后,新设备访问主设备的缓存区;读取主设备的缓存区中保存的外部写入请求,其中,外部写入请求由主设备接收,并将外部写入请求保存至主设备的缓存区;新设备根据外部写入请求更新本地***数据。
进一步地,在将外部写入请求保存至主设备的缓存区之前,方法还包括:提取外部写入请求中的一个或多个数据;对数据进行修改,并根据修改后的数据来更新外部写入请求。
进一步地,在新设备根据外部写入请求更新本地***数据之后,方法还包括:新设备将外部写入请求同步至主设备;主设备检测同步的外部写入请求是否为有效请求,其中,在检测到外部写入请求中的数据设有发生修改的情况下,确定外部写入请求为有效请求,主设备根据该有效请求更新本地***数据;在检测到外部写入请求中的数据发生修改的情况下,确定外部写入请求为无效请求,主设备丢弃该外部写入请求。
进一步地,在新设备根据外部写入请求更新本地***数据之后,方法还包括:新设备接收新的外部写入请求,并根据新的外部写入请求更新本地***数据;新设备将新的外部写入请求同步至主设备;主设备在检测到新的外部写入请求为有效请求之后,根据新的外部写入请求更新本地***数据。
进一步地,在新设备根据外部写入请求更新本地***数据之前,方法还包括:主设备接收到中止命令,以使得缓存区处于禁止读取状态;在新设备检测到缓存区为禁止读取状态的情况下,停止更新本地***数据。
为了实现上述目的,根据本申请的另一方面,提供了一种数据流的切换装置,该装置包括:访问装置,用于在触发任意一个或多个新设备进入切换状态之后,访问主设备的缓存区;读取装置,与访问装置建立连接,用于读取主设备的缓存区所保存的外部写入请求,其中,外部写入请求由主设备接收,并将外部写入请求保存至主设备的缓存区;更新装置,与读取装置建立连接,用于根据外部写入请求更新本地***数据。
进一步地,装置还包括:处理装置,用于接收新的外部写入请求,并根据新的外部写入请求更新本地***数据;同步装置,与处理装置建立连接,用于将新的外部写入请求同步至主设备,以使得主设备在检测到新的外部写入请求为有效请求之后,根据新的外部写入请求更新本地***数据。
为了实现上述目的,根据本申请的另一方面,提供了一种数据流的切换***,该***包括:主设备,用于接收外部写入请求,并将外部写入请求保存至主设备的缓存区;一个或多个新设备,分别与主设备建立通讯关系,用于在触发任意一个或多个新设备进入切换状态之后,新设备访问主设备的缓存区,以读取主设备的缓存区中保存的外部写入请求,并根据外部写入请求更新本地***数据;其中,外部写入请求由主设备接收,并将外部写入请求保存至主设备的缓存区。
进一步地,主设备包括:处理器,用于提取外部写入请求中的一个或多个数据,在对数据进行修改之后,根据修改后的数据来更新外部写入请求。
进一步地,主设备还用于检测由新设备同步的外部写入请求是否为有效请求,其中,在检测到外部写入请求中的数据没有发生修改的情况下,确定外部写入请求为有效请求,主设备根据该有效请求更新本地***数据;在外部写入请求中的数据发生修改的情况下,确定外部写入请求为无效请求,主设备丢弃该外部写入请求。
通过本申请,采用在触发任意一个或多个新设备进入切换状态之后,新设备访问主设备的缓存区;读取主设备的缓存区中保存的外部写入请求,其中,外部写入请求由主设备接收,并将外部写入请求保存至主设备的缓存区;新设备根据外部写入请求更新本地***数据。上述实施例通过实现主设备在接收到外部写入请求之后,首先在主设备的***中划分出一个缓存区来保存接收到的外部写入请求,当写入请求的操作需要从主设备切换到新设备时,即在触发任意一个或多个新设备进行切换状态之后,不需要额外开发双写层来进行外部写入请求路由的控制,此时进入切换状态的新设备仅需要访问主设备的缓存区,在从主设备的缓存区读取已经保存的外部写入请求之后,可以根据读取到的外部写入请求来完成更新本地的***数据,即实现了数据流从主设备切换到新设备的过程。由于上述方案中,新设备实现切换功能实质是访问缓存区的过程,因此,不需要中断外部写入请求的服务,而且由于上述新设备在读取到外部写入请求之后,外部写入请求自动执行获取到请求的设备***进行本地数据的更新,不会导致***瞬间不可用,从而避免了更新数据丢失的现象。由此可知,本申请解决了相关现有技术的实现异构***的数据流的切换过程复杂,切换时需要中断对外写入请求,且容易丢失数据的问题,进而可以实现异构***数据流的切换的过程简单且无需中断外部写入请求,同时保证***的更新数据不丢失的效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据相关现有技术的数据流的切换***的结构示意图;
图2是根据本申请实施例一的数据流的切换***的结构示意图;
图3是根据本申请实施例二的数据流的切换***的具体结构示意图;
图4是根据本申请实施例三的数据流的切换方法的流程图;以及
图5是根据本申请实施例四的数据流的切换装置的结构示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
本申请通过图2提供了一个用于示例计算机体系结构的示意图。出于描述的目的,所绘的体系结构仅为合适环境的一个示例,并非对本申请的使用范围或功能提出任何局限。也不应将该计算***解释为对图2所示的任一组件或其组合具有任何依赖或需求。
实施例一:
在其最基本的配置中,图2是根据本申请实施例一的数据流的切换***的结构示意图。如图2所示,该数据流的切换***包括:主设备以及一个或多个新设备,其中,主设备用于接收外部写入请求,并将外部写入请求保存至主设备的缓存区;一个或多个新设备分别与主设备建立通讯关系,用于在触发任意一个或多个新设备进入切换状态之后,新设备访问主设备的缓存区,以读取主设备的缓存区中保存的外部写入请求,并根据外部写入请求更新本地***数据;其中,外部写入请求由主设备接收,并将外部写入请求保存至主设备的缓存区。
本申请上述实施例中的主设备在接收到外部写入请求之后,通过在主设备的***中划分出一个缓存区来保存接收到的外部写入请求,当写入请求的操作需要从主设备切换到新设备时,即在触发任意一个或多个新设备进行切换状态之后,不需要额外开发双写层来进行外部写入请求路由的控制,此时进入切换状态的新设备仅需要访问主设备的缓存区,在从缓存区中读取保存的外部写入请求之后,根据读取到的外部写入请求来完成更新本地的***数据,即实现了数据流从主设备切换到新设备的过程。由于上述方案中,新设备实现切换功能实质是访问缓存区的过程,因此,不需要中断外部写入请求的服务,而且由于上述新设备在读取到外部写入请求之后,外部写入请求自动执行获取到请求的设备***进行本地数据的更新,不会导致***瞬间不可用,从而避免了更新数据丢失的现象。由上述分析可知,本申请实施例一所提供的方案实现异构***数据流的切换的过程简单易实现,且支持在进行***切换过程中无需中断外部写入请求,同时在进行***数据更新时不会造成数据不一致,保证了***更新数据不丢失。另外,上述实施例一实现的对外写入请求的服务切换只有一次,实现过程简单。
尤其的,本申请上述实施例一多应用于计算机互联网领域中的海量数据服务和网络数据通信处理,具有明显效果。例如,当上述方案应用于处理微博上所有用户的数据的过程中,随着微博注册用户的数量增加,以及每个用户进行数据操作所占用的资源的增加,用于承载上述处理数据的主设备***会由于硬件或者软件资源的有限,需要将外部写入请求的操作切换到其他新设备(例如备份设备)来完成,为了保证切换数据流的过程中无需中断外部写入请求,并保证更新数据不丢失,实施例一所提供的方案可以实现在触发新设备替换主设备的操作之后,新设备通过读取主设备上缓存的外部写入请求,从而根据读取到的外部写入请求来完成更新本地的***数据,上述过程完成的是一个读取过程,而且***可以在这个过程中完成自身固有的操作,因此用于处理微博数据的各个设备之间的切换过程无需中断外部写入请求,并保持了微博信息数据的一致性和流畅性。
由上可知,本申请上述实施例一所提供的方案实现了主***的写入请求可以切换到多个不同的新***的架构,每个新***之间彼此独立,优选地,主***可以通过划分不同的缓存区来实现为每个新***提供不同的外部写入请求,即实现不同的新***可以通过选择访问主设备上不同的缓存区来获取不同的外部访问请求,而切换得到不同的数据流。上述过程中,在新***完成读取主***的缓存区保存的外部访问请求之后,可以释放该缓存区以节省主设备资源,在缓存区被释放之前,需要保证每个缓存区中的外部写入请求已经被对应的新设备成功读取。另外,实施例一中主***也可以仅提供一个缓存区,即每个新***需要执行的外部访问请求相同,而且只有在主***中的外部访问请求被每个新设备***都成功读取之后,主***才会释放该缓存区,以保证数据切换的成功率。
进一步地,在上述实施例一中,主设备可以包括:处理器,用于提取外部写入请求中的一个或多个数据,在对数据进行修改之后,根据修改后的数据来更新外部写入请求。主设备还用于检测由新设备同步的外部写入请求是否为有效请求,其中,在检测到外部写入请求中的数据没有发生修改的情况下,确定外部写入请求为有效请求,主设备根据该有效请求更新本地***数据;在外部写入请求中的数据发生修改的情况下,确定外部写入请求为无效请求,主设备丢弃该外部写入请求。具体的,上述实施例中的数据包括参数、字段。
实施例二:
具体的,本申请可以根据图3所示的实施例二来对图1所示的实施例一进行详细描述,图3所示的实施例提供了一种一个主设备的***和一个新设备的***之间实现数据流的切换的***方案。
图3所示的实施例二中,可以令主设备的***为主***A,令新设备的***为新***B,该实施例二进行主设备和新设备之间的***切换时,主设备中的主***A接收到外部发送的外部写入请求,主***A处理该外部写入请求,并且将该外部写入请求的数据缓存在本地的一个缓存区里,当触发新***B接入主***A来执行外部写入请求的切换时,新***B直接从主***A的缓存区中读取外部写入请求的数据。
优选地,上述实施例二中,外部写入请求的数据流向可以实现从主***A切换到新***B,也可以从新***B切换到主***A,或者在两个***之前交叉回环。这种回环保证当主***A作为对外写入请求服务的主写入设备端时,新***B同样可以更新数据,而当新***B作为对外写入请求服务的主写入设备端时,主***A也可以得到同步的写请求。
上述实施例二中,这种回环式的数据流方式在保证主***和新***都可以得到同一份外部写入请求的情况下,由于外部写入请求的同一性,因此存在导致一个外部写请求会无限次的循环在两个设备的***之中,从而执行重复的写操作。为了避免上述问题,本申请实现在主设备的主***A将接收到的外部写入请求保存至缓存区之前,可以通过处理器对主设备***A接收到的外部写入请求的参数进行修改,在新设备的新***B访问主***A,读取已经修改后的外部写入请求,并处理完该请求之后,按照回环的规则同步给主***A,此时修改后的外部写入请求为一个无效请求,当主***A检测到该无效请求之后,将丢弃该外部写入请求。
由上可知,本申请实施例二的数据流的切换过程可以包括如下两种实施方式:
第一种以主设备的主***A为外部写入请求的主服务端,此时进行外部写入请求服务切换的过程具体如下:
首先,主***A接收外部写入请求,并更新自身***数据,并将该外部写入请求(或者经过修改转换后)写到入缓存区。
然后,新设备访问主设备,新***B从主设备的缓存区内读取外部写入请求的数据,并根据读取到的外部写入请求来更新新***A的本地数据,同时可以将该外部写操作请求同步给外部的主***A。
最后,主***A接收新***B同步来的外部写入请求,此时,主***检测并判断同步到的外部写入请起是否为无效请求(如果该外部写入请求发生了修改则确定为无效请求),如果命中无效请求,则拒绝并丢弃;否则接收该外部写入请求,并根据该请求更新自身***数据,但不写入缓存区。
第二种以新***B为外部写入请求的主服务端(前提是此时新***B独立接收到新的外部写入请求,该请求与访问主***A的缓存区读取到的外部写入请求不同),此时进行外部写入请求服务切换的过程具体如下:
首先,新***B接收到一个新的外部写入请求,并根据该新的外部写入请求来更新自身***数据,同时将该写操作请求同步给外部的主***A。
然后,主***A接收新***B同步的新的外部写入请求,此时,主***A开始检测并判断新***B同步的外部写入请求是否为无效请求(如果该外部写入请求发生了修改则确定为无效请求),如果命令无效请求,则拒绝并丢弃;否则接收该请求,进行后续的下步操作。
最后,主***A接收该确定为有效请求的外部写入请求,并根据该有效请求更新主***A自身的***数据。
由上述两种切换方式可以确定,本申请实施例二中主设备的***A接收到的外部写入请求包的来源可以包括两处:直接接收到外部传输的外部写入请求和回环时新***B同步的外部写入请求,本申请对上述两种请求进行区分,从而使得主***A可以实现确定外部写入请求的实际来源,主***A仅处理有效的请求,避免了重复处理同一个外部写入请求,具体的,本申请可以通过修改外部写入请求包中的参数来实现区分过程,即在主***A将接收到的外部写入请求保存至缓存区之前,修改外部写入请求包中的一个或多个数据(例如参数或字段)。例如,作为主写端的主***A收到该外部写入请求V并处理后,将其修改为VA,再将这个数据包缓存在缓存区内等待发往新***B,新***B在收到并处理完这个请求包后,按照回环的规则同步给主***A,此时,主***A在接收到该请求包并检测到该外部写入请求中的数据(例如参数或字段)发生了变化,外部写入请求V变为VA后,即认为该外部写入请求VA为无效请求,并丢弃该请求包。从而保证了一个写入请求不会构成无限次循环。
通过上述图3中实施例二的描述,同理的,图2所示的实施例一中的主设备与多个新设备进行数据流转换的过程中同样可以通过修改外部写入请求的参数,来实现了避免一个外部写入请求的无限次循环。
优选地,本申请上述实施例一和二中的主设备***中的缓存区可以是可控的,即主设备的处理器可以实现控制缓存区的打开或者关闭。例如,在实施例二中,当新***B需要进行更新发布时,可以关闭缓存区来截断数据往新***B的流向,同时又保证数据不会被丢弃,在新***B更新完成后,重新打开缓存区接受数据,两个***又能保持数据一致。这种实现开关式的流量控制,新***可以无限制进行更新操作而不会存在同步数据不一致的缺陷。
本申请的原理可以使用其它通用或专用计算或通信环境或配置来操作。适用于本申请的众所周知的计算***、环境和配置的示例包括但不限于,个人计算机、服务器,多处理器***、基于微处理的***、小型机、大型计算机、以及包括任一上述***或设备的分布式计算环境。
实施例三:
图4是根据本申请实施例三的数据流的切换方法的流程图,如图4所示该方法包括如下步骤:
步骤S10,在触发任意一个或多个新设备进入切换状态之后,新设备访问主设备的缓存区。
步骤S30,读取主设备的缓存区中保存的外部写入请求,其中,外部写入请求由主设备接收,并将外部写入请求保存至主设备的缓存区。
步骤S50,新设备根据外部写入请求更新本地***数据。
本申请上述实施例三所提供的方案中,主设备在接收到外部写入请求之后,会首先在主设备的***中划分出一个缓存区来保存接收到的外部写入请求,当写入请求的操作需要从主设备切换到新设备时,即在触发任意一个或多个新设备进行切换状态之后,不需要额外开发双写层来进行外部写入请求路由的控制,此时进入切换状态的新设备仅需要访问主设备的缓存区,在从主设备的缓存区读取已经保存的外部写入请求之后,可以根据读取到的外部写入请求来完成更新本地的***数据,即实现了数据流从主设备切换到新设备的过程。由于上述方案中,新设备实现切换功能实质是访问缓存区的过程,因此,不需要中断外部写入请求的服务,而且由于上述新设备在读取到外部写入请求之后,外部写入请求自动执行获取到请求的设备***进行本地数据的更新,不会导致***瞬间不可用,从而避免了更新数据丢失的现象。通过上述分析可知,本申请实施例三所提供的方案实现异构***数据流的切换的过程简单易实现,且支持在进行***切换过程中无需中断外部写入请求,同时在进行***数据更新时不会造成数据不一致,保证了***更新数据不丢失。
优选地,本申请上述实施例三中的主***可以通过划分不同的缓存区来实现为每个新***提供不同的外部写入请求,即实现不同的新***可以通过选择访问主设备上不同的缓存区来获取不同的外部访问请求,而切换得到不同的数据流。上述过程中,在新***完成读取主***的缓存区保存的外部访问请求之后,可以释放该缓存区以节省主设备资源,在缓存区被释放之前,需要保证每个缓存区中的外部写入请求已经被对应的新设备成功读取。同样的,实施例一中主***也可以仅提供一个缓存区,即每个新***需要执行的外部访问请求相同,而且只有在主***中的外部访问请求被每个新设备***都成功读取之后,主***才会释放该缓存区,以保证数据切换的成功率。
本申请上述实施例三中,在实施步骤S30中的将外部写入请求保存至主设备的缓存区之前,方法还可以包括如下步骤:
步骤S301,主***可以通过处理器来提取外部写入请求中的一个或多个数据。
步骤S302,上述处理器可以对数据进行修改,并根据修改后的数据来更新外部写入请求。
具体的,由于外部写入请求的数据流向可以实现从主设备***切换到新设备***,也可以从新设备***切换到主设备***,或者在两个***之前交叉回环。这种回环式的数据流方式在保证主设备***和新设备***都可以得到同一份外部写入请求的情况下,由于外部写入请求的同一性,因此可能存在导致一个外部写请求会无限次的循环在两个设备的***之中,从而执行重复的写操作。为了避免上述问题,在本申请上述步骤的具体实施过程中,可以通过步骤S301和步骤S302来实现在主设备的主***将接收到的外部写入请求保存至缓存区之前,可以通过处理器对主设备***接收到的外部写入请求的参数进行修改,在新设备的新***访问主***,读取已经修改后的外部写入请求,并处理完该请求之后,如果外部写入请求按照回环的规则同步给主***,此时可以确定该修改后的外部写入请求为一个无效请求。
另外,上述步骤S301和步骤S302中所实现的对写入请求中数据进行修改还可以是对外部写入请求进行加密的操作,从而不仅达到了可以防止外部写入请求构成无限次循环,而且也提高了外部写入请求的安全性。
本申请上述实施例三中,在实施步骤S50中的新设备根据外部写入请求更新本地***数据之后,方法还可以包括如下步骤:
步骤S501,新设备将外部写入请求同步至主设备。具体的,在新设备的***从主设备的缓存区内读取到外部写入请求的数据之后,会根据读取到的外部写入请求来更新新设备***的本地数据,同时可以将该外部写操作请求同步给外部的主设备的***。
步骤S503,主设备检测同步的外部写入请求是否为有效请求,其中,在检测到外部写入请求中的参数没有发生修改的情况下,确定外部写入请求为有效请求,主设备根据该有效请求更新本地***数据;在检测到外部写入请求中的参数发生修改的情况下,确定外部写入请求为无效请求,主设备丢弃该外部写入请求。
具体的,本申请上述步骤S501和步骤S503实现的是在两个设备***之间进行交叉回环式运行的过程中,主设备的***在接收到新设备同步来的外部写入请求之后,需要对外部写入请求进行检测,如果检测到同步来的外部写入请求发生了修改,则确定该请求是一个无效请求,主设备丢弃该无效请求。
由上可知,主设备的***接收到的外部写入请求包的来源可以包括:直接接收到外部传输的外部写入请求和回环时新设备的***同步的外部写入请求,本申请对上述两种请求进行区分,从而使得主设备可以实现确定外部写入请求的实际来源,主设备仅处理有效的请求,避免了重复处理同一个外部写入请求,具体的,本申请可以通过修改外部写入请求包中的参数来实现区分过程,即在主设备的***中将接收到的外部写入请求保存至缓存区之前,修改外部写入请求包中的一个或多个数据(例如参数或字段)。
例如,在以主设备的主***作为外部写入请求的主服务端的情况下,作为主写端的主设备***收到外部写入请求V并处理后,将其修改为VA,再将这个数据包缓存在缓存区内等待发往新设备的***,新设备***在收到并处理完这个请求包后,按照回环的规则同步给主设备的***,此时,主设备的***在接收到该请求包并检测到该外部写入请求的参数(例如字段)发生了变化,外部写入请求V变为VA后,即认为该外部写入请求VA为无效请求,并丢弃该请求包。从而保证了一个外部写入请求不会构成无限次循环。
优选地,本申请上述实施例三中,在步骤S50中的新设备根据外部写入请求更新本地***数据之后,方法还可以执行如下另外一套实施步骤:
步骤S502,新设备接收新的外部写入请求,并根据新的外部写入请求更新本地***数据。
步骤S504,新设备将新的外部写入请求同步至主设备。
步骤S506,主设备在检测到新的外部写入请求为有效请求之后,根据新的外部写入请求更新本地***数据。
具体的,上述实施例三可以结合图3进行描述,在以新设备的***B作为为外部写入请求的主服务端(前提是此时新***B独立接收到一个新的外部写入请求,该请求与访问主***A的缓存区读取到的外部写入请求不同)的情况下,通过步骤S502来实现新设备的***B接收到一个新的外部写入请求,并更新自身***数据,接着通过步骤S504来实现基于回环的原理将该新的外部写操作请求同步给外部主设备的***A。主设备的***A接收新***B同步的外部写入请求,此时,在步骤S506中的实现过程中,主***A开始检测并判断新***B同步的外部写入请求是否为无效请求(如果该外部写入请求数据包中的一个或多个数据发生了修改则确定为无效请求),如果命令无效请求,则拒绝并丢弃;否则接收该请求,进行后续的下步操作。最后,主设备的***A接收该确定为有效请求的外部写入请求,并根据该有效请求更新主设备的***A自身的***数据。
由上述步骤S501以及步骤S503实现的一种实施方式,以及步骤S502至步骤S506实现的另一种实施方式可知,外部写入请求的数据流向可以实现从主设备切换到新设备,也可以从新设备切换到主设备,或者在两个***之前交叉回环。这种回环保证当主设备作为对外写入请求服务的主写入设备端时,新设备同样可以更新数据,而当新设备作为对外写入请求服务的主写入设备端时,主设备也可以得到同步的写请求。
本申请上述各个实施例中,在执行步骤S50新设备根据外部写入请求更新本地***数据之前,方法还可以包括如下步步骤:
步骤S601,主设备接收到中止命令,以使得缓存区处于禁止读取状态。
步骤S602,在新设备检测到缓存区为禁止读取状态的情况下,停止更新本地***数据。
上述步骤S601和步骤S602实现了主设备***中的缓存区可以是可控的,即主设备的处理器可以实现控制缓存区的打开或者关闭。例如,当新设备需要进行更新发布时,可以关闭缓存区来截断数据往新设备***的流向,同时又保证数据不会被丢弃,在新设备***更新完成后,重新打开缓存区接受数据,两个***又能保持数据一致。这种实现开关式的流量控制,新***可以无限制进行更新操作而不会存在同步数据不一致的缺陷。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
优选地,本申请还可以提供一个用于执行上述实施例三的计算机程序以及保存上述计算机程序的载体,即本申请上述实施例可以通过一个合适的计算体系结构来进行符合自然规律的运行过程。另外,尽管在上述上下文中描述本申请,但上述用于实现执行步骤的计算机程序并不意味着是限制性的,所描述的动作和操作的各方面也可用硬件来实现。
本申请的原理可以使用其它通用或专用计算或通信环境或配置来操作。适用于本申请的众所周知的计算***、环境和配置的示例包括但不限于,个人计算机、服务器,多处理器***、基于微处理的***、小型机、大型计算机、以及包括任一上述***或设备的分布式计算环境。
实施例四:
图5是根据本申请实施例四的数据流的切换装置的结构示意图。如图5所示,该数据流的切换装置包括:访问装置102、读取装置104以及更新装置106。
其中,访问装置102,用于在触发任意一个或多个新设备进入切换状态之后,访问主设备的缓存区;读取装置104,与访问装置102建立连接,用于读取主设备的缓存区所保存的外部写入请求,其中,外部写入请求由主设备接收,并将外部写入请求保存至主设备的缓存区;更新装置106,与读取装置104建立连接,用于根据外部写入请求更新本地***数据。
本申请上述实施例四中的数据流的切换装置可以一个独立的计算机服务器(即新设备),在访问装置102执行触发任意一个或多个新设备进行切换状态之后,不需要额外开发双写层来进行外部写入请求路由的控制,此时新设备进入切换状态,仅需要访问主设备的缓存区,在通过读取装置104从缓存区中读取保存的外部写入请求之后,可以通过更新装置106来执行根据读取到的外部写入请求来完成更新本地的***数据,即实现了数据流从主设备切换到新设备的过程。由于上述方案中,新设备实现切换功能实质是访问缓存区的过程,因此,不需要中断外部写入请求的服务,而且由于上述新设备在读取到外部写入请求之后,外部写入请求自动执行获取到请求的设备***进行本地数据的更新,不会导致***瞬间不可用,从而避免了更新数据丢失的现象。由上述分析可知,本申请实施例四所提供的方案实现异构***数据流的切换的过程简单易实现,且支持在进行***切换过程中无需中断外部写入请求,同时在进行***数据更新时不会造成数据不一致,保证了***更新数据不丢失。另外,上述实施例四实现的对外写入请求的服务切换只有一次,实现过程简单。
优选地,本申请上述实施例四所提供的装置还可以包括:处理装置108,用于接收新的外部写入请求,并根据新的外部写入请求更新本地***数据;同步装置110,用于将新的外部写入请求同步至主设备,以使得主设备在检测到新的外部写入请求为有效请求之后,根据新的外部写入请求更新本地***数据。上述实施例中的处理装置和同步装置实现了外部写入请求的数据流向可以实现从新设备切换到主设备的方案。即本申请可以实现在两个***之前交叉回环这种回环保证当主设备作为对外写入请求服务的主写入设备端时,新设备同样可以更新数据,而当新设备作为对外写入请求服务的主写入设备端时,主设备也可以得到同步的写请求。
另外,在具体的实施过程中,上述装置(即新设备)需要与主设备的***建立通信连接,在主设备的***中划分出一个缓存区来保存接收到的外部写入请求,当写入请求的操作需要从主设备切换到新设备时,进一步地,本申请上述主设备中可以提供一个中止装置,用于在新设备检测到缓存区为禁止读取状态的情况下,停止更新本地***数据,其中,在主设备接收到中止命令,以使得缓存区处于禁止读取状态。
从以上的描述中,可以看出,本申请实现了如下技术效果:本申请中的新设备实现切换功能实质是访问缓存区的过程,因此,不需要中断外部写入请求的服务,而且由于上述新设备在读取到外部写入请求之后,外部写入请求自动执行获取到请求的设备***进行本地数据的更新,不会导致***瞬间不可用,从而避免了更新数据丢失的现象。通过上述分析可知,本申请实施例三所提供的方案实现异构***数据流的切换的过程简单易实现,且支持在进行***切换过程中无需中断外部写入请求,同时在进行***数据更新时不会造成数据不一致,保证了***更新数据不丢失。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种数据流的切换方法,其特征在于,包括:
在触发任意一个或多个新设备进入切换状态之后,所述新设备访问主设备的缓存区;
读取所述主设备的缓存区中保存的外部写入请求,其中,所述外部写入请求由所述主设备接收,并将所述外部写入请求保存至所述主设备的缓存区;
所述新设备根据所述外部写入请求更新本地***数据;
其中,在所述新设备根据所述外部写入请求更新所述本地***数据之后,所述方法还包括:所述主设备在接收到所述新设备同步来的所述外部写入请求之后,如果检测到同步来的所述外部写入请求发生了修改,则确定所述外部写入请求为无效请求,所述主设备丢弃所述无效请求。
2.根据权利要求1所述的方法,其特征在于,在将所述外部写入请求保存至所述主设备的缓存区之前,所述方法还包括:
提取所述外部写入请求中的一个或多个数据;
对所述数据进行修改,并根据修改后的数据来更新所述外部写入请求。
3.根据权利要求2所述的方法,其特征在于,在所述新设备根据所述外部写入请求更新本地***数据之后,所述方法还包括:
所述新设备将所述外部写入请求同步至所述主设备;
所述主设备检测同步的所述外部写入请求是否为有效请求,其中,
在检测到所述外部写入请求中的数据没有发生修改的情况下,确定所述外部写入请求为有效请求,所述主设备根据该有效请求更新所述本地***数据;
在检测到所述外部写入请求中的数据发生修改的情况下,确定所述外部写入请求为无效请求,所述主设备丢弃该外部写入请求。
4.根据权利要求1所述的方法,其特征在于,在所述新设备根据所述外部写入请求更新本地***数据之后,所述方法还包括:
所述新设备接收新的外部写入请求,并根据所述新的外部写入请求更新本地***数据;
所述新设备将所述新的外部写入请求同步至所述主设备;
所述主设备在检测到所述新的外部写入请求为有效请求之后,根据所述新的外部写入请求更新本地***数据。
5.根据权利要求1至4中任意一项所述的方法,其特征在于,在所述新设备根据所述外部写入请求更新本地***数据之前,所述方法还包括:
所述主设备接收到中止命令,以使得所述缓存区处于禁止读取状态;
在所述新设备检测到所述缓存区为禁止读取状态的情况下,停止更新本地***数据。
6.一种数据流的切换装置,其特征在于,包括:
访问装置,用于在触发任意一个或多个新设备进入切换状态之后,访问主设备的缓存区;
读取装置,与所述访问装置建立连接,用于读取所述主设备的缓存区所保存的外部写入请求,其中,所述外部写入请求由所述主设备接收,并将所述外部写入请求保存至所述主设备的缓存区;
更新装置,与所述读取装置建立连接,用于根据所述外部写入请求更新本地***数据;
其中,在所述新设备根据所述外部写入请求更新所述本地***数据之后,所述主设备在接收到所述新设备同步来的所述外部写入请求之后,如果检测到同步来的所述外部写入请求发生了修改,则确定所述外部写入请求为无效请求,所述主设备丢弃所述无效请求。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
处理装置,用于接收新的外部写入请求,并根据所述新的外部写入请求更新本地***数据;
同步装置,与所述处理装置建立连接,用于将所述新的外部写入请求同步至所述主设备,以使得所述主设备在检测到所述新的外部写入请求为有效请求之后,根据所述新的外部写入请求更新本地***数据。
8.一种数据流的切换***,其特征在于,包括:
主设备,用于接收外部写入请求,并将所述外部写入请求保存至所述主设备的缓存区;
一个或多个新设备,分别与所述主设备建立通讯关系,用于在触发任意一个或多个新设备进入切换状态之后,所述新设备访问主设备的缓存区,以读取所述主设备的缓存区中保存的外部写入请求,并根据所述外部写入请求更新本地***数据;
其中,所述外部写入请求由所述主设备接收,并将所述外部写入请求保存至所述主设备的缓存区;
其中,在所述新设备根据所述外部写入请求更新所述本地***数据之后,所述主设备在接收到所述新设备同步来的所述外部写入请求之后,如果检测到同步来的所述外部写入请求发生了修改,则确定所述外部写入请求为无效请求,所述主设备丢弃所述无效请求。
9.根据权利要求8所述的***,其特征在于,所述主设备包括:
处理器,用于提取所述外部写入请求中的一个或多个数据,在对所述数据进行修改之后,根据修改后的数据来更新所述外部写入请求。
10.根据权利要求9所述的***,其特征在于,所述主设备还用于检测由所述新设备同步的所述外部写入请求是否为有效请求,其中,在检测到所述外部写入请求中的数据没有发生修改的情况下,确定所述外部写入请求为有效请求,所述主设备根据该有效请求更新所述本地***数据;在所述外部写入请求中的数据发生修改的情况下,确定所述外部写入请求为无效请求,所述主设备丢弃该外部写入请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210346656.XA CN103678163B (zh) | 2012-09-18 | 2012-09-18 | 数据流的切换方法、装置及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210346656.XA CN103678163B (zh) | 2012-09-18 | 2012-09-18 | 数据流的切换方法、装置及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103678163A CN103678163A (zh) | 2014-03-26 |
CN103678163B true CN103678163B (zh) | 2017-11-10 |
Family
ID=50315792
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210346656.XA Active CN103678163B (zh) | 2012-09-18 | 2012-09-18 | 数据流的切换方法、装置及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103678163B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109445992A (zh) * | 2018-11-01 | 2019-03-08 | 郑州云海信息技术有限公司 | 一种双活***数据管理方法及相关装置 |
CN110568995A (zh) * | 2019-08-30 | 2019-12-13 | 珠海格力电器股份有限公司 | 数据迁移方法及*** |
CN111367495B (zh) * | 2020-03-06 | 2023-03-28 | 电子科技大学 | 一种异步先入先出的数据缓存控制器 |
CN112162883A (zh) * | 2020-09-27 | 2021-01-01 | 北京浪潮数据技术有限公司 | 一种副本数据恢复方法、***、电子设备及存储介质 |
CN112783982B (zh) * | 2021-02-07 | 2021-09-10 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、***、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1584859A (zh) * | 2003-08-20 | 2005-02-23 | 松下电器产业株式会社 | 数据传送装置和数据传送方法 |
CN101031889A (zh) * | 2004-08-12 | 2007-09-05 | 意大利电信股份公司 | 通过通信网络更新数据集的***、方法和设备 |
CN101068140A (zh) * | 2007-06-27 | 2007-11-07 | 中兴通讯股份有限公司 | 一种实现主/备pci设备切换的装置和方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100229029A1 (en) * | 2009-03-06 | 2010-09-09 | Frazier Ii Robert Claude | Independent and dynamic checkpointing system and method |
-
2012
- 2012-09-18 CN CN201210346656.XA patent/CN103678163B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1584859A (zh) * | 2003-08-20 | 2005-02-23 | 松下电器产业株式会社 | 数据传送装置和数据传送方法 |
CN101031889A (zh) * | 2004-08-12 | 2007-09-05 | 意大利电信股份公司 | 通过通信网络更新数据集的***、方法和设备 |
CN101068140A (zh) * | 2007-06-27 | 2007-11-07 | 中兴通讯股份有限公司 | 一种实现主/备pci设备切换的装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103678163A (zh) | 2014-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103346981B (zh) | 虚拟交换方法、相关装置和计算机*** | |
CN103678163B (zh) | 数据流的切换方法、装置及*** | |
CN105549904B (zh) | 一种应用于存储***中的数据迁移方法及存储设备 | |
CN107819662B (zh) | 一种应用于云雾计算网络的服务功能链实时迁移方法 | |
CN103020257B (zh) | 数据操作的实现方法和装置 | |
CN104506379B (zh) | 网络数据捕获方法和*** | |
US10686733B2 (en) | System and method for virtual machine address association | |
CN103179053B (zh) | 用于提供数据管理服务的***和方法 | |
CN109831500A (zh) | Kubernetes集群中配置文件与Pod的同步方法 | |
CN113196237A (zh) | 计算***中的容器迁移 | |
WO2018137327A1 (zh) | 一种主备机数据传递方法、控制节点以及数据库*** | |
CN107179878A (zh) | 基于应用优化的数据存储的方法和装置 | |
CN104601680B (zh) | 一种资源管理方法及装置 | |
CN107678835A (zh) | 一种数据传输方法及*** | |
CN106406986A (zh) | 一种资源共享方法及装置 | |
CN105988970B (zh) | 共享存储数据的处理器和芯片 | |
CN106649600B (zh) | 一种迁移文件权限的方法、装置以及*** | |
CN106557444A (zh) | 实现sr-iov网卡的方法和装置、实现动态迁移的方法和装置 | |
CN107958018A (zh) | 缓存中的数据更新方法、装置及计算机可读介质 | |
US20080162754A1 (en) | Storage system, program and method | |
CN107147533A (zh) | 一种基于sdn框架的流表配置下发方法及*** | |
CN106021566A (zh) | 一种提高单台数据库并发处理能力的方法、装置及*** | |
CN104517067B (zh) | 访问数据的方法、装置及*** | |
CN106844012A (zh) | 一种非共享存储动态迁移虚拟机的方法及*** | |
CN103257889B (zh) | 用于混合式架构***的应用程序管理装置及管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20180930 Address after: 100098 Beijing Haidian District Zhichun Road 49 No. 3 West 309 Patentee after: Tencent cloud computing (Beijing) limited liability company Address before: 518000 East 403 room, Sai Ge science and Technology Park, Futian District Zhenxing Road, Shenzhen, Guangdong, China, 2 Patentee before: Tencent Technology (Shenzhen) Co., Ltd. |
|
TR01 | Transfer of patent right |