GO语言 服务发现概述

https://zhuanlan.zhihu.com/p/32027014

明明白白的聊一下什么是服务发现-CSDN博客

一、服务发现 是什么

在传统的系统部署中,服务运行在一个固定的已知的 IP 和端口上,如果一个服务需要调用另外一个服务,可以通过地址直接调用。

但是,服务实例的启动和销毁是很频繁的,地址在动态变化,无法将请求固定发送到某个IP上。所以就 有需要将请求发送到 地址动态变化 的服务实例上。

这需要两个步骤:

  1. 服务注册 --- 存储服务的主机和端口信息,以及对应的服务名字。

  2. 服务发现 --- 允许其他用户发现服务注册阶段存储的信息。

所以,服务发现 就是只通过服务的名字就能够使用服务,并且支持服务所在地址是动态变化的。

二、服务发现 提供了什么功能

1. 健康检查

作为一个服务发现服务,不仅要保存服务的访问方式(ip+port),还需要有服务监听的功能,隔一段时间去监听你的服务是否正常。即健康检查。

2. 负载均衡

有多个节点提供一个服务,特别是高并发的时候,需要更多的节点。即负载均衡。

3. 全局分布

一个服务需要改动时,不应该让其他服务做相应改动,服务的键值存储 需要是全局性的。即服务注册中心。

三、服务发现 的两种发现方式

有两种主要的服务发现方式:客户端发现 和 服务端发现

1. 客户端服务发现

(1) 解释:

客户端查询服务注册中心,获取服务的实际网络地址。

客户端通过负载均衡算法,选择一个可用的服务实例。

客户端将请求发送至该服务实例。

(2) 优点:架构简单,客户端可以自己选择负载均衡策略。

缺点:客户端需要自己实现负载均衡,自己访问服务实例,有一定开发成本。

2. 服务端服务发现

(1) 解释:

客户端向 负载均衡器 发送业务请求。

负载均衡器 往服务注册中心查询可用的服务,然后转发请求到该 服务实例上。

(2) 优点:服务的发现逻辑对客户端是透明的。

缺点:需要额外部署和维护高可用的负载均衡器。

四、服务注册中心

服务注册中心 的位置 如上面 服务发现框架图 所示。

服务注册中心是服务发现的核心,保存了各个可用服务实例的网络地址(IP和端口)。

服务注册中心必须要有高可用性实时更新功能

实时更新功能 ,主要是服务的注册和注销。有两种实现方式:

1. 服务自己注册

服务实例必须自己主动的到 服务注册中心 进行注册和注销。

服务注册中心 使用 心跳机制 来监控实例异常关闭 并注销。

优点:框架简单,不需要其它辅助组件。

缺点:各个服务实例 和 服务注册中心 的耦合起来。

2. 第三方组件注册

通过其他组件来实现,到 服务注册中心 进行注册和注销。

组件需要监控实例的启动和关闭。

组件可以通过如事件订阅等方式来监控服务实例的状态。

优点:使用辅助组件 来实现 服务注册中新 和 服务实例解耦。

缺点:增加框架复杂度,添加了辅助组件。

五、常见服务发现框架对比

六、Consul 介绍

1. Consul相比Etcd更强大

如上图所示,Consul相比Etcd更强大,支持 多数据中心健康检查DNS协议

consul通过 DNS或者HTTP接口 使服务注册和服务发现变的更容易

2. Consul 框架图

可见,使用的是 客户端服务发现方式,客户端直接访问服务实例。

3. 采用 Raft 算法,用来保证服务的高可用。

目的是保证 系统中有一两个服务器当机,也不会影响其处理过程

七、思考服务发现应该怎么做

主要考虑两个点:

  1. 服务实例怎么注册和注销:建议 服务实例 自己主动到 服务注册中心 去进行注册和注销,不要使用其他组件去监控服务实例,降低框架复杂度。

  2. 客户端怎么访问服务:建议客户端直接访问 服务注册中心 获取服务地址,不要维护高可用的负载均衡中心,降低框架复杂度。

  3. 总体:不是很庞大的生态,应该以降低框架服务度为主。

相关推荐
九皇叔叔2 天前
【04】微服务系列 之 Nacos 注册中心(服务发现)
java·微服务·nacos·服务发现
jiayong239 天前
Kubernetes 网络与服务发现面试题详解
网络·kubernetes·服务发现
努力也学不会java10 天前
【Spring Cloud】 服务注册/服务发现
人工智能·后端·算法·spring·spring cloud·容器·服务发现
廋到被风吹走10 天前
【配置中心】Nacos 配置中心与服务发现深度解析
开发语言·服务发现·php
MengFly_15 天前
Java广播 —如何利用广播做服务发现
java·网络·服务发现
rchmin19 天前
Nacos服务与配置管理平台介绍
架构·服务发现·配置管理
oMcLin21 天前
如何在 CentOS 7.9 上配置并调优 Docker Swarm 集群,确保跨多个节点的高效服务发现与负载均衡?
docker·centos·服务发现
喵叔哟22 天前
19.服务集成与通信
后端·docker·容器·服务发现
喵叔哟1 个月前
15.故障排查与调试
后端·docker·容器·服务发现
没有bug.的程序员1 个月前
Spring Cloud Gateway 架构与执行流程:从原理到性能优化的深度探索
微服务·云原生·eureka·性能优化·架构·sentinel·服务发现