服务注册与发现流程

简介: 本文介绍微服务中客户端负载均衡的核心机制——服务注册与发现。通过引入注册中心(如Nacos),服务提供者注册信息,消费者从注册中心获取实例列表,并基于负载均衡策略选择实例调用。服务定期上报心跳,实现健康检测与动态上下线,确保调用的高可用性。(238字)

接下来我们讲的服务注册与发现流程正是用于实现客户端负载均衡。
首先引入注册中心的概念。
在微服务远程调用的过程中,包括两个角色:
● 服务提供者:提供接口供其它微服务访问,比如item-service
● 服务消费者:调用其它微服务提供的接口,比如cart-service
在大型微服务项目中,服务提供者的数量会非常多,为了管理服务提供者就引入了注册中心的概念。
三者的分工如下:
1 注册中心:提供服务注册接口,接收服务注册请求,保存服务实例的信息。
目前开源的注册中心中间件有很多,国内比较常见的有:
● Eureka:Netflix公司出品,目前被集成在SpringCloud当中,一般用于Java应用
● Nacos:Alibaba公司出品,目前被集成在SpringCloudAlibaba中,一般用于Java应用,我们项目使用Nacos。
● Consul:HashiCorp公司出品,目前集成在SPringCloud中,不限制微服务语言
2 服务提供者:服务接口提供方,请求注册中心将服务信息注册到注册中心。
3 服务调用者:远程调用的客户端,请求注册中心查询服务地址,通过负载均衡选取目标服务地址进行远程调用。
服务注册与发现流程如下:
● 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心
● 调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)
● 调用者作为客户端自己通过负载均衡算法挑选一个服务提供者实例进行远程调用,即客户端负载均衡
● 调用者向该实例发起远程调用
当服务提供者的实例宕机或者启动新实例时,调用者如何得知呢?
● 服务提供者会定期向注册中心发送请求,报告自己的健康状态(心跳请求)
● 当注册中心长时间收不到提供者的心跳时,会认为该实例宕机,将其从服务的实例列表中剔除
● 当服务有新实例启动时,会发送注册服务请求,其信息会被记录在注册中心的服务实例列表
● 当注册中心服务列表变更时,会主动通知微服务,更新本地服务列表

相关文章
|
6月前
|
机器学习/深度学习 存储 知识图谱
🫗 知识蒸馏
知识蒸馏是一种模型压缩技术,通过将大模型(教师)的知识迁移到小模型(学生)中,实现高效推理与良好性能的平衡。核心思想是利用教师模型的输出概率分布(软标签)指导学生模型训练,结合温度机制平滑分布,保留类别间关联信息。常用KL散度衡量软标签差异,并融合硬标签损失提升泛化能力。可分为黑盒(仅用输出)与白盒(用中间特征)蒸馏,广泛应用于模型轻量化场景。
444 0
 🫗 知识蒸馏
|
IDE Java Maven
idea2020版Maven依赖成功导入但仍然报错找不到包解决
idea2020版Maven依赖成功导入但仍然报错找不到包解决
2323 0
idea2020版Maven依赖成功导入但仍然报错找不到包解决
|
消息中间件 安全 API
记项目的一次发送短信及短信模板配置分享
我们日常使用的软件或者网站,大部分都在使用短信业务,比如 注册 、 验证码功能 。还有一些特定的业务需要发送短信通知国内外用户等。有了需求就会有平台提供服务,国内有很多互联网公司都提供短信业务,比如阿里云、腾讯云、七牛。本次我们主要讲解的是阿里云提供的短信服务。
记项目的一次发送短信及短信模板配置分享
|
5月前
|
Java
org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
SpringBoot项目启动报错YAML编码异常,通常因文件编码不一致导致。将IDEA中File Encodings设为UTF-8并重建项目(Rebuild Project)即可解决。
382 4
|
6月前
|
Java Nacos 数据安全/隐私保护
ruoyi 微服务版本
若依(RuoYi-Cloud)是基于Spring Boot、Spring Cloud与Alibaba的分布式微服务权限管理系统,支持Vue3前端。含网关、认证、系统、监控等模块,集成Nacos、Sentinel,提供代码生成、定时任务等功能,适用于快速构建企业级云架构应用。
|
负载均衡 Java 开发者
OpenFeign的工作原理
OpenFeign的工作原理
ruoyi-nbcio使用minio相关配置与应用
ruoyi-nbcio使用minio相关配置与应用
713 0
ruoyi-nbcio使用minio相关配置与应用
|
XML JSON JavaScript
JSON对象的stringify()和parse()方法使用
本文阐述了JSON对象的`stringify()`和`parse()`方法的用法,包括如何将JavaScript对象转换为JSON字符串,以及如何将JSON字符串解析回JavaScript对象,并讨论了转换过程中需要注意的事项。
JSON对象的stringify()和parse()方法使用
|
算法 Nacos
Nacos遇到的无法下线问题,caused: errCode: 500, errMsg: do metadata operation failed ;caused: com.alibaba.naco
Nacos遇到的无法下线问题,caused: errCode: 500, errMsg: do metadata operation failed ;caused: com.alibaba.naco
【1】ElementUI 组件实际应用===》按钮的使用
这篇文章详细介绍了Element UI库中的按钮组件的使用方法,包括基础用法、禁用状态、文字按钮、图标按钮、按钮组、加载中状态、不同尺寸的按钮以及按钮的属性说明。文章通过实例代码展示了如何定义按钮样式、添加图标、设置按钮尺寸和类型,并解释了如何绑定方法到按钮以执行操作。

热门文章

最新文章