具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请涉及的技术名词:
对象存储:可以理解为key、value的一种存储结构,是云端的一种存储系统。如果和文件存储系统做类比,对象是文件,对象的key是文件名,对象的value是文件的内容,不过和文件存储系统不同的是,文件有目录和层级结构,而对象存储系统全是扁平化的结构,每个对象都在一个被称作存储桶(bucket)的扁平地址空间的同一级别里,一个对象不会属于另一个对象的下一级;
object:对象存储系统中的对象,可以理解为一个文件;
bucket:对象存储系统中的存储桶,为存储object的容器。同一个bucket下面的object的key不能相同,但不同bucket下面的object的key可以相同,同一个object只能属于唯一的一个bucket;不同的用户可以创建不同的bucket,每个bucket的名字不同,这样不同的用户的数据就可以区分开来;
http协议:是互联网使用的最广泛的一种协议,有自己的标准,是一个简单的请求-响应协议。http协议由http header和http body组成;
tcp:传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义;
socket:就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制;
句柄(handle):指socket句柄,句柄可以理解为一个数字,该数字是socket的编号,用于标识不同的socket,一个句柄代表了一个socket,不同的socket其句柄值不相同;
oss:对象存储服务(object storage service);
oss server:指云端对象存储服务的程序运行模块;
relay server:指云端中转服务的运行模块,中转模块提供两个节点之间的实时数据中转服务;
SHA1:SHA1是一种密码散列函数,由美国国家安全局设计,主要适用于数字签名标准里面定义的数字签名算法。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,该消息摘要可以用来验证数据的完整性;
数字签名:是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。签名算法使用的是SHA1签名算法,就是利用自己的秘钥和信息通过SHA1算法生成另外一段信息;
uuid:是通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。任何产生的两个uuid都不会重复,具有独一性;
accsess key id:表示登录云端的账号;
access key secret:表示登录云端和账号对应的密码。
实施例1
本申请提供了如图1a所示的数据中转的系统。图1a是根据本发明实施例一的数据中转的系统的示意图。本申请实施例提供的数据中转的系统包括:
云端对象存储子系统12、自定义业务子系统14和至少两个通信节点16,其中,至少两个通信节点16中的第一节点,用于从云端对象存储子系统12中获取重定向地址,通过自定义侧将重定向地址发送至至少两个通信节点16中的第二节点;依据重定向地址获取云端对象存储子系统12创建的数据中转通道,并通过数据中转通道与第二节点进行会话通信;云端对象存储子系统12,分别与第一节点和第二节点连接,用于创建数据中转通道,并在第一节点与第二节点进行会话通信的情况下,通过数据中转通道进行数据传输;自定义业务子系统14,分别与第一节点和第二节点连接,用于将第一节点发送的重定向地址转发至第二节点。
本申请实施例提供的数据中转的系统通过在云端对象存储系统中开发和部署数据中转模块,对象存储系统可以为通信双方提供实时数据流中转服务,满足用户对两个节点之间实时数据通信的需求,即,组成该数据中转的系统可以为:云端对象存储子系统12、自定义业务子系统14和至少两个通信节点16,至少两个通信节点16可以互为发送节点和接收节点的节点,在本申请实施例中以两个节点为例,在本申请实施例中云端对象存储子系统12为第一节点和第二节点配置用于通信的中转地址、端口、通信加解密方式、通道和通信协议等参数,第一节点从云端对象存储子系统12中获取参数后,作为发送节点的第一节点通过自定义业务子系统14将参数发送至第二节点,以使得第二节点根据该参数与云端对象存储子系统12确定后续通信时所需的通信参数,最终,由云端对象存储子系统12作为中转站,为第一节点和第二节点提供实时通信中转业务,满足两个节点之间的实时双向通信的需求。
具体的,第一节点向云端对象存储子系统12获取重定向地址,并将该重定向地址通过自定义云端对象存储子系统12将重定向地址发送至第二节点,以使得第一节点和第二节点根据该重定向地址获取云端对象存储子系统12创建的数据中转通道进行实时数据传输,即,实时双向通信。
本申请实施例提供的数据中转的系统中两个通信节点利用中转服务可以创建一对一的类似于tcp的双向数据传输通道,双方通信的协议支持由用户自定义。该通用的中转服务真正实现了通用性和业务无关性,非常方便用户利用这种中转服务开发自己的产品。
可选的,云端对象存储子系统12包括:对象存储服务端和中转服务端,其中,对象存储服务端,用于对第一节点和第二节点进行身份验证,并在身份验证成功后,依据第一节点发送的通道创建请求信息匹配对应的中转服务端,并依据匹配的中转服务端生成重定向地址;中转服务端,用于接收第一节点和第二节点依据重定向地址发送的会话业务请求信息,依据会话业务请求信息创建数据中转通道,并在第一节点与第二节点进行会话通信的情况下,通过数据中转通道进行数据传输。
具体的,在本申请实施例中云端对象存储子系统12包括:对象存储服务端和中转服务端,其中,对象存储服务端可以记作oss server,中转服务端可以记作relay server;
oss server接收第一节点通过指定接口发送的创建数据中转通道的通道创建请求信息,其中,该通道创建请求信息中携带有依据云端签名规范计算的签名信息,通过签名信息对第一节点和第二节点进行身份验证,在身份验证成功后,依据第一节点发送的通道创建请求信息匹配对应的relay server,并根据得到的relay server生成重定向地址,以使得第一节点通过自定义业务子系统14将该重定向地址发送至第二节点进行告知,以使得后续第一节点与第二节点之间通过该relay server创建的数据中转通道,进行实时双向数据传输。
综上,本申请实施例提供的数据中转的系统在执行过程中如图1b和2所示,图1b是根据本发明实施例一的数据中转的系统中各端交互的示意图;图2是根据本发明实施例一的数据中转的系统中各端交互的流程示意图。本申请实施例提供的数据中转的系统在交互时具体如下:
以两个节点通过云端对象存储子系统实现实时双向通信为例,两个节点分别记作Peer A和Peer B,具体如下:
Step1:Peer A向云端对象存储子系统发送通道创建请求;
其中,Peer A调用云端对象存储子系统向外提供CreateRelayChannel的api接口,向云端对象存储子系统申请创建中转传输通道,在本申请实施例中,通道创建请求信息可以为http协议请求,http协议请求头可以如下:PUT/?CreateRelayChannel;
http协议请求里面必须带上按照云端签名规范计算的签名信息。其中,签名信息里面包含accsess key id信息以及用accsess key secret进行数字签名后的计算结果信息。
Step2:云端对象存储子系统12中的对象存储服务端接收通道创建请求,并在验证该通道创建请求是否合法后,根据判断结果返回对应消息;
其中,云端(OSS server对象存储服务器,object Storage Service)收到请求后,首先校验http协议请求里面的签名信息,验证Peer A的云端账号和密码是否合法,如果非法,直接返回http错误码405消息;如果验证通过,则云端处理步骤如下:
1),按照负载均衡策略选取一台relay server(即本申请实施例中的中转服务端),其ip地址举例为120.79.128.100
2),生成一个uuid(通用唯一识别码Universally Unique Identifier),比如为12913F18CA,该uuid是中转传输通道的编号
3),生成消息过期时间,如果是一分钟后超时,则取云端当前时间的后一分钟时刻,比如为2020-10-01T14:32:19Z,表示云端系统时间超过了2020-10-01T14:32:19Z,则认为消息为超时消息,云端会返回错误。
4),根据uuid和超时时间生成一个token(令牌)信息,token的生成规则为base64(对称加密(uuid=uuid值&expire=超时时间)),既先对uuid和expire两个字段利用云端自己的access key secret进行对称加密,然后再对加密结果进行base64编码;按照上述举例,先对字符串uuid=12913F18CA&expire=2020-10-01T14:32:19Z进行对称加密,再进行base64编码,假如最终计算结果为字符串JCxoTC0gakaX0e6YkCgP1E6hvo
5)、云端(即,本申请实施例中云端对象存储子系统12中的对象存储服务端)向Peer A返回http重定向状态码301,重定向url(即,本申请实施例中的重定向地址)格式为http://ip地址/?CreateRelayChannel&token=token字符串,根据上述举例,
重定向url地址可以如下:
http://120.79.128.100/?CreateRelayChannel&token= JCxoTC0gakaX0e6YkCgP1E6hvo;
即,向PeerA反馈携带有分配的relay server的IP地址和加密后用于后续实时通信所用的校验Token。其中,该token是以字符串形式出现,并且该字符串保护了uuid和超时时间。
Step3:Peer A通过自定义业务子系统14(记作user service)将重定向url地址(即,本申请实施例中的重定向地址)通知给Peer B;
Step4:Peer A在获取重定向url地址后,依据该重定向url地址向Relay server发起会话业务请求信息;
具体的,Peer A获取到重定向301返回码以及重定向地址后,就知道了relayserver的ip地址,于是和Relay server创建tcp socket连接,并利用该连接向relayserver发送http请求(即,本申请实施例中的会话业务请求信息),http协议请求头举例如下:PUT/?CreateRelayChannel&token=JCxoTC0gakaX0e6YkCgP1E6hvo,http消息里面必须带上按照云端签名规范计算出的签名信息。
Step5:Peer B通过自定义业务子系统14从Peer A获取到重定向url,并依据该重定向url向Relay server发起会话业务请求信息;
具体的,Peer B从Peer A获取到重定向url后,得到了与PeerA获取的相同的Relayserver的ip地址,并和Relay server创建tcp socket连接,并利用该连接向Relay server发送http请求(即,本申请实施例中的会话业务请求信息),http协议请求头举例如下:PUT/?CreateRelayChannel&token=JCxoTC0gakaX0e6YkCgP1E6hvo,http消息里面必须带上按照云端签名规范计算出的签名信息。
Step6和7:是Relay server在接收Peer A和Peer B发送的会话业务请求信息后,建立中转传输通道,并向Peer A和Peer B返回依据中转传输通道生成的会话业务响应信息,以使得Peer A和Peer B从会话业务响应信息中获取Relay server创建的数据中转通道;
具体的,如图3所示,图3是根据本发明实施例一的数据中转的系统中生成会话业务响应信息的示意图。
1)首先验证会话业务请求信息中Peer A和Peer B的客户端的签名,对客户端的云账号和云密码进行验证,如果验证不通过,则认为是非法消息,返回错误,然后关闭tcpsocket连接。
2)解析会话业务请求信息中Peer A和Peer B的客户端传过来的token参数,首先base64解码,然后再用Relay server的access key secret进行解密,如果解密失败则认为是非法消息,返回错误,然后关闭socket连接。
3)如果第2)步解密成功,则获得了会话业务请求信息中uuid和expire(超时时间)值;uuid值可以理解为传输通道的编号,如果expire比当前时间要早,则说明该消息已经过期了;如果是过期消息,则返回错误,关闭tcp socket连接。
4)再判断是否本机上已经存在了两个tcp连接,它们关联的uuid和本次解析会话业务请求信息中的uuid是否相同;如果已经存在了两个,说明已经有两个客户端使用了该uuid创建了中转传输通道,由于中转传输通道是一对一的,不能一对多,一个uuid最多只能关联到两个tcp句柄,所以需要返回失败。
5)Relay server将uuid和tcp句柄关联起来,一直要等待到有两个tcp句柄关联到该uuid。这里Relay server还可以设置一个超时时间,比如最多只等待2分钟,如果2分钟都没有两个tcp句柄关联到该uuid,则Relay server也可以返回错误并关闭和该uuid关联的tcp连接。如果云端等待到了两个tcp句柄关联到了该uuid,则分别向两个客户端返回成功消息(即,会话业务响应信息),最后标识该tcp连接是处于“已验证”的状态。后续如果再从tcp连接读到消息,说明是需要中转的数据,则直接进行转发即可。
Step8:Peer A和Peer B都收到了Relay server成功的响应消息(即,会话业务响应信息),且Relay server内部用唯一的uuid和这两个tcp连接进行了关联,于是确定PeerA和Perr B通过Relay server创建了一个实时数据中转的传输通道,该传输通道的编号为uuid。由于tcp具有双向通信的特性,因此Peer A和Peer B也可以利用Relay server进行双向实时通信。
具体实现如下,Relay server从Peer A创建的socket读到消息后,通过uuid关联的tcp句柄信息,找到Peer B的socket句柄,然后将消息写入到该句柄中给Peer B,于是Peer B就可以读到从Peer A发送出去的消息。反之亦然,从Peer B发出的消息也能通过Relay server的转发发送给Peer A。Peer A和Peer B可以利用Relay server进行双向的实时通信,由于Relay server只是单纯的转发数据,因此Peer A和Peer B之间的通信协议可以自定义,方便用户进行二次开发自己的业务,满足各种个性化的通信场景需求。
需要补充的是,Relay server内部的处理逻辑,Relay server从socket句柄收到数据后,如果该socket句柄没有被标识为“已验证”状态,说明消息是Step4或者Step5发送的会话业务请求信息,按照上述Step6和Step7描述的处理逻辑处理;否则按照Step8中的逻辑处理,进行数据转发。
本申请实施例提供的数据中转的系统中,在云端对象存储子系统12中部署中转服务,还可以充分发挥现有云端对象存储子系统12在弹性、稳定性和可靠性方面的优势,向外提供强大而稳定的实时数据中转的能力,同时还可以进一步的丰富对象存储产品的功能,提升对象存储产品的竞争力和产品与用户之间的使用黏性。
在本发明实施例中,通过至少两个通信节点中的第一节点,用于从云端对象存储子系统中获取重定向地址,通过自定义业务子系统将重定向地址发送至至少两个通信节点中的第二节点;依据重定向地址获取云端对象存储子系统创建的数据中转通道,并通过数据中转通道与第二节点进行会话通信;云端对象存储子系统,分别与第一节点和第二节点连接,用于创建数据中转通道,并在第一节点与第二节点进行会话通信的情况下,通过数据中转通道进行数据传输;自定义业务子系统,分别与第一节点和第二节点连接,用于将第一节点发送的重定向地址转发至第二节点,达到了云端对象存储系统中开发和部署数据中转模块,对象存储系统可以为通信双方提供实时数据流中转服务的目的,从而实现了向外提供基础的即时数据中转服务,为通信双方提供可靠的类似TCP的双向数据传输通道,并且可以做到和业务无关,用户可以自定义通信协议,满足用户各种使用场景以及不同类型业务的开发需求的技术效果,进而解决了目前行业内各云计算的对象存储产品均没有向外提供实时数据的中转服务的技术问题。
实施例2
根据本发明实施例,还提供了一种数据中转的方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图4是本发明实施例的一种数据中转的方法的计算机终端的硬件结构框图。如图4所示,计算机终端40可以包括一个或多个(图中仅示出一个)处理器402(处理器402可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器404、以及用于通信功能的传输模块406。本领域普通技术人员可以理解,图4所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端40还可包括比图4中所示更多或者更少的组件,或者具有与图4所示不同的配置。
存储器404可用于存储应用软件的软件程序以及模块,如本发明实施例中的数据中转的方法对应的程序指令/模块,处理器402通过运行存储在存储器404内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的数据中转的方法。存储器404可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器404可进一步包括相对于处理器402远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端40。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输模块406用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端40的通信供应商提供的无线网络。在一个实例中,传输模块406包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输模块406可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
在上述运行环境下,本申请提供了如图5所示的数据中转的方法。图5是根据本发明实施例二的数据中转的方法的流程图。在第一节点侧,本申请实施例提供的数据中转的方法具体如下:
步骤S502,从云端对象存储子系统中获取重定向地址;
在本申请上述步骤S502中,本申请实施例在第一节点侧提供了数据中转的方法,其中,该第一节点可以为任意一种支持通信功能的终端设备,例如,智能手机,平板电脑、笔记本电脑或智能穿戴设备;此外还可以为安装有通信功能客户端的终端设备,在本申请实施例中第一节点以智能手机为例进行说明,其中,用于表示第一节点的智能手机可以表示为智能手机A(记作Peer A),本申请实施例提供的数据中转的方法可以应用于实施例1中的数据中转的系统。云端对象存储子系统可以为实施例1中包含有对象存储服务端ossserver和中转服务端relay server的云端对象存储子系统。
可选的,步骤S502中从云端对象存储子系统中获取重定向地址包括:向云端对象存储子系统发送通道创建请求信息;接收云端对象存储子系统依据通道创建请求信息返回的通道创建响应信息;依据通道创建响应信息获取重定向地址,其中,重定向地址,用于指示云端对象存储子系统中执行数据中转业务的中转服务端。
其中,Peer A调用云端对象存储子系统向外提供CreateRelayChannel的api接口,向云端对象存储子系统申请创建中转传输通道,在本申请实施例中,通道创建请求可以为http协议请求,http协议请求头可以如下:PUT/?CreateRelayChannel;
http协议请求里面必须带上按照云端签名规范计算的签名信息。其中,签名信息里面包含accsess key id信息以及用accsess key secret进行数字签名后的计算结果信息。
具体的,重定向地址的获取过程如下:
云端对象存储子系统中的对象存储服务端OSS server(object StorageService)收到请求后,首先校验http协议请求(即,通道创建请求信息)里面的签名信息,验证Peer A的云端账号和密码是否合法,如果非法,直接返回http错误码405消息;如果验证通过,则云端处理步骤如下:
1),按照负载均衡策略选取一台relay server(即本申请实施例中的中转服务端),其ip地址举例为120.79.128.100
2),生成一个uuid(通用唯一识别码Universally Unique Identifier),比如为12913F18CA,该uuid是中转传输通道的编号
3),生成消息过期时间,如果是一分钟后超时,则取云端当前时间的后一分钟时刻,比如为2020-10-01T14:32:19Z,表示云端系统时间超过了2020-10-01T14:32:19Z,则认为消息为超时消息,云端会返回错误。
4),根据uuid和超时时间生成一个token(令牌)信息,token的生成规则为base64(对称加密(uuid=uuid值&expire=超时时间)),既先对uuid和expire两个字段利用云端自己的access key secret进行对称加密,然后再对加密结果进行base64编码;按照上述举例,先对字符串uuid=12913F18CA&expire=2020-10-01T14:32:19Z进行对称加密,再进行base64编码,假如最终计算结果为字符串JCxoTC0gakaX0e6YkCgP1E6hvo
5)、云端(即,本申请实施例中云端对象存储子系统中的对象存储服务端)向PeerA返回http重定向状态码301,重定向url(即,本申请实施例中的重定向地址)格式为http://ip地址/?CreateRelayChannel&token=token字符串,根据上述举例,
重定向url地址可以如下:
http://120.79.128.100/?CreateRelayChannel&token= JCxoTC0gakaX0e6YkCgP1E6hvo;
即,向PeerA反馈携带有分配的relay server的IP地址和加密后用于后续实时通信所用的校验Token。其中,该token是以字符串形式出现,并且该字符串保护了uuid和超时时间。
步骤S504,通过自定义业务子系统将重定向地址发送至第二节点;
本申请上述步骤S504中,基于步骤S502中得到的重定向地址,通过自定义业务子系统发送至第二节点,需要说明的是,第二节点和第一节点可以为相同类型的通信终端,也可以为不同类型的通信终端。其中,在本申请实施例中第二节点记作Peer B。
具体的,Peer A通过自定义业务子系统将重定向url地址(即,本申请实施例中的重定向地址)通知给Peer B。
步骤S506,依据重定向地址获取云端对象存储子系统创建的数据中转通道;
在本申请上述步骤S506中,基于步骤S502中得到的重定向地址从云端对象存储子系统中获取数据中转通道。
可选的,步骤S506中依据重定向地址获取云端对象存储子系统创建的数据中转通道包括:依据重定向地址中的中转服务端,向云端对象存储子系统中的中转服务端发送会话业务请求信息;接收中转服务端依据会话业务请求信息返回的会话业务响应信息;从会话业务响应信息中获取中转服务端创建的数据中转通道。
其中,依据重定向地址中的中转服务端,向云端对象存储子系统中的中转服务端发送会话业务请求信息包括:Peer A在获取重定向url地址后,依据该重定向url地址向Relay server发起会话业务请求信息;
具体的,Peer A获取到重定向301返回码以及重定向地址后,就知道了relayserver的ip地址,于是和Relay server创建tcp socket连接,并利用该连接向relayserver发送http请求(即,本申请实施例中的会话业务请求信息),http协议请求头举例如下:PUT/?CreateRelayChannel&token=JCxoTC0gakaX0e6YkCgP1E6hvo,http消息里面必须带上按照云端签名规范计算出的签名信息。
接收中转服务端依据会话业务请求信息返回的会话业务响应信息包括:Relayserver在接收Peer A和Peer B发送的会话业务请求信息后,建立中转传输通道,并向PeerA和Peer B返回依据中转传输通道生成的会话业务响应信息,以使得Peer A和Peer B从会话业务响应信息中获取Relay server创建的数据中转通道。
具体的,接收中转服务端依据会话业务请求信息返回的会话业务响应信息具体如下:
1)首先验证会话业务请求信息中Peer A和Peer B的客户端的签名,对客户端的云账号和云密码进行验证,如果验证不通过,则认为是非法消息,返回错误,然后关闭tcpsocket连接。
2)解析会话业务请求信息中Peer A和Peer B的客户端传过来的token参数,首先base64解码,然后再用Relay server的access key secret进行解密,如果解密失败则认为是非法消息,返回错误,然后关闭socket连接。
3)如果第2)步解密成功,则获得了会话业务请求信息中uuid和expire(超时时间)值;uuid值可以理解为传输通道的编号,如果expire比当前时间要早,则说明该消息已经过期了;如果是过期消息,则返回错误,关闭tcp socket连接。
4)再判断是否本机上已经存在了两个tcp连接,它们关联的uuid和本次解析会话业务请求信息中的uuid是否相同;如果已经存在了两个,说明已经有两个客户端使用了该uuid创建了中转传输通道,由于中转传输通道是一对一的,不能一对多,一个uuid最多只能关联到两个tcp句柄,所以需要返回失败。
5)Relay server将uuid和tcp句柄关联起来,一直要等待到有两个tcp句柄关联到该uuid。这里Relay server还可以设置一个超时时间,比如最多只等待2分钟,如果2分钟都没有两个tcp句柄关联到该uuid,则Relay server也可以返回错误并关闭和该uuid关联的tcp连接。如果云端等待到了两个tcp句柄关联到了该uuid,则分别向两个客户端返回成功消息(即,会话业务响应信息),最后标识该tcp连接是处于“已验证”的状态。后续如果再从tcp连接读到消息,说明是需要中转的数据,则直接进行转发即可。
基于Relay server反馈的会话业务响应信息,从会话业务响应信息中获取Relayserver创建的数据中转通道。
步骤S508,通过数据中转通道向第二节点转发会话数据。
本申请上述步骤S508中,基于步骤S506得到的数据中转通道,Peer A向Peer B发送会话数据,进而实现实时双向通信。
在本发明实施例中,通过从云端对象存储子系统中获取重定向地址;通过自定义业务子系统将重定向地址发送至第二节点;依据重定向地址获取云端对象存储子系统创建的数据中转通道;通过数据中转通道向第二节点转发会话数据,达到了云端对象存储系统中开发和部署数据中转模块,对象存储系统可以为通信双方提供实时数据流中转服务的目的,从而实现了向外提供基础的即时数据中转服务,为通信双方提供可靠的类似TCP的双向数据传输通道,并且可以做到和业务无关,用户可以自定义通信协议,满足用户各种使用场景以及不同类型业务的开发需求的技术效果,进而解决了目前行业内各云计算的对象存储产品均没有向外提供实时数据的中转服务的技术问题。
实施例3
根据本发明实施例的另一方面,还提供了一种数据中转的方法,图6是根据本发明实施例三的数据中转的方法的流程图。如图6所示,在云端对象存储子系统侧,本申请实施例提供的数据中转的方法具体包括:
步骤S602,依据第一节点和第二节点发送的会话业务请求信息创建数据中转通道;
本申请上述步骤S602中,可以应用于云端对象存储子系统中,本申请实施例中的云端对象存储子系统可以为实施例1中的数据中转的系统。第一节点和第二节点可以记PeerA和PeerB。
可选的,在步骤S602中依据第一节点和第二节点发送的会话业务请求信息创建数据中转通道之前,本申请实施例提供的数据中转的方法还包括:接收第一节点发送的通道创建请求信息;依据通道创建请求信息生成重定向地址,将重定向地址进行封装至通道创建响应信息;将通道创建响应信息发送至第一节点。
具体的,在本申请实施例中云端对象存储子系统包括:对象存储服务端和中转服务端,其中,对象存储服务端可以记作oss server,中转服务端可以记作relay server;
oss server接收第一节点通过指定接口发送的创建数据中转通道的通道创建请求信息,其中,该通道创建请求信息中携带有依据云端签名规范计算的签名信息,通过签名信息对第一节点和第二节点进行身份验证,在身份验证成功后,依据第一节点发送的通道创建请求信息匹配对应的relay server,并根据得到的relay server生成重定向地址,以使得第一节点通过自定义业务子系统将该重定向地址发送至第二节点进行告知,以使得后续第一节点与第二节点之间通过该relay server创建的数据中转通道,进行实时双向数据传输。
进一步地,可选的,依据通道创建请求信息生成重定向地址包括:依据预设负载均衡策略匹配对应的中转服务端,并获取中转服务端的地址;生成数据中转通道的识别码;生成消息过期时间;依据中转服务端的地址、识别码和消息过期时间生成重定向地址。
具体的,云端(OSS server对象存储服务器,object Storage Service)收到请求后,首先校验http协议请求里面的签名信息,验证Peer A的云端账号和密码是否合法,如果非法,直接返回http错误码405消息;如果验证通过,则云端处理步骤如下:
1),按照负载均衡策略选取一台relay server(即本申请实施例中的中转服务端),其ip地址举例为120.79.128.100
2),生成一个uuid(通用唯一识别码Universally Unique Identifier),比如为12913F18CA,该uuid是中转传输通道的编号
3),生成消息过期时间,如果是一分钟后超时,则取云端当前时间的后一分钟时刻,比如为2020-10-01T14:32:19Z,表示云端系统时间超过了2020-10-01T14:32:19Z,则认为消息为超时消息,云端会返回错误。
4),根据uuid和超时时间生成一个token(令牌)信息,token的生成规则为base64(对称加密(uuid=uuid值&expire=超时时间)),既先对uuid和expire两个字段利用云端自己的access key secret进行对称加密,然后再对加密结果进行base64编码;按照上述举例,先对字符串uuid=12913F18CA&expire=2020-10-01T14:32:19Z进行对称加密,再进行base64编码,假如最终计算结果为字符串JCxoTC0gakaX0e6YkCgP1E6hvo
5)、云端(即,本申请实施例中云端对象存储子系统12中的对象存储服务端)向Peer A返回http重定向状态码301,重定向url(即,本申请实施例中的重定向地址)格式为http://ip地址/?CreateRelayChannel&token=token字符串,根据上述举例,
重定向url地址可以如下:
http://120.79.128.100/?CreateRelayChannel&token= JCxoTC0gakaX0e6YkCgP1E6hvo;
即,向PeerA反馈携带有分配的relay server的IP地址和加密后用于后续实时通信所用的校验Token。其中,该token是以字符串形式出现,并且该字符串保护了uuid和超时时间。
可选的,依据第一节点和第二节点发送的会话业务请求信息创建数据中转通道包括:分别接收第一节点和第二节点依据重定向地址生成的会话业务请求信息;依据会话业务请求信息对第一节点和第二节点进行身份验证;在验证结果满足预设条件的情况下,创建数据中转通道;在验证结果不满足预设条件的情况下,与第一节点和第二节点的交互结束。
进一步地,可选的,预设条件包括:判断会话业务请求信息中第一节点和第二节点的签名是否正确;在判断结果为是的情况下,判断会话业务请求信息中的指定参数是否能够正确解密;在会话业务请求信息中的指定参数能够正确解密的情况下,获取指定参数中的数据中转通道的识别码和消息过期时间,并依据消息过期时间判断是否超时;在消息过期时间未超时的情况下,依据识别码判断是否存在两个数据中转通道;在不存在两个数据中转通道的情况下,检测在预设时间内,获取的第一节点和第二节点发送的会话业务请求信息中识别码是否与识别码相同。
具体的,Relay server在接收Peer A和Peer B发送的会话业务请求信息后,建立中转传输通道,并向Peer A和Peer B返回依据中转传输通道生成的会话业务响应信息,以使得Peer A和Peer B从会话业务响应信息中获取Relay server创建的数据中转通道;具体如下:
1)首先验证会话业务请求信息中Peer A和Peer B的客户端的签名,对客户端的云账号和云密码进行验证,如果验证不通过,则认为是非法消息,返回错误,然后关闭tcpsocket连接。
2)解析会话业务请求信息中Peer A和Peer B的客户端传过来的token参数,首先base64解码,然后再用Relay server的access key secret进行解密,如果解密失败则认为是非法消息,返回错误,然后关闭socket连接。
3)如果第2)步解密成功,则获得了会话业务请求信息中uuid和expire(超时时间)值;uuid值可以理解为传输通道的编号,如果expire比当前时间要早,则说明该消息已经过期了;如果是过期消息,则返回错误,关闭tcp socket连接。
4)再判断是否本机上已经存在了两个tcp连接,它们关联的uuid和本次解析会话业务请求信息中的uuid是否相同;如果已经存在了两个,说明已经有两个客户端使用了该uuid创建了中转传输通道,由于中转传输通道是一对一的,不能一对多,一个uuid最多只能关联到两个tcp句柄,所以需要返回失败。
5)Relay server将uuid和tcp句柄关联起来,一直要等待到有两个tcp句柄关联到该uuid。这里Relay server还可以设置一个超时时间,比如最多只等待2分钟,如果2分钟都没有两个tcp句柄关联到该uuid,则Relay server也可以返回错误并关闭和该uuid关联的tcp连接。如果云端等待到了两个tcp句柄关联到了该uuid,则分别向两个客户端返回成功消息(即,会话业务响应信息),最后标识该tcp连接是处于“已验证”的状态。后续如果再从tcp连接读到消息,说明是需要中转的数据,则直接进行转发即可。
Step8,Peer A和Peer B都收到了Relay server成功的响应消息(即,会话业务响应信息),且Relay server内部用唯一的uuid和这两个tcp连接进行了关联,于是确定PeerA和Perr B通过Relay server创建了一个实时数据中转的传输通道,该传输通道的编号为uuid。由于tcp具有双向通信的特性,因此Peer A和Peer B也可以利用Relay server进行双向实时通信。
具体实现如下,Relay server从Peer A创建的socket读到消息后,通过uuid关联的tcp句柄信息,找到Peer B的socket句柄,然后将消息写入到该句柄中给Peer B,于是Peer B就可以读到从Peer A发送出去的消息。反之亦然,从Peer B发出的消息也能通过Relay server的转发发送给Peer A。Peer A和Peer B可以利用Relay server进行双向的实时通信,由于Relay server只是单纯的转发数据,因此Peer A和Peer B之间的通信协议可以自定义,方便用户进行二次开发自己的业务,满足各种个性化的通信场景需求。
步骤S604,在第一节点与第二节点进行会话通信的情况下,通过数据中转通道转发第一节点与第二节点进行会话通信时的数据。
本申请上述步骤S604中,基于步骤S602中的数据中转通道,在第一节点与第二节点进行会话通信的情况下,通过数据中转通道转发第一节点与第二节点进行会话通信时的数据。
具体的,Peer A和Peer B都收到了Relay server成功的响应消息(即,会话业务响应信息),且Relay server内部用唯一的uuid和这两个tcp连接进行了关联,于是确定PeerA和Perr B通过Relay server创建了一个实时数据中转的传输通道,该传输通道的编号为uuid。由于tcp具有双向通信的特性,因此Peer A和Peer B也可以利用Relay server进行双向实时通信。
在本发明实施例中,通过依据第一节点和第二节点发送的会话业务请求信息创建数据中转通道;在第一节点与第二节点进行会话通信的情况下,通过数据中转通道转发第一节点与第二节点进行会话通信时的数据,达到了云端对象存储系统中开发和部署数据中转模块,对象存储系统可以为通信双方提供实时数据流中转服务的目的,从而实现了向外提供基础的即时数据中转服务,为通信双方提供可靠的类似TCP的双向数据传输通道,并且可以做到和业务无关,用户可以自定义通信协议,满足用户各种使用场景以及不同类型业务的开发需求的技术效果,进而解决了目前行业内各云计算的对象存储产品均没有向外提供实时数据的中转服务的技术问题。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的数据中转的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例4
根据本发明实施例,还提供了一种用于实施上述实施例2中数据中转的方法的装置,图7是根据本发明实施例四的数据中转的装置的示意图。如图7所示,本申请实施例中的数据中转的装置包括:获取模块72,用于从云端对象存储子系统中获取重定向地址;发送模块74,用于通过自定义业务子系统将重定向地址发送至第二节点;通道获取模块76,用于依据重定向地址获取云端对象存储子系统创建的数据中转通道;转发模块78,用于通过数据中转通道向第二节点转发会话数据。
实施例5
根据本发明实施例,还提供了一种用于实施上述实施例3中数据中转的方法的装置,图8是根据本发明实施例五的数据中转的装置的示意图。如图8所示,本申请实施例中的数据中转的装置包括:创建模块82,用于依据第一节点和第二节点发送的会话业务请求信息创建数据中转通道;转发模块84,用于在第一节点与第二节点进行会话通信的情况下,通过数据中转通道转发第一节点与第二节点进行会话通信时的数据。
实施例6
根据本发明实施例的另一方面,还提供了一种非易失性存储介质,其中,非易失性存储介质包括存储的程序,其中,在程序运行时控制非易失性存储介质所在设备执行上述实施例2或3中的方法。
实施例7
根据本发明实施例的另一方面,还提供了一种处理器,其中,处理器用于运行程序,其中,程序运行时执行上述实施例2或3中的方法。
实施例8
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的数据中转的方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:从云端对象存储子系统中获取重定向地址;通过自定义业务子系统将重定向地址发送至第二节点;依据重定向地址获取云端对象存储子系统创建的数据中转通道;通过数据中转通道向第二节点转发会话数据。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:所从云端对象存储子系统中获取重定向地址包括:向云端对象存储子系统发送通道创建请求信息;接收云端对象存储子系统依据通道创建请求信息返回的通道创建响应信息;依据通道创建响应信息获取重定向地址,其中,重定向地址,用于指示云端对象存储子系统中执行数据中转业务的中转服务端。
进一步地,可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:依据重定向地址获取云端对象存储子系统创建的数据中转通道包括:依据重定向地址中的中转服务端,向云端对象存储子系统中的中转服务端发送会话业务请求信息;接收中转服务端依据会话业务请求信息返回的会话业务响应信息;从会话业务响应信息中获取中转服务端创建的数据中转通道。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。