微服务系统服务依赖发现技术分析

(整期优先)网络出版时间:2024-05-14
/ 2

微服务系统服务依赖发现技术分析

李博睿

陕西飞机工业有限责任公司   陕西省汉中市城固县 723200

摘要:本文首先介绍了微服务系统中的服务依赖发现问题,然后分析了当前已有的服务依赖发现技术,最后重点比较了它们各自的优缺点以及适用场景,并结合实际应用案例进行了验证,得出了基于SOA协议栈的分布式服务依赖发现框架的结论,为微服务系统提供了有效可行的技术方案。

关键词:微服务系统;服务依赖发现技术;SOA协议栈

引言:微服务架构是一种可复用软件组件的设计模式,其最大特点就是将业务逻辑独立出来,使其可以被单独部署和测试。但随着微服务系统规模不断扩大,服务数量也随之增多,在软件开发过程中会不可避免地产生依赖关系。因此,如何从海量服务中快速发现服务依赖信息对微服务系统的高效运行至关重要。

1.微服务系统服务依赖发现技术概述

目前,随着互联网的快速发展,涌现出越来越多的分布式软件系统。这些系统在处理复杂业务时所需的服务数量会不断增加,从而导致整体系统的复杂性也随之提高。同时,由于服务之间的依赖关系难以被发现和管理,因此这种情况给微服务系统的开发带来了巨大挑战。为了解决这一问题,微服务架构应运而生。微服务是相对于传统单体架构而言的一种架构模式,它通过将一个应用程序分解成若干个可独立部署、测试以及维护的微服务组成“微服务系统”,来达到简化软件开发流程、提高软件运行效率以及增强系统抗风险能力的目的[1]。然而,随着微服务系统的规模不断扩大,其所包含的服务数量也急剧增多,这就给服务依赖发现工作带来了巨大的挑战。当前,业界虽然已经提出了多种服务依赖发现技术,但是它们各自都存在着一定的不足之处,很难适用于所有场景。因此,本文旨在分析现有技术的优缺点及适用场景,然后以实际应用案例为基础,从技术角度出发,探索一种基于SOA协议栈的分布式服务依赖发现框架。最后,根据研究结果给出了建议,为微服务系统中服务依赖发现技术的选择提供参考依据。

2.微服务系统服务依赖发现技术的研究分析

2.1服务依赖发现的研究现状

虽然国内外关于服务依赖发现的研究成果较多,但目前还没有一种完美的解决方案。总体来说,现有的服务依赖发现技术主要包括三类:基于服务定义的服务依赖发现、基于服务注册中心的服务依赖发现和基于SOA协议栈的服务依赖发现。

基于服务定义的服务依赖发现是通过收集不同服务之间的契约信息来实现对服务依赖信息的发现;基于服务注册中心的服务依赖发现则是将整个系统的服务都注册到一个统一的服务注册中心中,并在此基础上使用某种机制自动发现服务依赖关系;而基于SOA协议栈的服务依赖发现则是一种全新的设计思路,它将传统的面向对象技术与服务总线(SOA)相结合,能够更加高效地完成服务依赖关系的发现工作。由于这些技术的侧重点不同,因此也存在一些优缺点。下面分别从这三个方面对其进行了比较分析[2]

2.2SOA协议栈在服务依赖发现中的应用

在微服务系统中,由于业务系统架构复杂、分布式程度高且采用的开发语言不同,使得服务之间难以形成有效的联系。因此,必须使用统一的服务描述和协议规范来实现多个分布式系统的集成和互操作。为此,本文提出了一种基于SOA协议栈的服务依赖发现框架,其主要由中心控制节点(ControlNode)和客户端(Client)两部分组成。

其中,中心控制节点是整个框架的核心,它负责收集所有微服务的状态信息,并通过动态调度算法进行服务依赖发现。为方便后续研究人员对该框架的深入分析,本文将从以下3方面展开讨论:中心控制节点与微服务如何建立联系;中心控制节点如何管理微服务的状态信息;中心控制节点如何通过动态调度算法发现服务依赖。

