image

编辑人: 长安花落尽

calendar2024-12-20

message0

visits788

说说你理解的服务发现

分析&回答

image-1691391548588

服务注册

服务注册是针对服务端的,服务启动后需要注册,分为几个部分:启动注册、定时续期、退出撤销

服务发现

服务发现是针对调用端的,一般分为两类问题:存量获取、增量侦听

客户端发现模式(客户端自主选择)

  1. 服务提供者向注册中心进行注册,提交自己的相关信息
  2. 服务消费者定期从注册中心获取服务提供者列表
  3. 服务消费者通过自身的负载均衡算法,在服务提供者列表里面选择一个合适的服务提供者,进行访问。

优点:

  • 负载均衡作为client中一个功能,用自身的算法,从服务提供者列表中选择一个合适服务提供者进行访问,因此client端可以定制化负载均衡算法。优点是服务客户端可以灵活、智能地制定负载均衡策略,包括轮询、加权轮询、一致性哈希等策略。
  • 可以实现点对点的网状通讯,即去中心化的通讯。可以有效避开单点造成的性能瓶颈和可靠性下降等问题。
  • 服务客户端通常以SDK的方式直接引入到项目,这种方式语言的整合程度最佳,程序执行性能最佳,程序错误排查更加容易。
  • Dubbo 就是使用客户端服务发现模式

缺点:

  • 当负载均衡算法需要更新时候,很难做到同一时间全部更新,所以就造成新旧算法同时运行
  • 与注册中心紧密耦合,如果要换注册中心,需要去修改代码,重新上线。微服务的规模越大,服务更新越困难,这在一定程度上违背了微服务架构提倡的技术独立性。

服务端发现模式(客户端被动选择)

  1. 服务提供者向注册中心进行服务注册
  2. 注册中心提供负载均衡功能
  3. 服务消费者去请求注册中心,由注册中心根据服务提供列表的健康情况,选择合适的服务提供者供服务消费者调用

优点:

  • 服务消费者不需要关心服务提供者的列表,以及其采取何种负载均衡策略
  • 负载均衡策略的改变,只需要注册中心修改就行,不会出现新老算法同时存在的现象
  • 服务提供者上下线,对于服务消费者来说无感知
  • 现代容器化部署平台(如Docker和Kubernetes)就是使用服务端服务发现模式

缺点:

  • rt增加,因为每次请求都要请求注册中心,尤其返回一个服务提供者
  • 注册中心成为瓶颈,所有的请求都要经过注册中心,如果注册服务过多,服务消费者流量过大,可能会导致注册中心不可用
  • 微服务的一个目标是故障隔离,将整个系统切割为多个服务共同运行,如果某服务无法正常运行,只会影响到整个系统的相关部分功能,其它功能能够正常运行,即去中心化。然而,服务端发现模式实际上是集中式的做法,如果路由器或者负载均衡器无法提供服务,那么将导致整个系统瘫痪。

喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

创作类型:
原创

本文链接:说说你理解的服务发现

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share