微服务架构服务治理:服务注册中心+服务发布与注册+服务发现与调用+服务监控

article/2025/10/29 12:44:26

目录

一、服务注册中心:注册中心核心功能+实现策略

1.注册中心核心功能

2.注册中心实现策略

二、服务发布与注册

三、服务发现与调用

四、服务监控

基本思路:日志埋点

基本目标:

基本定位:

基本策略:

具体实现:

参考书籍、文献和资料:


服务治理在面临系统存在大量服务时可以解决基本的三大定位问题:提升服务架构的可扩展性;有效的服务监控和故障定位;对服务的有效划分和路由。在技术实现上,服务治理一般表现为服务发布与订阅机制以及实现该机制的服务注册中心。

各个微服务需要通过服务治理实现自动化的注册和发现。服务治理的需求来自于服务的数量。为了实现微服务架构中的服务注册和发现,通常都需要构建一个独立的媒介来管理服务的实例,这个媒介一般被称为服务注册中心。

一、服务注册中心:注册中心核心功能+实现策略

主要充当服务注册和服务发现服务器的作用,不但是路由信息的存车仓库,也是服务提供者和服务消费者进行交互的媒介。

1.注册中心核心功能

(1)注册中心具备发布-订阅功能,体现在服务提供者可以根据服务的元数据发布服务,而服务消费者则通过自己感兴趣的服务进行订阅并获取包括服务地址在内的各项元数据。

(2)布-订阅功能还体现在数据变更推送,即当注册中心服务定义发生变化时,主动推送变更到该服务的消费者从而实现间接路由。

(3)需要确保数据的一致性,在任何时候服务提供者和服务消费者都应该看到同一份数据。

(4)为了确保服务高可用性,一般也需要注册中心保持高可用性,也就意味着注册中心需要构建对等集群。

对等集群,Peer-to-Peer Server Clusgter,指集群中所有服务器都提供同样的服务,客户端只连接一个服务器完成注册和发现即可,任何一台服务器宕机都不影响客户端的正常使用。

(5)作为注册中心的客户端程序,一般对嵌入在服务提供者和服务消费者的应用程序中。

在应用程序运行时,服务提供者的注册中心客户端程序会向注册中心注册自身提供的程序,而服务消费者的注册中心客户端程序则从注册中心查询当前订阅的服务信息并周期性的刷新服务状态。

(6)服务消费者需配备缓存机制以加速服务路由,提高服务路由的效率和容错性,更重要的是,当服务注册中心不可用时,服务消费者可以利用本地缓存路由实现对现有服务的可靠调用。

可以对注册中心进行抽象建模如下图,客户端可以是服务提供者也可以是服务消费者。

2.注册中心实现策略

在实现流程图上,服务提供者和服务消费者可以使用一定的通信机制与注册中心服务器建立连接并维持心跳检测,通过注册中心提供的操作接口分别完成发布和动态更新服务定义、获取制定服务地址列表、取消服务发布、获取服务地址更新等功能。同时,注册中心的服务监听机制确保消费者能够实时监控服务更新状态。

具体流程如下图:

二、服务发布与注册

服务发布的目的是为了暴露服务访问的入口,是一个通过构建网络连接并启动端口监听请求的过程。服务发布注册流程如下:

1.发布启动器:确定服务发布形式并启动发布平台。

(1)服务发布形式常见的有三种:配置化+API调用+使用注解,各有利弊。

配置化:通过以XML为代表的配置化工具,服务框架对业务代码零侵入,扩展和修改方便,同时配置信息修改能够实时生效。

API调用:服务框架对业务代码侵入性较强,修改代码之后需要重新编译才能生效。

注解方式:服务框架对业务代码零侵入,扩展和修改比较方便,但修改配置需要编译才能生效。

一般我们倾向于使用配置方式,但涉及系统之间集成时,需要使用服务框架中较底层的服务接口,API调用有可能是唯一选择。

(2)发布平台的启动与所选择的发布方式密切相关。

使用配置化发布时:通常会借助诸如Spring的容器进行服务实例的配置和管理,容器的正常启动意味着发布平台的启动。

使用API调用时:简单使用main函数进行启动。

使用注解方式时:与使用配置化发布启动是类似的。

2.动态代理

在实现远程调用时必然会添加动态代理功能,通过动态代理来实现对服务发布进行动态拦截,可以对服务发布行为本身进行封装和抽象,同时也便于扩展和定制化。

JDK自带的Proxy机制和诸如javassist的字节码编辑库都可以实现动态代理。

3.发布管理器

在流程中充当承上启下的门户Facade作用,一方面,获取协议服务器中生成的服务URL信息并发布到注册中心,另一方面,负责通知发布启动器本次发布是否成功。

4.协议服务器

是真正实现服务器创建和网络通信的组件,主要作用在于确定发布协议以及根据该协议建立网络连接、并管理心跳、断线重连、端口绑定与释放。常见的协议包括HTTP、RMI、Hessian等。

5.注册中心

主要用于保存和更新服务的地址信息。

三、服务发现与调用

较服务发布与注册而言,服务发现与调用是一个导入的过程,基本和服务发布与注册是对称结构流程:

