掌桥专利:专业的专利平台
掌桥专利
首页

一种基于微服务架构的无状态TCP长连接服务端方法

文献发布时间:2024-05-31 01:29:11


一种基于微服务架构的无状态TCP长连接服务端方法

技术领域

本发明涉及网络通信技术领域,具体涉及一种基于微服务架构的无状态TCP长连接服务端方法。

背景技术

在现有技术的分布式系统中,微服务架构已成为常见的架构模式之一。在这种架构中,系统被拆分为多个独立的服务单元,每个单元负责特定的业务功能,以提高灵活性和可扩展性。然而,在面对需要长期保持通信的应用场景下,如TCP长连接的管理,微服务架构也面临一些挑战。

在传统的微服务架构中,TCP长连接管理通常要求服务端维护连接状态以确保消息的有效转发和处理。这种方法可能导致以下问题:

1、状态维护开销:服务端需要维护大量的连接状态信息,增加了系统的负载和资源消耗。

2、单点故障:若某个服务节点崩溃,连接状态的丢失可能导致消息丢失或者重复传递。

3、扩展性限制:连接状态的维护可能限制系统的横向扩展能力。

因此,现有技术存在以下几个缺点:

1、状态维护开销:现有技术通常需要服务器端维护大量的连接状态信息,导致资源消耗增加,降低了系统的效率和性能。

2、单点故障:如果某个负责连接状态管理的服务节点崩溃,可能会导致连接状态的丢失,进而影响消息的传递和处理,带来系统的不稳定性。

3、扩展性限制:连接状态的维护可能会限制系统的横向扩展能力,当系统需要处理大量连接时,可能会面临性能瓶颈。

4、复杂性和维护成本:某些现有方案可能引入额外的复杂性,例如使用消息队列解耦连接和状态维护,可能增加系统的设计和维护成本。

发明内容

为解决现有技术中存在的上述问题,本发明的目的在于提供一种基于微服务架构的无状态TCP长连接服务端方法,该方法通过无状态管理的方式优化TCP长连接的管理,在微服务架构下提高系统的性能、可靠性,并降低系统的复杂性和维护成本。

本发明通过以下技术方案来实现上述目的:

一种基于微服务架构的无状态TCP长连接服务端方法,该方法应用于一种微服务架构,该微服务架构包括客户端、负载均衡服务器、接入服务集群、网关服务集群以及后台服务器,接入服务集群包括多个接入服务实例,该方法包括:

由客户端主动发送请求,客户端首先请求负载均衡服务器获取接入服务地址,多个客户端通过该接入服务地址与接入服务集群建立TCP长连接,连接成功后通过Redis存储客户端与接入服务实例的映射关系;

客户端发送消息通过TCP长连接到达接入服务集群,接入服务集群接收消息并进行合法性验证;

若验证通过,在合法消息的服务端消息收发格式中,将客户端所在的接入服务实例cas alias设置为当前实例名称,然后转发至网关服务集群;

由网关服务集群检查后台服务类型service type是否合法;

检查某个后台服务器的别名service alias是否存在、并根据策略检查是否需要分发到新的接入服务实例进行处理;

将消息转发至对应的后台服务器进行处理。

根据本发明提供的一种基于微服务架构的无状态TCP长连接服务端方法,在后台服务器收到消息后对加密的内容protocol data进行解析,在解析成功后根据不同后台服务器对应的消息类型msg type进行相关逻辑的处理;

对于部分需要响应结果的消息,后台服务器将消息发送给网关服务集群,网关服务集群通过cas alias标记位下发到客户端所在的接入服务实例上,接入服务集群再通过TCP长连接发送给客户端。

根据本发明提供的一种基于微服务架构的无状态TCP长连接服务端方法,在服务端主动下发消息时,后台服务器通过Redis获取客户端所在的接入服务实例;将cas alias设置为客户端所在的接入服务实例,然后将消息传递给网关服务集群;网关服务集群将消息转发至对应的接入服务实例;接入服务集群通过TCP长连接发送给客户端。

根据本发明提供的一种基于微服务架构的无状态TCP长连接服务端方法,客户端消息收发格式包括:

rand num:随机数,用于加密;

Length:消息长度;

Checksum:校验和;

Verseion:客户端版本;

service type:后台服务类型;

service alias:某个后台服务的别名;

msg type:后台服务对应的消息类型;

protocol data:加密的内容。

根据本发明提供的一种基于微服务架构的无状态TCP长连接服务端方法,服务端各个微服务的通信协议格式包括:

Sn:客户端唯一标识;

from serve:来源服务;

to server:目标服务;

msg type:消息类型;

cas alias::客户端所在的接入服务实例;

Version:客户端版本;

protocol data:传输内容。

根据本发明提供的一种基于微服务架构的无状态TCP长连接服务端方法,负载均衡服务器用于根据需求给客户端分配接入服务地址;

接入服务集群用于与客户端建立TCP长连接;

网关服务集群用于消息权限的验证、消息的转发;

后台服务器用于负责不同模块的业务处理。

