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. 总体:不是很庞大的生态,应该以降低框架服务度为主。

相关推荐

  1. Go语言创建HTTP服务器

    2024-06-09 03:14:04       17 阅读
  2. Go语言GC

    2024-06-09 03:14:04       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-09 03:14:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-09 03:14:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-09 03:14:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-09 03:14:04       20 阅读

热门阅读

  1. Go go-redis应用

    2024-06-09 03:14:04       10 阅读
  2. 代码随想录算法训练营第36期DAY51

    2024-06-09 03:14:04       13 阅读
  3. diffusers 使用脚本导入自定义数据集

    2024-06-09 03:14:04       12 阅读
  4. 【设计模式】装饰器模式(结构型)⭐⭐

    2024-06-09 03:14:04       8 阅读
  5. 电商API在促进销售与营销中的影响

    2024-06-09 03:14:04       12 阅读
  6. Zookeeper 详解:分布式协调服务的核心概念与实践

    2024-06-09 03:14:04       11 阅读
  7. Pytorch中的广播机制

    2024-06-09 03:14:04       8 阅读
  8. Access数据中的SQL偏移注入

    2024-06-09 03:14:04       9 阅读
  9. 在Spark SQL中,fillna函数

    2024-06-09 03:14:04       11 阅读
  10. SELinux:安全增强型Linux

    2024-06-09 03:14:04       10 阅读
  11. 嵌入式C中Hex与Bin文件对比分析

    2024-06-09 03:14:04       11 阅读
  12. 数据结构学习笔记-二叉树

    2024-06-09 03:14:04       10 阅读