部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务架构中的服务注册与发现

微服务架构中的服务注册与发现

原创
作者头像
windealli
发布于 2024-06-13 08:49:23
发布于 2024-06-13 08:49:23
2.8K0
举报
文章被收录于专栏:windealliwindealli

一、服务注册与发现的基本概念

1. 为什么需要服务注册与发现

服务注册与发现是来自于微服务架构的产物, 微服务架构将一个大型应用程序拆分成多个小型、独立的服务,每个服务可能有多个实例,这些实例可能会动态的上线、下线、迁移,因此需要一种机制能够记录和发现这些服务实例的信息,这就是为什么需要服务注册与发现。

如图,Service Client 涉及四个服务的调用,这四个服务分别当前有两个实例,运行过程中还会发生变化,那么Service Client在调用是如何确定访问哪个实例地址?

2. 什么是服务注册与服务发现

  • 服务注册(Service Registration): 服务注册是指服务提供者将自己的元数据信息(通常包括主机和端口号,有时还有身份验证信息,协议,版本号,以及运行环境的信息。)注册到服务注册中心的过程。
  • 服务发现(Service Discovery): 服务发现是指服务消费者(客户端)在需要调用服务时,通过查询服务注册中心获取服务提供者的服务实例信息的过程。服务消费者根据获取到的服务实例列表,选择合适的服务实例进行调用。 服务发现使得服务消费者无需预先知道服务提供者的具体地址,而是在运行时动态地获取服务实例信息,实现了服务间的松耦合。

二、服务注册与发现的工作模式

1. 服务注册

服务注册有两种模式

  • 自注册模式: 也称为客户端/直连模式,服务消费者直接与注册中心交互,获取服务提供者的地址信息。这种方式下,服务消费者需要编写代码来与注册中心通信,并实现负载均衡逻辑。客户端模式的优点是直接控制服务发现过程,但缺点是需要修改代码,对跨平台支持不够友好。
  • 代理模式: 也称为服务端模式,服务消费者通过一个代理(如API网关或服务发现代理)来获取服务提供者的地址信息。这种方式下,服务消费者不需要修改代码,因为所有的服务发现逻辑都由代理处理。服务端模式的优点是跨平台友好,易于维护,但缺点是增加了代理服务的复杂性和可能的性能开销。

2. 服务发现

  • 客户端发现模式 **客户端负责确定服务提供者的可用实例地址列表和负载均衡策略。**客户端从服务注册中心获取目标服务的所有可用实例信息列表,然后基于负载均衡策略选择一个发送访问请求。
  • 服务端发现模式 服务客户端通过路由器(或者负载均衡器)访问目标服务。路由器负责查询服务注册表,获取目标服务实例的地址列表转发请求。

三、服务注册与发现的关键技术

1. 服务注册中心的设计与实现

服务注册中心的设计与实现主要涉及以下几个关键技术:

  • 数据存储:服务注册中心需要能够存储大量的服务实例信息,因此需要一个高效、可扩展的数据存储系统。这通常可以通过使用分布式数据库或者内存数据网格等技术来实现。
  • 网络通信:服务注册中心需要能够处理大量的网络请求,包括服务注册请求、服务发现请求以及健康检查请求等。这通常可以通过使用高效的网络编程模型,如事件驱动模型或者异步IO模型来实现。另外,需要定义服务提供者与注册中心之间的通信协议,如RESTful API、gRPC或Thrift,以实现高效、稳定的数据传输。
  • 服务健康检查:在微服务架构中,服务实例的数量和网络地址都是动态变化的。服务注册中心需要定期对注册的服务进行健康检查,以确认服务是否还在运行。这通常可以通过使用心跳机制或者租约机制来实现。
  • **高可用/分布式:**如果服务注册中心发生故障,可能会导致整个系统的服务发现功能失效。在分布式架构中,CAP理论(一致性、可用性、分区容错性)提供了一个理论框架来指导服务注册与发现的设计。通过合理选择一致性、可用性和分区容错性的平衡点,可以优化服务注册与发现的性能和可靠性

2. 服务发现机制的设计与实现