根据本发明提供的一种基于微服务架构的无状态TCP长连接服务端方法,后台服务器使用grpc双向流模式接收到网关服务集群转发的消息,然后对该消息进行protobuf/json等方式进行解析,按照业务实际需要的逻辑进行处理。

根据本发明提供的一种基于微服务架构的无状态TCP长连接服务端方法,接入服务模块还用于对接入服务实例是否存在异常进行进一步检测,当没检测到异常时提供正常的接入服务,否则,启动防护并将攻击的信息上报给防护代理模块。

根据本发明提供的一种基于微服务架构的无状态TCP长连接服务端方法,在建立TCP长连接后,若TCP连接通道在一个周期内无数据通信,则发送心跳帧给后台服务器;若在发送预设次数的心跳帧后,外部设备无响应,则重新建立TCP长连接。

由此可见,相较于现有技术,本发明提供一种基于微服务架构的无状态TCP长连接服务端方法具有以下有益效果:

1、本发明可以降低服务器端的状态维护开销:通过无状态管理的方法,减少或消除连接状态的维护,提高系统的效率和资源利用率。

2、本发明可以提高系统的稳定性:通过无状态管理的方法可以降低单点故障的影响,即使某个服务节点发生故障,也能保证消息的有效传递,提高系统的稳定性和可靠性。

3、本发明可以增强系统的横向扩展能力:通过无状态管理的方法可以更好地支持系统的横向扩展,使系统能够更灵活地应对大规模连接的需求。

4、本发明可以简化系统设计和维护:通过无状态管理可以降低系统的复杂性,减少维护成本,使系统更易于设计、部署和维护。

下面结合附图和具体实施方式对本发明作进一步详细说明。

附图说明

图1是本发明一种基于微服务架构的无状态TCP长连接服务端方法实施例的流程图。

图2是本发明一种基于微服务架构的无状态TCP长连接服务端方法实施例中关于微服务架构的原理图。

图3是本发明一种基于微服务架构的无状态TCP长连接服务端方法实施例中关于客户端消息收发格式的原理示意图。

图4是本发明一种基于微服务架构的无状态TCP长连接服务端方法实施例中关于服务端消息收发格式的原理示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

本实施例公开一种基于微服务架构的无状态TCP长连接服务端方法,目前该方案及架构已经在Go语言下实现,该方法通过将部分状态交给客户端进行存储,使服务端在进行横向扩展时不再受限制,并且可以根据实际情况和策略对客户端的状态进行修改。

参见图1与图2,本实施例所提供的一种基于微服务架构的无状态TCP长连接服务端方法,该方法应用于一种微服务架构,该微服务架构包括客户端、负载均衡服务器、接入服务集群、网关服务集群以及后台服务器,接入服务集群包括多个接入服务实例,该方法包括:

步骤S1,由客户端主动发送请求,客户端首先请求负载均衡服务器获取接入服务地址,多个客户端通过该接入服务地址与接入服务集群建立TCP长连接,连接成功后通过Redis存储客户端与接入服务实例的映射关系;

步骤S2,客户端发送消息通过TCP长连接到达接入服务集群,接入服务集群接收消息并进行合法性验证;

步骤S3,若验证通过,在合法消息的服务端消息收发格式中,将客户端所在的接入服务实例cas alias设置为当前实例名称,然后转发至网关服务集群;

步骤S4,由网关服务集群检查后台服务类型service type是否合法;

步骤S5,检查某个后台服务器的别名service alias是否存在、并根据策略检查是否需要分发到新的接入服务实例进行处理;

步骤S6,将消息转发至对应的后台服务器进行处理。

在本实施例中,在后台服务器收到消息后对加密的内容protocol data进行解析,在解析成功后根据不同后台服务器对应的消息类型msg type进行相关逻辑的处理;

对于部分需要响应结果的消息,后台服务器将消息发送给网关服务集群,网关服务集群通过cas alias标记位下发到客户端所在的接入服务实例上,接入服务集群再通过TCP长连接发送给客户端。

在服务端主动下发消息时,后台服务器通过Redis获取客户端所在的接入服务实例;将cas alias设置为客户端所在的接入服务实例,然后将消息传递给网关服务集群;网关服务集群将消息转发至对应的接入服务实例;接入服务集群通过TCP长连接发送给客户端。

可见,本实施例提供了一种无状态管理的方式来处理TCP长连接,这种基于无状态管理的方案使得服务端无需维护大量连接状态信息,这种方法有效地解决了传统方法中连接状态维护所带来的问题,如降低了服务器端的负载、提高了系统的扩展性等,从而提高系统的性能和扩展性。

在本实施例中,如图3所示,客户端消息收发格式包括:

rand num:随机数,用于加密;

Length:消息长度;

Checksum:校验和;

Verseion:客户端版本;

service type:后台服务类型;

service alias:某个后台服务的别名;

msg type:后台服务对应的消息类型;

protocol data:加密的内容。

在本实施例中,如图4所示,服务端各个微服务的通信协议格式包括:

Sn:客户端唯一标识;

from serve:来源服务;

to server:目标服务;

msg type:消息类型;

cas alias::客户端所在的接入服务实例;