1.调用启动器

确定服务的调用形式并启动调用平台,与发布启动器一样。

2.动态代理

完成本地接口到远程调用的转换,导入服务提供者接口API和服务信息并生成远程服务的本地动态代理对象,将本地API调用转换成远程服务调用并返回调用结果。

3.调用管理器

具备缓存功能,保存服务地址的缓存信息。当从注册中心获取服务提供者地址信息时,调用管理器根据需要更新本地缓存,确保在注册中心不可用的情况下,调用启动器仍然可以从本地缓存中获取服务提供者的有效地址信息。

4.协议客户端

根据服务调用指定的协议类型创建客户端并发起连接请求,负责与协议服务器进行交互并获取调用结果。

5.注册中心

主要用于保存和更新服务的地址信息。

四、服务监控

如图,在微服务架构中的服务调用中,服务中间件、数据库、缓存、文件系统以及其他服务之间都有可能存在依赖关系,为了确保系统运行时这些依赖关系的稳定性和可用性,服务调用路径、服务调用的业务数据、服务性能数据都是需要监控的内容,以便于系统定位和防御故障问题。 

基本思路:日志埋点

1.使用跟踪ID作为一次完整应用调用的唯一标识,然后将该次调用的详细信息通过日志的方式进行保存。

2.日志埋点分为客户端埋点和服务器埋点

客户端埋点:关注于跟踪ID、客户端IP、调用方接口、调用时间等信息。

服务器端埋点:关注于跟踪ID、调用方上下文、服务端耗时、处理结果等信息。

3.日志埋点的作用分为两类

一类用于服用调用跟踪把所有请求过程的日志能够关联起来;

一类用于统计各服务的处理时间,一般通过记录服务调用的开始时间和结束时间计算并统计时间延迟。

4.针对日志埋点产生的海量运行时数据,通常需要专门的工具进行处理埋点数据。

基于Hadoop、Storm、Spark等技术的离线/实时批量处理框架;

基于Elastic Search、Solr的垂直化搜索引擎;

专门的Flume/ELK等日志处理框架

5.在日志埋点过程中也可以使用抽样思想,并一定将所有的场景都进行日志埋点。

基本目标:

保障线上服务运行质量,治理的对象是基于统一分布式服务框架开发的各项业务数据。

基本定位:

关注服务运行时的状态、细粒度治理等。

基本策略:

服务限流、降级、服务动态路由和灰度发布等。

具体实现:

采用通过注册中心对服务以来进行分析,结合运行时调用关系,梳理不合理的依赖和调用路径,优化服务架构;

实时收集服务调用日志,分析、汇总、存储和展示,方便开发和运维人员进行实时诊断;

执行服务运行时治理方案,包括限流降级、路由、统一配置等在线调整。

参考书籍、文献和资料:

【1】郑天民. 微服务设计原理与架构. 北京:人民邮电出版社,2018.


http://chatgpt.dhexx.cn/article/X67nBJB6.shtml

相关文章

zabbix 监控 windows 服务器

zabbix 监控 windows 服务器 步骤: 1.确定zabbix服务器的IP地址和 zabbix 版本 2.官网下载对应版本的zabbix-agent或 3.在要监控的windows服务器中安装zabbix-agent 4.在zabbix配置里添加windows主机第一步:确定zabbix服务器的IP地址和 zabbix 版本 如…

java监听服务器信息,java实时监控服务器状态

java实时监控服务器状态 内容精选 换一换 监控是保持弹性云服务器可靠性、可用性和性能的重要部分,通过监控,用户可以观察弹性云服务器资源。为使用户更好地掌握自己的弹性云服务器运行状态,公有云平台提供了云监控。您可以使用该服务监控您的弹性云服务器,执行自动实时监控…

使用Grafana+Prometheus配置服务器监控

文章目录 前言一、Grafana安装和配置1.安装2.登录 二、Prometheus安装和配置1.安装1.1 配置系统服务 2.查看服务 三、node_exporter安装和配置1.安装1.1 配置系统服务 2.修改prometheus.yml配置3.查看服务 四、Grafana配置prometheus1.配置数据源2.导入首页模板 前言 最近项目…

springboot2.x中的服务监控

想给服务添加一个监控,看看网上各位前辈的,基本都是基于springboot1.x的,springboot升级到2.0以后和1.x还是有很多不一样的,那么2.0以后怎么使用admin监控呢? 先看下图的managment.security.enable,现在已经…

cacti监控服务器性能,cacti监控服务器

cacti监控服务器 内容精选 换一换 博文目录一、Cacti1、Cacti简介2、cacti的作用和特点3、cacti监控的数据类型二、安装配置Cacti监控服务器1、配置LAMP环境2、安装SNMP和RRDtooll工具3、部署英文cacti连接mariadb4、客户端访问英文cacti的WEB界面5、部署中文cacti连接maria 来…

Grafana + prometheus在Centos搭建服务器监控系统(三)--配置监控Nginx

