首页 > 其他分享 >分布式系统架构2:服务发现

分布式系统架构2:服务发现

时间:2024-12-16 19:31:19浏览次数:6  
标签:负载 服务 中心 实例 注册 分布式系统 架构 客户端

1.概念

服务发现指的是分布式系统中,服务实例动态注册自己的信息到注册中心,其他服务能发现这些实例的位置,实现服务间通信。

为什么需要服务发现?

对于分布式应用来说,服务发现不是可选项,而是必须的。主要目的是让服务实例能相互识别和通信,确保系统在动态扩容、缩容和故障恢复时仍能正常运行。

2.组成

由注册中心和消费者组成

  • 注册中心Service Registry:服务实例将自己的元数据(IP、端口、健康状态等)注册到注册中心。维护一个服务注册表,记录所有可用服务的信息
  • 消费者Consumer:从注册中心获取目标服务的位置信息(服务实例列表),通过负载均衡选择一个实例进行通信。

3.两种发现模式

3.1客户端发现模式

概念:客户端负责确定可用服务的网络位置和请求负责均衡。

过程:客户端查询注册中心获取实例列表,接着客户端用负载均衡算法选择一个可用服务实例发出请求。如图:

在这里插入图片描述

Netflix OSS 提供了一个很好的客户端发现模式示例。Netflix Eureka 是一个服务注册中心,它提供了一组用于管理服务实例注册和查询可用实例的 REST API。Netflix Ribbon 是一个 IPC 客户端,可与 Eureka 一起使用,用于在可用服务实例之间使请求负载均衡。

优点:轻量级

缺点:需要客户端实现服务发现逻辑,代码复杂了。

3.2服务端发现模式

过程:客户端通过负载均衡器(如:Nginx或API Gateway)向服务发出请求,负载均衡器查询注册中心获取实例信息,然后将请求转发给合适的服务实例

在这里插入图片描述

案例:AWS Elastic Load Balancer(ELB)是一个服务端发现路由示例

优点:客户端不再关心服务发现的细节,只需要将请求发给负载均衡器

缺点:需要部署负载均衡器,保障高可用

4.注册中心

注册中心的作用是一个包含了服务实例网络位置的数据库。本身需要具备高可用性,通常通过分布式一致性协议(如Raft、Paxos)来保证数据的一致性和可靠性。

比如:Netflix Eureka,它提供了一个用于注册和查询服务实例的 REST API。

服务实例使用 POST 请求注册其网络位置。每隔 30 秒使用 PUT 请求刷新其注册信息。通过使用 HTTP DELETE 请求或实例注册超时来移除注册信息。

客户端可以使用 HTTP GET 请求来检索已注册的服务实例。

其他的注册中心:etcd,Consul,Zookeeper这些,我在后面的文章中学习后再写出来

5.服务注册的方式

5.1 主动注册Self-Registration

过程:服务实例启动后,主动将自己的信息注册到服务注册中心。并通过发送心跳请求来防止注册信息过期。

适用场景:微服务架构中,服务实例与注册中心直接交互

在这里插入图片描述

示例:

  • Eureka
    • Spring Cloud中,服务通过 @EnableEurekaClient 注解实现主动注册。
    • 服务启动时向Eureka Server注册自身的元数据信息(IP、端口、健康状态等)。

优点:实现简单,由服务自己掌握注册逻辑;

缺点:服务代码耦合了注册中心逻辑,增加服务端复杂度,且注册中心故障可能影响服务启动。

5.2被动注册(Third-Party Registration)

又叫第三方注册,原理:服务实例本身不负责注册操作,而是通过外部代理或监控组件检测到服务的状态,当检测到新的可用服务实例时,然后将其注册到服务注册中心。

在这里插入图片描述

示例:

Kubernetes

  • 使用kubelet定期监测Pod的状态,并将Pod的网络信息注册到Kubernetes的Service中。

优点:服务实例与注册逻辑解耦,服务代码无侵入。适用于现有服务

缺点:依赖第三方组件,注册的实时性较低于主动注册

6. 总结服务发现的核心流程

  • 服务注册:服务启动时向注册中心注册自身的元数据。
  • 心跳检测:服务持续发送健康状态给注册中心,确保可用性。
  • 服务发现:消费者从注册中心获取服务实例信息。
  • 服务调用:消费者选择合适的实例进行调用(客户端负载均衡或服务端负载均衡)。
  • 服务注销:服务关闭时从注册中心注销自己的信息。

7.框架对比

面试过程中可能还会文档服务发现框架的区别,以及选型依据,可以提前准备一些框架的内容,这里简单列一下:

服务注册与发现框架 语言支持 一致性 健康检查 配置复杂性 性能 数据持久化 功能丰富度
Eureka Java 支持 简单 不支持 中等
Zookeeper 多语言 不支持 复杂 支持 中等
Consul 多语言 支持 简单 支持
Etcd 多语言 支持 复杂 支持 中等
Nacos 多语言 支持 简单 支持
DNS(K8S) 多语言 支持 中等

标签:负载,服务,中心,实例,注册,分布式系统,架构,客户端
From: https://www.cnblogs.com/dnboy/p/18611006

相关文章

  • 阿里云服务器-centos7-ARL灯塔搭建
    以阿里云centos7服务器为例,快速搭建arl灯塔系统一、安装doker环境已有doker环境的可以更新或者跳过,自行操作没有安装过doker环境的参考以下步骤:1.1安装docker所需要的依赖包yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2这是一个在基于yum包管理器的Li......
  • ITSM:卓越 IT 服务台的六大关键要素
    六大关键要素清晰沟通:仔细倾听用户需求和关切,用通俗易懂的语言解释技术解决方案,并定期更新正在处理问题或请求的状态。主动解决问题:在问题发生前预测潜在问题,确定反复出现问题的根本原因,并尽可能实施预防措施。知识管理:维护一个包含最佳实践、程序和故障排除指南的集中式知识......
  • 服务器插内存条
    1.介绍内存条是数量不同对应不同的插卡顺序插入顺序跟主板的类型有关,不同型号的主板对应不同的插法 2.查看主板类型1)查看主板信息dmidecode-tbaseboard2)查看主板型号dmidecode-t baseboard|grep'ProductName:'|awk-F:'{print$2}'  3.某些对应关系一定......
  • Mysql端口转发实现跨服务器跨网络实现mysql访问
    端口可以通过Nginx进行转发,针对您提到的A、B、C三台服务器的网络状况和需求,可以通过Nginx在B服务器上配置端口转发,使得A服务器能够通过B服务器访问C服务器上的数据库。以下是实现这一目标的步骤:一、确认Nginx模块支持Nginx实现TCP端口转发,需要依赖stream模块。因此,需要确认Ngin......
  • 微服务之session服务状态&无状态服务
    无状态服务与Session管理的挑战无状态服务概念:在微服务架构中,无状态服务是一种设计理念,即服务在处理请求时不依赖于之前请求所留下的任何信息。每个请求都包含了服务处理该请求所需的全部信息,服务对请求进行处理后,不会在自身内部存储与该请求相关的任何状态信息。例如,一个无状......
  • 微服务部署:蓝绿发布、滚动发布、灰度发布、金丝雀发布
    蓝绿发布(Blue-GreenDeployment)详细流程环境搭建:首先创建两个完全相同的生产环境,分别称为蓝环境和绿环境。这两个环境在服务器配置、软件版本、网络设置等方面完全一致。例如,在一个微服务架构的电商系统中,蓝环境和绿环境都包含商品服务、订单服务、用户服务等微服务,且每个......
  • 云计算服务的不同类型:IaaS、PaaS、SaaS、Maas、Caas 或 Xaas
    基础设施即服务(IaaS)详细介绍资源提供形式:IaaS主要提供物理或虚拟的计算资源,包括服务器、存储设备、网络设备等硬件设施。用户可以像使用本地硬件一样对这些资源进行操作,例如,在租用的云服务器上安装操作系统、配置网络环境、部署数据库等。像阿里云的ECS(弹性计算服务)就是典型......
  • 为什么微服务一定要有网关
    服务发现与路由服务发现简化:在微服务架构中,服务的数量众多且可能动态变化。微服务网关作为所有微服务的统一入口,可以集成服务发现机制。它能够自动发现新上线的微服务或者感知到下线的微服务,客户端无需关心微服务的具体位置和网络细节。例如,在一个基于容器编排的微服务环境中,......
  • 服务注册与发现:Zookeeper、Eureka、Consul、Nacos
    Zookeeper功能特点数据一致性保障:Zookeeper是一个分布式协调服务,它基于ZAB(ZookeeperAtomicBroadcast)协议来保证数据的一致性。在分布式系统中,多个节点可以通过Zookeeper来共享配置信息、实现分布式锁等功能。例如,在一个分布式集群中,不同节点对于任务的分配和执行顺序可以......
  • 为什么微服务需要配置中心?
    微服务配置中心的作用集中管理配置:在微服务架构中,众多微服务可能有各种各样的配置参数,如数据库连接信息、日志级别、缓存配置等。配置中心能够将这些分散在各个微服务中的配置信息集中存储和管理。例如,一个电商系统可能包含商品服务、订单服务、用户服务等多个微服务,每个微服......