Version:客户端版本;

protocol data:传输内容。

在上述步骤S1中,本实施例的映射关系为该客户端所在的接入服务地址,及与哪一台接入服务建立的长连接。

在上述步骤S2中,在进行合法性验证时,通过原始数据按照定义的规则进行加密,然后与客户端上传的checksum做对比。

在上述步骤S3中,cas alias表示客户端所连接的接入服务地址,接入服务都是集群模式,因此存在多个实例。假如:某个客户端与接入服务1建立的TCP长连接,那么casalias就是这服务的地址。

在上述步骤S5中,通过服务端通信协议的server type做检测,看这个值不是本实施例定义的合法值。其中,使用grpc双向流模式转发到后台服务器。

在本实施例中,在后台服务器收到消息后对加密的内容protocol data进行解析时,后台服务器使用grpc双向流模式接收到网关服务集群转发的消息,然后对该消息进行protobuf/json等方式进行解析,按照业务实际需要的逻辑进行处理。

在本实施例中,负载均衡服务器用于根据需求给客户端分配接入服务地址;接入服务集群用于与客户端建立TCP长连接;网关服务集群用于消息权限的验证、消息的转发;后台服务器用于负责不同模块的业务处理,其中,后台服务器包括节目服务集群、消息推送服务集群。可见,负载均衡主要负责根据实际负责情况给客户端分配接入服务地址,接入服务主要负责与客户端建立TCP长连接,网关服务主要负责消息权限的验证、消息的转发,后台服务主要负责不同模块的业务处理。具体的,客户端先请求负载均衡服务获取接入服务地址,然后通过该地址与接入服务建立TCP长连接,建立长连接后客户端传输的消息先会到接入服务,接入服务传给网关服务,网关服务在转给后台服务。其中,服务器端的消息传输时通过grpc实现的,接入服务、网关服务、后台服务都是多对多的关系。

在本实施例中,在接入服务实例中设置有内核层防护模块、接入服务模块和防护代理模块;其中,内核层防护模块运行在接入服务实例的内核空间。

其中,内核层防护模块,用于对接入服务实例是否存在异常进行检测,当检测到存在异常或接收到接入服务集群受到攻击的消息时,启动防护;

其中,接入服务模块,用于提供正常的接入服务;

其中,防护代理模块,用于实现接入服务实例和防护中心的数据传输。

具体的,接入服务模块还用于对接入服务实例是否存在异常进行进一步检测,当没检测到异常时提供正常的接入服务,否则,启动防护并将攻击的信息上报给防护代理模块。

内核层防护模块用于接收经负载均衡服务器转入其对应的接入服务实例的数据包;对数据包进行校验,如果通过将该数据包转发给该接入服务实例的应用层的接入服务模块,接收接入服务模块转发的响应包,然后转发给负载均衡服务器;否则当校验未通过时,按预先设置好的防护处理进行处理,同时记录拦截IP、拦截原因和拦截IP的次数。

在进行防护处理时,直接中断TCP连接、丢掉数据包或回复特定的数据包;在内核里取消某些IP的状态维护或对需要防护的接入服务实例端口增加和删除动态管理。

在本实施例中,当一个TCP服务器监听端口接收到客户端发起的TCP长链接请求或,发起一个或多个与接入服务集群建立TCP通信的TCP通信请求,开启TCP链路,在接收或发送数据后,主动断开TCP链路。在建立TCP长连接后,若TCP连接通道在一个周期内无数据通信,则发送心跳帧给后台服务器;若在发送预设次数的心跳帧后,外部设备无响应,则重新建立TCP长连接。

综上可得,本实施例通过在协议中增加部分冗余字段,把部分状态存至通信协议里,使得服务减少状态的管理,这样服务在进行横向扩展时就无需管理状态,从而具备以下优点:

1、本实施例提供的方法可以降低服务器端的状态维护开销:通过无状态管理的方法,减少或消除连接状态的维护,提高系统的效率和资源利用率。

2、本实施例提供的方法可以提高系统的稳定性:通过无状态管理的方法可以降低单点故障的影响,即使某个服务节点发生故障,也能保证消息的有效传递,提高系统的稳定性和可靠性。

3、本实施例提供的方法可以增强系统的横向扩展能力:通过无状态管理的方法可以更好地支持系统的横向扩展,使系统能够更灵活地应对大规模连接的需求。

4、本实施例提供的方法可以简化系统设计和维护:通过无状态管理可以降低系统的复杂性,减少维护成本,使系统更易于设计、部署和维护。

应该理解,上文所描述的实施例仅是示意。本实施例描述的实施例可在硬件、软件、固件、中间件、微码或者其任意组合中实现。对于硬件实现,处理单元可以在一个或者多个特定用途集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器和/或设计为执行本文功能的其它电子单元或者其结合内实现。

上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。

相关技术
  • 一种基于TCP流状态的网络扫描检测方法及检测系统
  • 一种基于微服务架构的全球后台服务端运行状态监控系统及方法
  • 一种微服务架构下将无状态服务接收到的消息通过长连接透传的方法和装置
技术分类

06120116626856