部署并配置nginx-module-vts 参考我之前的文章: Linux下Nginx配置nginx-module-vts_allen的博客-CSDN博客 配置nginx-vts-exporter exporter会收集nginx性能指标的JSON格式数据,并汇总后暴露监控接口给Prometheus。 cd /data/program wget -c https…

shell脚本实现服务监控报警并重启

第一篇 使用crontab指令的shell脚本实现服务监控报警重启 这两天做了一个服务监控报警重启的脚本。本质就是用一个shell命令去监控服务状态,如果宕机就会自动重启,并向指定邮箱发送邮件对管理人员进行提醒,再使用crontab命令设置每隔一分钟…

Zabbix +Grafana 服务器监控体系

无监控,不运维。废话不多说,下面都是干货 官方地址: https://www.zabbix.com/cn/download 声明 使用的是zabbix6.0.7版本。Mysql 8.0.26。演示使用的系统镜像为rocky linux 8.6 --------------------------------------------Zabbix--------…

SpringBoot整合Admin服务监控(图文详细)

SpringBoot整合Admin服务监控组件 1 SpringBootAdmin 简介 1.1 概述 SpringBootAdmin 是一个非常好用的监控和管理的开源组件,该组件能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功…

windows下的文件服务器监控

windows下的文件服务器监控 一、使用Windows自带的管理工具进行查看当前服务器连接的用户及打开的文件,但是该功能比较简单,无法对文件进行监控,比如什么时间哪个用户连接到共享文件夹对该文件夹的文件进行过什么操作。 二、使用工具软件 …

java项目实现服务器监控,Java实现服务器状态监控

Java实现服务器状态监控 内容精选 换一换 云容器实例(Cloud Container Instance,CCI)服务提供 Serverless Container(无服务器容器)引擎,让您无需创建和管理服务器集群即可直接运行容器。Serverless 是一种架构理念,是指不用创建和管理服务器、不用担心服务器的运行状态(服务…

安利一款免费、开源、实时的服务器监控工具:Netdata

Netdata 是一个免费、开源、实时的服务器监控工具,可以可视化和监控实时数据,如 CPU 使用率、RAM 使用率、负载、SWAP 使用率、带宽使用率、磁盘使用率等。它可以帮助系统管理员了解您的系统或应用程序中正在发生的事情以及刚刚发生的事情。它可以安装在…

Spring Boot服务监控(Prometheus)

哲学 最近看到了一句话:定乎内外之分 辩乎荣辱之境。 一个外国作家也说过: 我生命里的的最大突破之一,就是我不再为别人的看法而担忧。此后,我真的能自由的去做我认为对自己最好的事,只有在我们不需要外来的赞许时&…

几种服务器监控系统,几种服务器监控系统

几种服务器监控系统 内容精选 换一换 设置“云服务器名称”。名称可自定义,但需符合命名规则:只能由中文字符、英文字母、数字及“_”、“-”、“.”组成。如果同时购买多台弹性云服务器,系统会自动按序增加后缀。一次创建多台弹性云服务器时…

无线监控设置smtp服务器,监控smtp服务器

监控smtp服务器 内容精选 换一换 华为云提供了云监控服务,您可以使用该服务监控弹性云服务器,在您开通了弹性云服务器后,云监控服务将自动实时监控并根据您设置的告警预置触发告警和通知,帮助您更好地了解弹性云服务器的各项性能指…

对微服务的监控的两种办法(springbootAdmin、prometheus+grafana)

1、springboot-admin实现对服务的监控 一、actuator客户端(即每一个需要监控的微服务) 1、在业务微服务中引入jar包 <!-- 引入Actuator监控依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-…

语言模型BERT理解

一、BERT概述 BERT是由Google在2018年提出的一种预训练语言模型。BERT的创新之处在于采用了双向Transformer编码器来生成上下文相关的词向量表示。 传统的单向语言模型只考虑了左侧或右侧的上下文信息&#xff0c;而BERT则同时考虑了左侧和右侧的上下文信息&#xff0c;使得生…

【BERT类预训练模型整理】

BERT类预训练模型整理 1.BERT的相关内容1.1 BERT的预训练技术1.1.1 掩码机制1.1.2 NSP&#xff08; Next Sentence Prediction&#xff09; 1.2 BERT模型的局限性 2. RoBERTa的相关内容2.1 RoBERTa的预训练技术2.1.1动态掩码&#xff08;Dynamic Masking&#xff09;2.1.2取消N…

(四)目标检测yolov5-6.0模型训练

安装好yolov5-6.0环境后 1.数据结构格式 文件夹结构&#xff1a;新建coco128 images文件夹下的train与val都是图像 labels文件夹下的train与val都是yolo格式的txt标签文件 2.修改配置文件 第一个需要修改的文件data/coco128.yaml 修改数据集路径&#xff1a; 例如&#xf…

caffe 训练自己的分类模型

学习caffe的最终目的&#xff0c;是可以利用自己的数据集&#xff0c;训练模型&#xff0c;并解决实际问题。 所以在前面跑通了mnist和cifar-10例程的基础上&#xff0c;尝试训练自己的模型&#xff0c;从头到尾走一遍所有的流程。准备数据、训练并得到模型&#xff0c;利用模…