服务发现机制的设计与实现主要涉及以下几个关键技术:

  • 服务查询:服务发现机制需要能够根据服务名称查询出对应的服务实例信息。这通常可以通过使用高效的数据查询算法,如哈希查找或者树形查找等来实现。
  • 负载均衡:在多个相同的服务实例中,服务发现机制需要能够选择一个合适的实例进行调用。这通常可以通过使用负载均衡算法,如轮询、随机或者最少连接等来实现。
  • 服务降级与熔断:当被调用的服务出现故障时,服务发现机制需要能够进行服务降级或者熔断,以保证系统的稳定性。这通常可以通过使用降级与熔断框架,如Hystrix或者Resilience4j等来实现。

四、常见的服务注册与发现框架

1. Eureka

Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。也是Spring Cloud体系中的重要组件之一。

  • 优点: Eureka可以很好地与其他Spring Cloud组件进行集成,使用和配置简单。Eureka还有一个自我保护的机制,当Eureka Server节点在短时间内丢失过多客户端时,Eureka Server会进入自我保护模式,不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。
  • 缺点: Eureka自我保护模式可能会让客户端获取到不可用的服务实例信息。另外,Eureka不支持跨语言,只能在Java环境中使用。

2. Zookeeper

Zookeeper是Apache的一个开源项目,它提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

  • 优点: Zookeeper提供了一种中心化的服务,用于维护配置信息、命名、提供分布式同步和提供组服务。Zookeeper的设计目标是将这些复杂的服务封装起来,构造一个简单的接口给分布式应用使用。
  • 缺点: Zookeeper的CP特性使其在出现网络分区时可能无法提供服务。另外,Zookeeper的API使用起来相对复杂,学习成本较高。

3. Consul

Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。Consul内置了服务注册与发现框架,支持健康检查,并且支持多数据中心。

  • 优点: Consul支持健康检查,可以防止向失败的服务发送请求。Consul的多数据中心支持使其在构建更大规模的分布式系统时具有优势。
  • 缺点: Consul的一些高级功能的使用和配置相对复杂。

4. Etcd

Etcd是一个开源的、基于Raft协议的分布式键值存储系统,由CoreOS开发,主要用于共享配置和服务发现。

  • 优点: Etcd使用Raft协议,保证了数据的一致性。Etcd支持SSL,可以保证数据的安全性。
  • 缺点: Etcd的性能相比Zookeeper和Consul要差一些。

5. Nacos

Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  • 优点: Nacos支持几乎所有主流类型的服务的发现、配置和管理,更加适合云原生应用场景。Nacos提供了简单易用的UI界面,方便管理和操作。Nacos支持数据持久化,避免了数据的丢失。
  • 缺点: Nacos是阿里巴巴内部使用的产品,对于一些特定的业务场景可能需要进行定制化开发。

6. 基于DNS

DNS(域名系统)也可以用于服务注册与发现。在Kubernetes(简称K8S)云原生环境中,基于DNS的服务注册与发现是一种非常实用且广泛采用的机制。Kubernetes通过其内置的服务发现和DNS插件,使得服务间的通信变得简单而高效。

  • 优点
    • 跨语言和平台:DNS是一个广泛支持的标准协议,几乎所有的操作系统和编程语言都有DNS客户端实现,因此基于DNS的服务发现具有很好的跨语言和平台特性。
    • 易于集成:由于DNS的通用性,基于DNS的服务发现可以快速集成到现有的系统中,降低了实现成本。
  • 缺点
    • 性能要求:独立DNS服务器模式对DNS服务器的性能要求较高,特别是在高并发场景下。
    • 单点问题:独立DNS服务器模式存在单点故障问题,而DNS Filter模式虽然解决了单点问题,但增加了应用机器的维护成本

7、几种框架的对比

服务注册与发现框架

语言支持

一致性

健康检查

配置复杂性

性能

数据持久化

功能丰富度

Eureka

Java

支持

简单

不支持

中等

Zookeeper

多语言

不支持

复杂

支持

中等

Consul

多语言

支持

简单

支持

Etcd

多语言

支持

复杂

