CN115529355A - 一种微服务无损上下线的方法及其系统 - Google Patents
一种微服务无损上下线的方法及其系统 Download PDFInfo
- Publication number
- CN115529355A CN115529355A CN202211131025.6A CN202211131025A CN115529355A CN 115529355 A CN115529355 A CN 115529355A CN 202211131025 A CN202211131025 A CN 202211131025A CN 115529355 A CN115529355 A CN 115529355A
- Authority
- CN
- China
- Prior art keywords
- service
- micro
- offline
- routing table
- detection state
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供了一种微服务无损上下线的方法,该方法为:步骤S1、微服务下线采取主动通知,通知所有客户端当前微服务准备下线,客户端从本地路由表中移除该服务实例;步骤S2、微服务下线采取等待当前流量都处理后再关闭服务;步骤S3、微服务上线采取延时注册,微服务初始化时等待所需资源加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心;步骤S4、客户端从注册中心读取可用的服务实例信息,更新至本地路由表,把新加入的服务实例信息设为探测状态;步骤S5、客户端每次请求从本地路由表中选取一个服务实例进行调用,解决高并发大流量的服务上下线可能导致流量有损的问题。
Description
技术领域
本发明涉及计算机通信技术领域,特别是一种微服务无损上下线的方法及其系统。
背景技术
微服务系统通过服务注册中心来读取可用服务实例进行调用,在服务更新上线之前,虽然会经过一系列完善的功能测试,但是在高并发大流量的场景下,要是直接杀死服务再上线一个新服务,可能导致短时间流量请求有损的问题。这种情况可能发生在服务虽然下线了,但由于注册中心的延迟问题导致客户端并未感知,短时间内仍然继续调用下线服务;也可能出现在服务上线时并未完全加载完相关资源,也就是还处于一个不可用状态,就已经把自身注册至注册中心,导致客户端过早的把流量请求过来,从而发生错误。
微服务维基上对其定义为:一种软件开发技术-面向服务的体系结构(SOA)架构样式的一种变体,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通。每个服务都围绕着具体业务进行构建,并且能够独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建。
发明内容
为克服上述问题,本发明的目的是提供一种微服务无损上下线的方法,能够解决高并发大流量的服务上下线可能导致流量有损的问题。
本发明采用以下方案实现:一种微服务无损上下线的方法,所述方法包括如下步骤:
步骤S1、微服务下线采取主动通知,通知所有客户端当前微服务准备下线,客户端从本地路由表中移除该服务实例;
步骤S2、微服务下线采取等待当前流量都处理后再关闭服务;
步骤S3、微服务上线采取延时注册,微服务初始化时等待所需资源加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心;
步骤S4、客户端从注册中心读取可用的服务实例信息,更新至本地路由表,把新加入的服务实例信息设为探测状态;
步骤S5、客户端每次请求从本地路由表中选取一个服务实例进行调用,如果调用到探测状态的服务,判断探测状态的服务是否可用,可用,则删除探测状态标记,不可用,则调用本地路由表中未标记探测状态的服务实例。
进一步的,所述步骤S1进一步具体为:系统内的微服务均需要实现服务下线通知接口,服务下线时采取主动通知客户端的方式,从注册中心获取其他在线客户端进行通知,客户端接收服务下线通知后移除本地路由表中该服务实例,后续将不再调用下线的微服务,所述本地路由表即内存中的一个服务实例存储集合。
进一步的,所述步骤S2进一步具体为:服务在通知完客户端要下线之后,通过统计当前服务中的待处理请求是否都已经完成,如果未完成则进行等待,如果请求都完成了则下线。
进一步的,所述步骤S3进一步具体为:在微服务初始化的过程中需要加载关联资源,所述关联资源包括:mysql、redis的连接,中间件的连接或者下游服务的连接,当微服务成功下线后,新服务的更新也就是微服务上线的过程采取延时注册机制,在初始化过程中只有资源均成功加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心。
进一步的,所述步骤S4进一步具体为:客户端定时每分钟会从注册中心拉取可用服务的实例信息,并且更新至本地的路由表,更新本地路由表之前会先进行对比,如果有新增的服务实例则把新加入的服务实例设为探测状态标记,即服务实例的status=0。
进一步的,所述步骤S5进一步具体为:客户端请求服务之前,需要从路由表中选取一个服务实例进行调用,但由于存在探测状态的新服务,则需要释放5%的流量去探测服务是否可用,释放5%的流量去探测服务具体为取随机1-100的数字,如果随机数大于5则调用本地路由表中未标记探测状态的服务实例,如果随机数小于等于5则调用探测状态的服务。
本发明还提供了一种微服务无损上下线的系统,所述系统包括:下线通知模块、下线关闭服务模块、服务注册模块、读取更新模块、以及调用模块;
所述下线通知模块,当微服务下线采取主动通知,通知所有客户端当前微服务准备下线,客户端从本地路由表中移除该服务实例;
所述下线关闭服务模块,当微服务下线采取等待当前流量都处理后再关闭服务;
所述服务注册模块,微服务上线采取延时注册,微服务初始化时等待所需资源加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心;
所述读取更新模块,在客户端从注册中心读取可用的服务实例信息,更新至本地路由表,把新加入的服务实例信息设为探测状态;
所述调用模块,在客户端每次请求从本地路由表中选取一个服务实例进行调用,如果调用到探测状态的服务,判断探测状态的服务是否可用,可用,则删除探测状态标记,不可用,则调用本地路由表中未标记探测状态的服务实例。
进一步的,所述下线通知模块进一步具体为:系统内的微服务均需要实现服务下线通知接口,服务下线时采取主动通知客户端的方式,从注册中心获取其他在线客户端进行通知,客户端接收服务下线通知后移除本地路由表中该服务实例,后续将不再调用下线的微服务,所述本地路由表即内存中的一个服务实例存储集合。
进一步的,所述下线关闭服务模块进一步具体为:服务在通知完客户端要下线之后,通过统计当前服务中的待处理请求是否都已经完成,如果未完成则进行等待,如果请求都完成了则下线。
进一步的,所述服务注册模块进一步具体为:在微服务初始化的过程中需要加载关联资源,所述关联资源包括:mysql、redis的连接,中间件的连接或者下游服务的连接,当微服务成功下线后,新服务的更新也就是微服务上线的过程采取延时注册机制,在初始化过程中只有资源均成功加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心。
进一步的,所述读取更新模块进一步具体为:客户端定时每分钟会从注册中心拉取可用服务的实例信息,并且更新至本地的路由表,更新本地路由表之前会先进行对比,如果有新增的服务实例则把新加入的服务实例设为探测状态标记,即服务实例的status=0。
进一步的,所述调用模块进一步具体为:客户端请求服务之前,需要从路由表中选取一个服务实例进行调用,但由于存在探测状态的新服务,则需要释放5%的流量去探测服务是否可用,释放5%的流量去探测服务具体为取随机1-100的数字,如果随机数大于5则调用本地路由表中未标记探测状态的服务实例,如果随机数小于等于5则调用探测状态的服务。
本发明的有益效果在于:本发明对微服务上线和下线进行处理,使得服务实现无损的更新,能够解决高并发大流量的服务上下线可能导致流量有损的问题。
附图说明
图1是本发明的方法流程示意图。
图2是本发明的系统原理框图。
具体实施方式
下面结合附图对本发明做进一步说明。
请参阅图1所示,本发明提供了一种微服务无损上下线的方法,所述方法包括如下步骤:
步骤S1、微服务下线采取主动通知,通知所有客户端当前微服务准备下线,客户端从本地路由表中移除该服务实例;
步骤S2、微服务下线采取等待当前流量都处理后再关闭服务;
步骤S3、微服务上线采取延时注册,微服务初始化时等待所需资源加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心;
步骤S4、客户端从注册中心读取可用的服务实例信息,更新至本地路由表,把新加入的服务实例信息设为探测状态;
步骤S5、客户端每次请求从本地路由表中选取一个服务实例进行调用,如果调用到探测状态的服务,判断探测状态的服务是否可用,可用,则删除探测状态标记,不可用,则调用本地路由表中未标记探测状态的服务实例。
下面结合一具体实施例对本发明做进一步说明:
本发明提供了一种微服务无损上下线的方法,该方法为:
步骤一、服务下线采取主动通知,通知其他客户端当前服务准备下线,客户端从本地路由表中移除该实例。
客户端从注册中心感知服务列表存在延时,可能导致服务实例下线后在一小段时间内客户端仍然调用已经下线的服务,从而导致调用失败。
系统内的微服务均需要实现服务下线通知接口,服务下线时采取主动通知客户端的方式,从注册中心获取其他在线客户端进行通知,客户端接收服务下线通知后移除本地路由表中该服务实例,后续将不再调用下线服务。本地路由表即内存中的一个服务实例存储集合,存储如下信息[{‘name’:‘user.server’,‘ip’:‘192.168.1.1’,‘status’:1},{‘name’:‘user.server’,‘ip’:‘192.168.1.2’,‘status’:1}]
步骤二、服务下线采取自适应等待,等待当前流量都处理后再关闭服务。
虽然步骤一中已经主动通知客户端服务已下线,但是在流量大的场景下,即便客户端已移除本地路由表中该服务实例,仍然可能存在一些请求还在等待待下线服务处理返回数据,如果此时服务直接下线,会导致这些请求就无法正常被响应。
服务在通知完客户端我要下线之后,通过统计当前服务中的待处理请求是否都已经完成,如果未完成则进行等待,如果请求都完成了则下线,即自适应等待。
步骤三、服务上线采取延时注册,服务初始化时等待所需资源加载完毕,检测资源可用性,等待一切就绪后注册至注册中心。
服务初始化的过程中需要加载关联资源,例如mysql、redis的连接,其他中间件或者下游服务的连接等等,所以初始化的过程相对普通的请求可能会慢一些,在初始化资源还未完成之前就把服务注册至注册中心,就可能导致客户端过早的把流量请求过来,导致错误。
所以当服务成功下线后,新服务的更新也就是服务上线的过程采取延时注册机制,在初始化过程中只有资源均成功加载完毕才把服务注册至注册中心。
步骤四、客户端从注册中心读取可用服务实例信息,更新至本地路由表,把新加入的服务实例信息设为探测状态。
客户端定时每分钟会从注册中心拉取可用服务的实例信息,并且更新至本地的路由表,也就是存在在内存之中。更新本地路由表之前会先进行对比,如果有新增的服务实例则把新加入的服务实例设为探测状态,即status=0。对于新服务的上线,虽然会经过多轮测试,但为了避免新服务在上线期间可能出现的未知问题,在对新服务的调用上采取步骤五的小部分流量探测。
步骤五、客户端每次请求服务前先从释放5%的流量到探测状态的服务,如果探测状态服务可用则删除探测状态。
客户端请求服务之前,需要从路由表中选取一个服务实例进行调用,但由于可能存在探测状态的新服务,所以需要释放5%的流量去探测服务是否可用,具体方法为随机1-100的数字,如果随机结果大于5则调用其他正常服务,如果数字小于等于5则调用探测服务。并且记录服务请求结果,如果连续累计5次都是成功,则把删除新服务的探测状态,往后均正常请求未标记探测状态的服务实例。如果探测阶段,新服务一直调用失败,则需要对新服务进行人工干预排查。也就是5%和95%的概率调用不同状态的服务,5%的流量去调用探测状态的服务,95%的流量去调用未标记探测状态的服务。
请参阅图2所示,本发明还提供了一种微服务无损上下线的系统,所述系统包括:下线通知模块、下线关闭服务模块、服务注册模块、读取更新模块、以及调用模块;
所述下线通知模块,当微服务下线采取主动通知,通知所有客户端当前微服务准备下线,客户端从本地路由表中移除该服务实例;
所述下线通知模块进一步具体为:系统内的微服务均需要实现服务下线通知接口,服务下线时采取主动通知客户端的方式,从注册中心获取其他在线客户端进行通知,客户端接收服务下线通知后移除本地路由表中该服务实例,后续将不再调用下线的微服务,所述本地路由表即内存中的一个服务实例存储集合。
所述下线关闭服务模块,当微服务下线采取等待当前流量都处理后再关闭服务;
所述下线关闭服务模块进一步具体为:服务在通知完客户端要下线之后,通过统计当前服务中的待处理请求是否都已经完成,如果未完成则进行等待,如果请求都完成了则下线。
所述服务注册模块,微服务上线采取延时注册,微服务初始化时等待所需资源加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心;
所述服务注册模块进一步具体为:在微服务初始化的过程中需要加载关联资源,所述关联资源包括:mysql、redis的连接,中间件的连接或者下游服务的连接,当微服务成功下线后,新服务的更新也就是微服务上线的过程采取延时注册机制,在初始化过程中只有资源均成功加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心。
所述读取更新模块,在客户端从注册中心读取可用的服务实例信息,更新至本地路由表,把新加入的服务实例信息设为探测状态;
所述读取更新模块进一步具体为:客户端定时每分钟会从注册中心拉取可用服务的实例信息,并且更新至本地的路由表,更新本地路由表之前会先进行对比,如果有新增的服务实例则把新加入的服务实例设为探测状态标记,即服务实例的status=0。
所述调用模块,在客户端每次请求从本地路由表中选取一个服务实例进行调用,如果调用到探测状态的服务,判断探测状态的服务是否可用,可用,则删除探测状态标记,不可用,则调用本地路由表中未标记探测状态的服务实例。
所述调用模块进一步具体为:客户端请求服务之前,需要从路由表中选取一个服务实例进行调用,但由于存在探测状态的新服务,则需要释放5%的流量去探测服务是否可用,释放5%的流量去探测服务具体为取随机1-100的数字,如果随机数大于5则调用本地路由表中未标记探测状态的服务实例,如果随机数小于等于5则调用探测状态的服务。
总之,本发明对微服务上线和下线进行处理,使得服务实现无损的更新,能够解决高并发大流量的服务上下线可能导致流量有损的问题。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (12)
1.一种微服务无损上下线的方法,其特征在于:所述方法包括如下步骤:
步骤S1、微服务下线采取主动通知,通知所有客户端当前微服务准备下线,客户端从本地路由表中移除该服务实例;
步骤S2、微服务下线采取等待当前流量都处理后再关闭服务;
步骤S3、微服务上线采取延时注册,微服务初始化时等待所需资源加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心;
步骤S4、客户端从注册中心读取可用的服务实例信息,更新至本地路由表,把新加入的服务实例信息设为探测状态;
步骤S5、客户端每次请求从本地路由表中选取一个服务实例进行调用,如果调用到探测状态的服务,判断探测状态的服务是否可用,可用,则删除探测状态标记,不可用,则调用本地路由表中未标记探测状态的服务实例。
2.根据权利要求1所述的一种微服务无损上下线的方法,其特征在于:所述步骤S1进一步具体为:系统内的微服务均需要实现服务下线通知接口,服务下线时采取主动通知客户端的方式,从注册中心获取其他在线客户端进行通知,客户端接收服务下线通知后移除本地路由表中该服务实例,后续将不再调用下线的微服务,所述本地路由表即内存中的一个服务实例存储集合。
3.根据权利要求1所述的一种微服务无损上下线的方法,其特征在于:所述步骤S2进一步具体为:服务在通知完客户端要下线之后,通过统计当前服务中的待处理请求是否都已经完成,如果未完成则进行等待,如果请求都完成了则下线。
4.根据权利要求1所述的一种微服务无损上下线的方法,其特征在于:所述步骤S3进一步具体为:在微服务初始化的过程中需要加载关联资源,所述关联资源包括:mysql、redis的连接,中间件的连接或者下游服务的连接,当微服务成功下线后,新服务的更新也就是微服务上线的过程采取延时注册机制,在初始化过程中只有资源均成功加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心。
5.根据权利要求1所述的一种微服务无损上下线的方法,其特征在于:所述步骤S4进一步具体为:客户端定时每分钟会从注册中心拉取可用服务的实例信息,并且更新至本地的路由表,更新本地路由表之前会先进行对比,如果有新增的服务实例则把新加入的服务实例设为探测状态标记,即服务实例的status=0。
6.根据权利要求1所述的一种微服务无损上下线的方法,其特征在于:所述步骤S5进一步具体为:客户端请求服务之前,需要从路由表中选取一个服务实例进行调用,但由于存在探测状态的新服务,则需要释放5%的流量去探测服务是否可用,释放5%的流量去探测服务具体为取随机1-100的数字,如果随机数大于5则调用本地路由表中未标记探测状态的服务实例,如果随机数小于等于5则调用探测状态的服务。
7.一种微服务无损上下线的系统,其特征在于:所述系统包括:下线通知模块、下线关闭服务模块、服务注册模块、读取更新模块、以及调用模块;
所述下线通知模块,当微服务下线采取主动通知,通知所有客户端当前微服务准备下线,客户端从本地路由表中移除该服务实例;
所述下线关闭服务模块,当微服务下线采取等待当前流量都处理后再关闭服务;
所述服务注册模块,微服务上线采取延时注册,微服务初始化时等待所需资源加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心;
所述读取更新模块,在客户端从注册中心读取可用的服务实例信息,更新至本地路由表,把新加入的服务实例信息设为探测状态;
所述调用模块,在客户端每次请求从本地路由表中选取一个服务实例进行调用,如果调用到探测状态的服务,判断探测状态的服务是否可用,可用,则删除探测状态标记,不可用,则调用本地路由表中未标记探测状态的服务实例。
8.根据权利要求7所述的一种微服务无损上下线的系统,其特征在于:所述下线通知模块进一步具体为:系统内的微服务均需要实现服务下线通知接口,服务下线时采取主动通知客户端的方式,从注册中心获取其他在线客户端进行通知,客户端接收服务下线通知后移除本地路由表中该服务实例,后续将不再调用下线的微服务,所述本地路由表即内存中的一个服务实例存储集合。
9.根据权利要求7所述的一种微服务无损上下线的系统,其特征在于:所述下线关闭服务模块进一步具体为:服务在通知完客户端要下线之后,通过统计当前服务中的待处理请求是否都已经完成,如果未完成则进行等待,如果请求都完成了则下线。
10.根据权利要求7所述的一种微服务无损上下线的系统,其特征在于:所述服务注册模块进一步具体为:在微服务初始化的过程中需要加载关联资源,所述关联资源包括:mysql、redis的连接,中间件的连接或者下游服务的连接,当微服务成功下线后,新服务的更新也就是微服务上线的过程采取延时注册机制,在初始化过程中只有资源均成功加载完毕,检测资源可用性,等待一切就绪后微服务注册至注册中心。
11.根据权利要求7所述的一种微服务无损上下线的系统,其特征在于:所述读取更新模块进一步具体为:客户端定时每分钟会从注册中心拉取可用服务的实例信息,并且更新至本地的路由表,更新本地路由表之前会先进行对比,如果有新增的服务实例则把新加入的服务实例设为探测状态标记,即服务实例的status=0。
12.根据权利要求7所述的一种微服务无损上下线的系统,其特征在于:所述调用模块进一步具体为:客户端请求服务之前,需要从路由表中选取一个服务实例进行调用,但由于存在探测状态的新服务,则需要释放5%的流量去探测服务是否可用,释放5%的流量去探测服务具体为取随机1-100的数字,如果随机数大于5则调用本地路由表中未标记探测状态的服务实例,如果随机数小于等于5则调用探测状态的服务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211131025.6A CN115529355A (zh) | 2022-09-13 | 2022-09-13 | 一种微服务无损上下线的方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211131025.6A CN115529355A (zh) | 2022-09-13 | 2022-09-13 | 一种微服务无损上下线的方法及其系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115529355A true CN115529355A (zh) | 2022-12-27 |
Family
ID=84697581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211131025.6A Pending CN115529355A (zh) | 2022-09-13 | 2022-09-13 | 一种微服务无损上下线的方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115529355A (zh) |
-
2022
- 2022-09-13 CN CN202211131025.6A patent/CN115529355A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1421764B1 (en) | Migration support mechanism in open service and open mobile architecture | |
US8214823B2 (en) | Cluster system, process for updating software, service provision node, and computer-readable medium storing service provision program | |
US7150014B2 (en) | Automatically deploying software packages used in computer systems | |
US7739391B2 (en) | Gateway for wireless mobile clients | |
US7512408B2 (en) | Scalable wireless messaging system | |
WO2016184175A1 (zh) | 数据库处理方法及装置 | |
CN109391482B (zh) | 网络功能的升级方法及升级管理实体 | |
WO2021057605A1 (zh) | 设备管理方法、装置、系统、设备及存储介质 | |
CN115150419B (zh) | 一种混合云对象存储的配置和访问方法及系统 | |
CN116566984B (zh) | 一种k8s容器集群的路由信息创建方法、装置及电子设备 | |
CN111966466A (zh) | 一种容器管理方法、设备以及介质 | |
CN111884844A (zh) | 基于zookeeper的消息服务接入方法和设备 | |
CN114615141A (zh) | 通信控制方法 | |
CN111314241A (zh) | 一种任务调度方法及调度系统 | |
JP4356018B2 (ja) | ストレージ・エリア・ネットワーク上の非同期メッセージング | |
CN115529355A (zh) | 一种微服务无损上下线的方法及其系统 | |
US11880419B2 (en) | Systems and methods for implementing soft locking in a stateless microservice environment | |
CN112711466B (zh) | 悬挂事务巡检方法和装置、电子设备和存储介质 | |
US20220019380A1 (en) | Methods providing network service restoration context and related service instance sets and storage resource nodes | |
CN115220992A (zh) | 接口变更监控方法、装置、计算机设备和存储介质 | |
US20190230158A1 (en) | Method for synchronizing context data of network functions in a mobile network | |
WO2024098938A1 (zh) | 网络存储功能故障检测及容灾方法及相关设备 | |
CN116361016B (zh) | 一种网络控制器消息处理方法、系统 | |
EP4113939A1 (en) | Management and orchestration of heterogeneous network environment using dynamic, robust and network aware microservices | |
CN110768838A (zh) | 一种snmp消息处理方法及相关装置 |
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 |