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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件巨头SAP裁员优厚条件,吸引5300名员工争相离职

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 在科技行业的大潮中,SAP公司近日因一项颇具争议的裁员计划而备受瞩目。但这次裁员风波并未如往常般引发员工的强烈抗议,反…

D365 子窗体调用父窗体方法

文章目录 一、在子窗体中调用父窗体公共方法二、刷新 CallerForm 数据源 一、在子窗体中调用父窗体公共方法 Object callerForm element.args().caller(); if(callerForm is FormRun && formHasMethod(callerForm, identifierStr(parentMethod))) {callerForm.parent…

知网-数学学习与研究-收稿邮箱

知网-数学学习与研究-收稿邮箱 《数学学习与研究》杂志是由东北师范大学主管,吉林省数学会与东北师范大学出版社联合主办的省级优秀数学类期刊杂志。 主管单位:东北师范大学 主办单位:吉林省数学会;东北师范大学数学与统计学院 创刊时间1983…

AI学习指南机器学习篇-决策树基本原理

AI学习指南机器学习篇-决策树基本原理 在机器学习领域,决策树是一种常见且十分重要的算法。它不仅在分类任务中被广泛应用,还可以用于回归任务。本篇博客将详细介绍决策树的基本原理,包括节点、分裂准则、信息增益、基尼不纯度等概念&#x…

msvcr120.dll丢失怎样修复?为什么msvcr120.dll文件很重要

msvcr120.dll​ 是一个属于 Microsoft Visual C 2013 Redistributable package 的动态链接库文件。这个文件对于运行使用 Visual Studio 2013 开发的应用程序是必要的,因为它包含了C运行时库的一部分功能,这些功能是标准C库中与输入/输出操作、字符串操作…

OpenCV中的圆形标靶检测——斑点检测算法(二)

前面的章节中我们已经大致介绍了算法流程,也对一些算法中用到的相关概念做了简要介绍,同时给出了算法调用的API,现在我们开始算法检测接口实现源码的分析。 1. 斑点的分组与加权 这里我们选择后者,先了解算法的处理流程,再分析各个模块的实现。算法流程图如下图所示,上一…

android中调用onnxruntime框架

创建空白项目 安装Android Studio及创建空白项目参考:【安卓Java原生开发学习记录】一、安卓开发环境的搭建与HelloWorld(详细图文解释)_安卓原生开发-CSDN博客 切记:build configuration language 一定选择Groovy!官…

51单片机-LCD液晶显示

目录 前言: 一. LCD1602模块简介 二. 代码功能实现 三.总结 前言: 本文主要是51单片机的LCD液晶显示,使用的是LCD1602.下面是详细介绍和完整代码,欢迎大家的点赞,评论和关注.感谢. 一. LCD1602模块简介 LCD1602 模块具有以下特点: 显示特点: 可以…

MySQL 将null转0 ifnull() coalesce()

做统计报表的时候,有时候不希望查出来的值是null,因为在代码中需要做大量的判空,最后转换成0来处理。既然如此,那在sql中查出来就是0,就不用为空而去判空了。 1.IFNULL() ifnull()只能放2个值。 select IFNULL(null,0…

[240608] Zig 发布 v0.13.0 |AMD 新处理器不支持 Win 10 |DuckDuckgo 发布AI匿名聊天服务

目录 Zig 发布 0.13.0 版本AMD 下一代锐龙处理器不支持 Windows 10DuckDuckgo 发布 AI 匿名聊天服务 Zig 发布 0.13.0 版本 Zig 发布 0.13.0 版本,此次发布的主要目的是升级 zig 工具链,发布重点如下: 工具链升级: LLVM&#xf…

DevOps的原理及应用详解(六)

本系列文章简介: 在当今快速变化的商业环境中,企业对于软件交付的速度、质量和安全性要求日益提高。传统的软件开发和运维模式已经难以满足这些需求,因此,DevOps(Development和Operations的组合)应运而生&a…

企业建站响应式网站建设平台版源码系统 海量模版可选择 带完整的安装代码以及搭建教程

系统概述 企业建站响应式网站建设平台版源码系统是一款集创新性、实用性和便捷性于一体的建站解决方案。它旨在为用户提供一站式的网站建设服务,无论你是新手还是经验丰富的开发者,都能通过该系统轻松实现网站的构建与部署。 该系统采用先进的技术架构…

单链表复习 (C语言版)

目录 一.顺序表与链表的区别 二.链表概念 三.单链表 1.单链表的开始与初始化 2.单链表的打印 3.单链表的尾插 重难点:单链表实现时的指针详解 4.单链表的头插 5.单链表的尾删 6.单链表的头删 小结: 7.单链表的查找 8.在指定位置前插入数据 …

mingw64,clang,gcc

MinGW-w64、Clang 和 GCC 都是编译器,但它们在功能和设计上有一些区别: MinGW-w64 是一个在 Windows 平台上的开发工具集,它提供了一组 GNU 工具和库,可以用于编译和构建本地的 Windows 应用程序。MinGW-w64 的主要目标是提供类似…

GitHub工程获取第三方PR操作

GitHub工程获取第三方PR操作 1. 源由2. 获取第三方PRStep 1:安装ghStep 2:获取个人TokenStep 3:通过git协议获取代码Step 4:获取第三方PR分支 3. 总结 1. 源由 通常来说,GitHub上通常有三种场景: 工程管理…

STM32 UART 错误代码 HAL_UART_ERROR_PE

HAL_UART_ERROR_PE 是STM32 HAL库(硬件抽象层库)中UART(通用异步收发传输器)模块定义的一个错误码,表示“Parity Error”(奇偶校验错误)。当UART通信过程中检测到奇偶校验不匹配时,会…

自动化喷涂生产线方案三

本文介绍自动化喷涂生产线的另外一种方案,单工作站方案,单工作站配置一台机械臂和一套除尘柜,代替一个工位完成喷涂工艺,其工作原理简要介绍如下。 一套单工作站的主要组成设备有,10kg负载机械臂一台主要负责喷涂工艺&…

源码讲解kafka 如何使用零拷贝技术(zero-copy)

前言 kafka 作为一个高吞吐量的分布式消息系统,广泛应用与实时应用场景中。为了实现高效的数据传输,kafka使用了零拷贝技术(zero-copy)显著提高了性能。本文将详细讲解 Kafka 如何利用零拷贝技术优化数据传输。 什么是零拷贝 零拷贝技术目的是减少数据传输的效率。在传统…

冯喜运:6.8下周伦敦金行情怎么看?黄金原油下周操作建议

【黄金消息面分析】:黄金不是由通胀驱动的。它也不是由通货紧缩驱动的。它也不是由美元驱动的。当股市反弹时,它也不会下跌,反之亦然。黄金是由市场情绪驱动的。而且,它是黄金市场上唯一的常数,使人们能够对黄金价格趋…

vue elementui el-input 正则验证,限制只能输入数字和小数

vue elementui el-input 正则验证 限制只能输入数字和小数,以下两种方法都可以: 1、οninput“value value.replace(/[^0-9.]/g,‘’)” 2、οninput“value value.replace(/[^\d.]/g, ‘’)” 限制只能输入数字: 1、oninput “valuevalu…