支持

中等

Nacos

多语言

支持

简单

支持

DNS(K8S)

多语言

支持

中等

五、未来发展趋势

  1. 自动化:随着技术的发展,服务注册与发现的过程将更加自动化。例如,新的服务可以自动注册到服务注册中心,而客户端可以自动发现这些服务。
  2. 动态性:服务的注册与发现将更加动态。例如,当服务的状态发生变化时,服务注册中心可以实时更新服务的状态,客户端也可以实时发现新的服务。
  3. 容错性:为了保证服务的高可用性,服务注册与发现的容错性将得到提高。例如,当服务注册中心出现故障时,可以自动切换到备用的服务注册中心。
  4. 安全性:随着网络安全问题的日益严重,服务注册与发现的安全性将得到提高。例如,服务注册中心可以对注册的服务进行安全检查,以防止恶意服务的注册。
  5. 云原生:随着云计算的发展,服务注册与发现将更好地支持云原生应用。例如,可以利用云平台提供的服务注册与发现功能,简化服务注册与发现的过程。
  6. 标准化:随着微服务架构的普及,服务注册与发现的标准将逐渐形成,有助于提高微服务的互操作性。
  7. 集成性:服务注册与发现将更好地与其他系统集成,例如,与服务治理、服务监控等系统集成,提高系统的整体性能。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微服务注册中心如何选型?这几个维度告诉你!