首先,必须将中央控制节点和微业务连接起来。主要有两种方式:1)在业务端工作的时候,中央控制节点监听远端的Socket,获得服务端的地址,然后通过HTTP向客户发送业务端的消息;2)在服务器不工作的情况下,中央控制节点通过对远端WebSocket的订购来获得服务器的地址,再利用RPC协议将消息请求发送给Serveron,最终客户机在收到该报文后,执行相应的商业逻辑。

其次,中央控制节点对微服务的状态信息进行管理。一般情况下,中央控制节点通过建立队列存储服务的运行状态,并在某个服务发生异常时启动服务重启。另外,为防止相同业务的状态信息被多次记录,中央控制节点也将其按一定的规则存入数据库。

最后,研究了中央控制节点利用动态调度算法进行业务相关性的发现。一般情况下,中央控制节点通过对中间层服务的依赖关系寻找中间层的服务,如果其中一个中间层服务不可用,那么就一直寻找,直至发现了一个可用的服务。同时,中央控制点也会定时地清除资料库中的资料,以保证资料库的正确性与效率。

客户端主要用于收集微服务的状态信息,当发现某项服务发生故障时,客户端可通过订阅服务端的WebSocket实时监控其运行状态。中心控制节点通过监听WebSocket获取服务端的运行状态,再利用HTTP协议将服务端信息发送给客户端。

2.3基于SOA协议栈的分布式服务依赖发现框架设计

针对现有的服务依赖发现技术和架构,结合微服务系统实际的开发需求,本文设计了一个基于SOA协议栈的分布式服务依赖发现框架。该框架主要包括服务注册、服务查找、服务依赖发现以及服务质量监控四个模块,并将各模块通过消息队列(MessageQueue)进行通信。其中,服务注册模块负责管理服务的注册、更新和删除等操作;服务查找模块用于发现系统内部的服务信息,以获取服务之间的依赖关系;服务依赖发现模块在接收到服务请求后,根据自身的实现策略对其进行处理,然后将结果反馈给服务查找模块;最后,服务质量监控模块会对当前运行的服务质量进行分析,并将相关的数据通过消息队列传递给其他模块。

该体系结构由四大模块组成:服务注册、服务发现、依赖查询服务和应用部署。首先,业务注册中心负责接受外界的业务登记申请,根据业务类型、所属微服务类型等信息,对业务进行合理的分配。其次,通过对服务注册库所获得的服务进行检索,并对其进行登记,并向其提供元数据(如名称、协议、端口等)。第三,基于服务依存的查询服务主要用于解决该架构中出现的某些特定问题,比如,在同一微服务系统中,也可以同时具有多个服务相关性,此时,可以利用服务依存查询服务对其进行辅助定位。最后,应用程序部署系统会根据已有的规则,为每一个微服务产生一个唯一的ID识别码,供后续的维护使用。

此外,为了提高系统的可用性和稳定性,还需要考虑以下几点:①服务注册中心应能够处理来自不同来源的服务注册请求,例如用户可以通过浏览器、API接口或消息队列等多种方式向服务注册中心提交注册请求;②服务发现服务需要对注册进来的服务进行过滤,确保它们不会重复注册,并且只会与其他已注册的服务发生依赖关系;③服务发现服务需要实时监控各个微服务系统的运行状态,以便及时发现故障并做出响应;④服务依赖查询服务需要具备一定的容错能力,当出现网络故障或服务变更等情况时,仍能正常完成依赖发现任务;⑤应用部署系统需要具备良好的可扩展性,以适应系统不断发展变化的需求。

结语:本文通过对微服务系统中服务依赖发现技术进行分析研究,总结出了目前流行的3种服务依赖发现技术的优缺点及适用场景;然后基于数据驱动思想设计了基于SOA协议栈的分布式服务依赖发现框架,并对该框架的性能进行了评估。实验结果表明,相比于其他两种技术,基于SOA协议栈的分布式服务依赖发现框架能够更高效地发现微服务系统中的服务依赖信息,且具有较好的扩展性和可维护性。

参考文献:

[1]付楠,程光,滕跃等.基于非侵入式数据采集的微服务依赖关系发现方法[J].网络空间安全科学学报,2023,1(02):112-121.

[2]张齐勋,吴一凡,杨勇,贾统,李影,吴中海.微服务系统服务依赖发现技术综述[J].软件学报,2024,35(01):118-135.

[3]张伟达.基于服务关联网络的服务发现技术研究[D].北方工业大学,2021.