那么实际开发中到底如何选择呢?这是一个值得深入研究的事情,别着急,今天陈某就带大家深入了解一下这四类注册中心以及如何选型的问题。
码猿技术专栏
2023/08/10
6680
微服务注册中心如何选型?这几个维度告诉你!
架构设计之微服务注册中心选型
ZooKeeper、Consul、Eureka和新生的Nacos 都实现了注册中心的功能。那么从哪些方面进行对比,进而选型呢?
Bug开发工程师
2019/05/15
1.8K0
微服务架构中的服务注册与发现有哪些?Zookeeper、Eureka、Nacos、Consul 都有什么区别,实现原理是什么?
随着单体应用的拆分,我们面临的首要问题就是采用哪种方式实现服务间的调用,像之前单体应用可能直接在配置或数据库保存调用方的域名 IP 信息等。
码哥字节
2025/01/09
2830
微服务架构中的服务注册与发现有哪些?Zookeeper、Eureka、Nacos、Consul 都有什么区别,实现原理是什么?
微服务注册中心技术选型:5种主流注册中心,哪个最香?
对于注册中心,在写这篇文章前,我其实只对ETCD有比较深入的了解,但是对于Zookeeper和其它的注册中心了解甚少,甚至都没有考虑过ETCD和Zookeeper是否适合作为注册中心。
猫头虎
2024/04/08
4K0
微服务注册中心技术选型:5种主流注册中心,哪个最香?
几种常见的注册中心以及区别
客户端注册是服务自己要负责注册与注销的工作。当服务启动后注册线程向注册中心注册,当服务下线时注销自己。
Java技术债务
2022/08/09
9830
几种常见的注册中心以及区别
四个方面对比微服务注册中心产品
微服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
二哥聊运营工具
2022/07/11
5220
四个方面对比微服务注册中心产品
ZooKeeper、Eureka、Consul 、Nacos微服务注册中心对比
服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
IT大咖说
2019/12/24
8.9K0
ZooKeeper、Eureka、Consul 、Nacos微服务注册中心对比
Nacos架构与原理 - 注册中心的设计原理
目前的网络架构是每个主机都有⼀个独立的 IP 地址,那么服务发现基本上都是通过某种方式获取到服务所部署的 IP 地址。
小小工匠
2023/07/11
7220
Nacos架构与原理 - 注册中心的设计原理
深入理解服务发现:从基础到实践
微服务架构是一种将单一应用程序划分为一组小的服务的架构风格。每个服务都运行在其自身的进程中,服务之间通过轻量级的机制(通常是HTTP资源API)进行通信。这些服务都围绕业务能力构建,并且可以通过全自动部署机制独立地进行部署。此外,这些服务可以用不同的编程语言编写,并使用不同的数据存储技术。
栗筝i
2023/10/16
2.3K0
深入理解服务发现:从基础到实践
注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
还是先讲讲各个中间件的区别,zookeeper已经讲过了,这里开始讲其他中间件的工作原理
卷福同学
2025/01/07
4050
微服务架构究竟应该怎么进行服务发现?
今天这篇,我们主要讲解微服务架构中,为什么需要服务发现,服务发现是什么,服务发现中有哪些重要角色,又有哪些具体发现模式供我们应用实践。
brookwang
2022/06/24
9240
微服务架构究竟应该怎么进行服务发现?
微服务技术栈:常见注册中心组件,对比分析
在分布式架构的系统中注册中心这个概念就已经被提出了,最经典的就是Zookeeper中间件。
知了一笑
2020/06/17
1.4K0
微服务技术栈:常见注册中心组件,对比分析
ZooKeeper、Eureka、Consul 、Nacos,微服务注册中心怎么选?
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/05/27
1K0
ZooKeeper、Eureka、Consul 、Nacos,微服务注册中心怎么选?
聊聊服务注册与发现
最近一直想写这个话题,也一直在构思,但不知道从何入手,或者说不知道写哪方面。如果单纯写如何实现,这个未免太乏味枯燥了;而如果只是介绍现有成熟方案呢,却达不到我的目的。想了很久,准备先从微服务的架构入手,切入 服务发现 要解决什么问题,搭配常见的处理模式,最后介绍下现有的处理方案。
高性能架构探索
2022/08/25
7710
聊聊服务注册与发现
微服务注册中心做了什么事——服务发现
是否被一大堆的注册中心八股文淹没,不知道哪个是哪个,有啥区别甚至于不知道哪几个功能重叠互为替代,请看下文。
燃192
2023/04/11
3450
微服务注册中心做了什么事——服务发现
聊一聊微服务架构中的服务发现系统
导语:本文围绕服服务调用模式、一致性取舍、服务提供者的健康检查模式等方面,讨论了服务发现的技术选型和设计的各种优缺点,希望能够帮助大家在选择或者使用服务发现系统的时候更加顺畅。
腾讯云中间件团队
2021/03/24
8150
聊一聊微服务架构中的服务发现系统
微服务架构下的服务治理:在 SpringCloud 框架中实现服务的注册与发现
服务治理 RPC远程过程调用协议的核心设计思想: 在于注册中心, 因为注册中心:管理每个服务与服务之间的一个依赖关系 服务治理: 在传统的RPC远程过程调用协议中,管理每个服务与服务之间的依赖关系非常复杂.可以使用服务治理技术,管理每个服务与服务之间的一个依赖关系.可以实现本地负载均衡,服务发现与注册,容错等 服务注册与发现 注册中心 在RPC远程过程调用协议中,有一个注册中心 SpringCloud支持三种组册中心: Consul(go语言) Eureka Zookeeper Dubbo支持两种注册中心:
攻城狮Chova
2021/08/17
8510
微服务架构下的服务治理:在 SpringCloud 框架中实现服务的注册与发现
基于Spring Cloud的微服务架构分析
Spring Cloud是一个相对比较新的微服务框架,2016年才推出1.0的release版本。虽然Spring Cloud时间最短,但是相比Dubbo等RPC框架,Spring Cloud提供的全套的分布式系统解决方案。
用户4283147
2022/10/27
3540
基于Spring Cloud的微服务架构分析
Nacos有几种负载均衡策略?
Nacos 作为目前主流的微服务中间件,包含了两个顶级的微服务功能:配置中心和注册中心。
磊哥
2023/10/31
1.8K1
Nacos有几种负载均衡策略?
基于SpringCloud的微服务架构分析,神仙框架!
Spring Cloud是一个相对比较新的微服务框架,2016年才推出1.0的release版本. 虽然Spring Cloud时间最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。
搜云库技术团队
2021/10/20
1.6K0
基于SpringCloud的微服务架构分析,神仙框架!
推荐阅读
相关推荐
微服务注册中心如何选型?这几个维度告诉你!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档