Go Registry

article/2025/7/9 5:54:37
  • 实现微服务的服务注册中心,支持服务服务注册、接收心跳等。
  • 客户端实现基于注册中心的服务发现机制

微服务

微服务是一些协同工作的小而自治的服务

微服务主要分为六个部分组成

  1. 服务描述:类似服务的文档说明,简单但不可或缺。
    比如:服务调用首先要解决的问题是服务如何对外描述。服务名叫什么?调用服务需提供那些信息?调用服务返回结果是什么格式?如何解析?

  2. 注册中心:解决服务的发布和订阅
    提供了一个服务(Provider)后,如何让外部(Consumer)想调用它的人知道。此时就需要一个类似注册中心(Registry)的角色,服务提供者将自己提供的服务以及地址登记到注册中心,服务消费者从注册中心查询所需调用的服务地址,然后发起请求。

  3. 服务框架
    通过注册中心,服务消费者可以获取到服务提供者的地址,有了地址后可以发起调用。但发起调用前需要解决:服务通信采用什么协议?数据传输采用什么方式?数据压缩采用什么格式?这些通常都会集成到服务框架中。

  4. 服务监控
    一旦服务消费者和服务提供者之间能够正常发起服务调用,就需要对调用情况进行监控以了解服务是否正常。通常来说,服务监控主要分为三个流程:指标收集、数据处理、数据展示。监控是为了发现问题和异常,进一步跟踪和定位问题,则需进一步了解服务追踪。

  5. 服务追踪
    除了需要对服务调用情况进行监控外,还需记录服务调用经过的每一层链路,以便进行问题追踪和故障定位,最后达到接近问题的目的。服务监控和追踪可以合并,但要明确各自的职责。

  6. 服务治理
    服务监控能够发现问题,服务追踪能够定位问题,解决问题就得靠服务治理。服务治理是通过一系列手段来保证在各种意外情况下,服务调用仍能够正常运行。

服务治理

创建微服务首先需要考虑服务的如下三个方面

  • 通信框架:解决客户端和服务端如何建立连接、管理连接、服务端如何处理请求的问题。采用同步还是异步,是在单连接上传输还是多路复用?
  • 通信协议:解决客户端和服务端采用哪种数据传输协议,是采用四层的TCP、UDP,还是采用七层的HTTP?
  • 序列化和反序列化:解决客户端和服务端采用哪种数据编解码问题,采用JSON、Protobuf?

角色

微服务架构下主要存在三种角色

  1. 服务提供者(Provider:Server)

服务提供者提供服务,服务启动时根据服务发布文件中的配置信息向注册中心注册自身服务,并向注册中心定期发送心跳汇报存活状态。

  1. 服务消费者(Consumer:Client)

服务消费者调用服务,启动时根据服务引用文件中配置的信息,向服务中心订阅服务,将注册中心返回的服务节点列表缓存在本地内存中,并于服务端建立连接。

当服务端列表发生变更时,注册中心会同步变更,客户端感知后会刷新本地内存中缓存中的服务节点列表。

客户端从本地缓存的服务节点列表中,基于负载均衡算法选择一台服务端发起调用。

  1. 服务注册中心(Registry)

3.1 注册中心必须提供最基本的API

  • 服务注册接口:服务提供者通过调用服务注册接口来完成服务注册,一般使用租约或TTL、PUT设置值。
  • 服务反注册接口(delete):服务提供者通过调用服务反注册接口来完成服务注销
  • 心跳汇报接口:服务提供者通过调用心跳汇报接口完成节点存活状态上报,一般会使用租约来续租。
  • 服务订阅接口(watch):服务消费者通过调用服务订阅接口完成服务订阅,获得可用的服务提供者节点列表。
  • 服务变更查询接口(get):服务消费者通过调用服务变更查询接口获取最新的可用服务节点列表

3.2 除此之外,为了便于管理,注册中心还必须提供一些后台管理的API。

  • 服务查询接口:查询注册中心当前注册了那些服务信息
  • 服务修改接口:修改注册中心某些服务的信息

服务注册和发现

微服务或分布式环境下,各个服务的独立部署和分布,组合成一个分布式应用。服务和服务之间相互关联调用,如何管理这些服务,服务注册和发现应运而生。

服务注册和发现

服务注册和发现主要解决服务依赖问题,通常如果服务A调用服务B,最直接的做法是配置IP地址和端口,随着服务依赖变多时,配置将会庞杂。当服务发生迁移时,所有相关服务的配置均需修改,这将难以维护且易出错。为了解决这种服务依赖关系,服务注册和发现应用而生。

服务注册与发现主要分为

  • 服务信息发布:主要包括服务名、IP信息、附件元数据,通过注册接口注册到服务注册发布中心。
  • 存活检测:当服务意外停止时,客户端需感知到服务停止,并将服务的IP地址踢出可用的IP地址列表,可使用定时心跳去实现。
  • 客户端负载均衡:通过服务注册和发现可实现一个服务部署堕胎实例,客户端实现在实例直接的负载均衡,从而实现服务的横向扩展。

因此,服务注册和发现可以概括为:

  • 服务将信息上报
  • 客户端拉取服务信息
  • 通过服务名进行调用
  • 当服务宕机时客户端踢掉故障服务
  • 服务新上线时客户端自动添加到调用列表

服务调用

服务调用方式主要是指微服务中服务之间调用的方式,主要可分为两类:

  • 基于负载均衡:通过负载均衡设备对外提供VIP地址来实现服务的调用

    基于负载均衡
  • 基于注册中心:微服务之间通过服务注册中心进行节点发现,然后再服务端直接调用对应的节点进行调用。

基于负载均衡的服务调用

服务域名配置模式

基于负载均衡的服务调用是指通过LVS、Haproxy、Nginx等负载均衡软件来构建一个负载均衡服务,所有的服务都通过负载均衡器,负载均衡器的这种模式下主要有两个问题:

  1. 中心化:负载均衡设备成为微服务的中心,后期可能会成为微服务的系统瓶颈。
  2. 流量增倍:内网流量会被放大1倍,即客户端到负载均衡,负载均衡到后端节点。

负载均衡这种实现在早期是普遍适用的,可做一些负载均衡、长链接维护、分布式跟踪等。

基于注册中心的服务调用

服务注册发现模式

所有的服务都启动后通过注册中心来i注册自己,同时把注册中心中的服务信息拉回本地,后续调用就直接检查本地服务和节点信息来进行服务节点的调用,是当前微服务架构中最普遍的做法。

注册中心的核心架构设计

注册中心单点实现的核心目标是提供注册表的高并发访问,为了提高性能并且尽可能保持一致性,在设计上通过全量同步和增量同步,来减少拉取的数据量从而提高系统的吞吐。主要核心有两点

  1. 注册表:注册表存储全量信息,提供hashcode用于做一致性校验。
  2. 事件队列:存储最近变更事件,后续只需增量同步即可保证一致性。

注册中心

  • 服务的注册和发现是微服务必不可少的功能

服务端将服务的地址信息保存到注册中心后,定时的心跳检查或定时的重新注册。客户端监听注册中心,最好将服务信息保存到本地,监听服务的变动,更新缓存。当调用服务端的接口时,根据客户端的服务列表和负载算法选择服务端进行通信。

  • 注册中心的位置

注册中心的好处在于:客户端和服务端都只需要感知注册中心的存在,而无需感知对象的存在。

  1. 服务端启动后向注册中心发送注册消息,注册中心得知该服务已经启动,处于可用状态。一般来说,服务端还需定期向注册中心发送心跳,证明自己还活着。
  2. 客户端向注册中心询问,当前那些服务是可用的,注册中心将可用的服务列表返回给客户端。
  3. 客户端根据注册中心得到服务列表,选择其一发起调用。
注册中心的位置

如果没有注册中心,客户端需要硬编码服务的地址,而且没有机制保证服务端是否处于可用状态。注册中心还可以提供比如配置的动态同步、通知机制等功能。

  • 基于注册中心的服务调用

所有的服务启动后通过注册中心来注册自己,同时把注册中心中的服务信息拉回本地,后续调用,就直接检查本地的服务和节点来进行服务节点的调用。

基于注册中心的服务调用
  • 注册中心的服务注册表

每个服务节点都会到注册中心进行服务注册,那么数据如何在服务端进行保存呢?其实就是注册表,等同于Windows中的注册表。每个服务都来注册,将自己的信息上报上来,然后注册中心把注册表返回给客户端。这样服务之间就知道需要调用服务的节点了。

注册中心的服务注册表

需求分析

作为服务注册中心需实现的基本功能包括

  1. 服务注册:接受来自服务提交的注册信息并保存起来
  2. 服务下线:接受服务主动下线请求,并将服务从注册信息表中删除
  3. 服务获取:调用方从注册中心拉取服务信息
  4. 服务续约:服务健康检查,服务通过心跳保持(主动续约)告知注册中心服务可用。
  5. 服务剔除:注册中心将长时间不续约的服务实例从注册信息表中删除

http://chatgpt.dhexx.cn/article/hdFsRnB1.shtml

相关文章

Gogs私服搭建

1. Gogs介绍 官网地址:https://gogs.io 文档地址:https://gogs.io/docs Gogs,全称为Go Git Service,是一个基于 Go 语言开发的Git服务。它提供了一个类似于GitHub的界面和功能,允许您在自己的服务器上搭建私有的Git仓库…

vhost-user

1,virtqueue 图一 每个queue实际上是由tx/rx两个virtqueue组成的也就是说tx和rx的virtqueue是分开的,并没有共享。一个virtio net设备最多有多少个queue由后端vhost决定,但前端可以通过ethtool –L eth0 combined 16命令动态修改当前队列数&…

gohost -- go 开发的命令行hosts配置管理工具

前几天在微博上看到有人推荐了lazygit这个工具,让人眼前一亮,什么时候命令行也可以这么抢到了,?,调研了下,发现它使用了gocui,使用它可以做出来很多很炫的命令行工具。 现有的hosts工具里面也有switchosts…

Android studio占用C盘资源的解决方法

Android studio占用C盘资源的解决方法 Android Studio安装成功后会在系统盘用户目录下产生这几个文件夹 一、目录介绍 1、.android 是Android SDK生成的AVD(Android Virtual Device Manager)即模拟器存放路径 2、.AndroidStudio4.0(这里我安…

Minecraft神奇玩家不用键盘,行走全部靠骑猪最后通关MC

大家好,在Minecraft中有非常多的玩法,但是您听说过全程游戏不用键盘只用鼠标通关的玩法吗?也就是说在游戏中不能使用WSAD和空格按键通关!这听起来简直就是天方夜谈了! 在国外有位玩家叫做HeightAdvantage的玩家&#…

2021大树分享收集的网盘搜索站给兄弟们

聚合网盘搜索 https://www.chaonengso.com/ 某柠檬 https://www.moulem.com/ 史莱姆 http://www.slimego.cn/ 蓝菊花-城通网盘 http://www.lanjuhua.com google Drive搜索引擎 https://gezhong.vip/ 陈蛋蛋的宝藏库 http://www.chendandan.ys168.com/ xx资料网 https://www.xxu…

WPF窗体最小化到任务栏

WPF程序也可以很轻松的实现类似QQ那样最小化到任务栏的功能。 WindowState ws;WindowState wsl;NotifyIcon notifyIcon;

android ip格式化输入法,手机键盘还能这样玩?简单几步,让你的输入法萌动可人!...

玩手机,打字忙,输入法你用的是原厂、还是第三方?相信大多数网友跟我一样,换了新手机,会在第一时间安装自己习惯的第三方输入法。 相对而言,我更喜欢百度输入法,它的优势之一便是拥有种类丰富、脑…

渗透测试 ( 1 ) --- 相关术语、必备 工具、导航、全流程总结、入侵网站思路

From:https://zhuanlan.zhihu.com/p/401413938 渗透测试实战教学:https://www.zhihu.com/column/c_1334810805263515648 导航类网站: 渗透师网络安全从业者安全导航(速查小手册)​ 渗透师导航:https…

csgo原始输入开不开_CSGO职业哥参数配置:帅气猪猪JW

在CSGO游戏中,狙击手一直都扮演着团队中非常重要的位置,无论是进攻还是防守,利用狙击的远距击杀,不仅能够造成人数上面的领先,同时还可以打乱对方的战术安排部署,是真正的牵一发而动全身的关键位置。 那么,我们今天来介绍的是这么一位狙击手,CSGO圈中是这么评价他的:在…

dialog dismiss时键盘不消失的问题。

当setCanceledOnTouchOutside(true),点击阴影处,dialog dismiss时键盘不消失的问题。 一开始觉得很简单,监听下onDimiss()方法,在里面隐藏键盘不就行了。 但是发现大多数手机都不会隐藏(魅族x4…

pe没法给服务器装系统吗,U盘重装系统无法进入PE解决方法

使用U盘启动盘重装系统,进不去PE怎么办?制作好U盘启动盘,准备装系统的时候,遇到不能进入PE的情况该怎么解决?下面小编整理一篇教程,帮助大家解决这个问题。 首先先分析u盘装系统不能进入pe的原因&#xff1…

真正的黑客键盘

IT程序猿 微博网友评论: 金先生不睡觉:甚至没有退格键! O2酱:复读机的键盘:Ctrl,C,V 蓝天草地生活:高手专用! 吴彦猪猪_yzy:其实不需要done 某个序列表示don…

LeetCode500. 键盘行

项目场景: 行百里路者半九十 问题描述 键盘行 给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。 美式键盘 中: 第一行由字符 “qwertyuiop” 组成。 第二行由字符 “asdfghjkl” 组成…

又一款度盘不限速下载神器,无需登录,10M/s!

开局一张图 这是我最新发现的一款百度云下载工具 简介 有一个网站叫 6盘,这个网站呢,可以转存百度网盘的资源。 然后再将转存的文件下载就可以不限速下载了。 然后,工具的作者觉得 6盘网页版还行,PC版丑拒。 于是,一时…

推荐6款珍藏已久的网盘搜索工具

最近收集了几款好用的网盘资源搜索网站,可能你已经在用了,可能你还不知道它的存在 。如果你已经在用了,说明你很有远光,好的搜索网盘将大大提高我们平时的搜索资源的效率 。 1 胖次搜索 胖次网盘搜索引擎,独家的索引挖掘技术,为您…

深度linux没有硬盘,安装Deepin系统到硬盘分区部分没有发现硬盘数据的解决

使用华为笔记本安装Deepin系统非常的顺利,但是在使用戴尔笔记本安装Deepin的时候却不那么如意,在安装到选择语言后,进展到硬盘分区部分,却没有发现硬盘数据,如下图所示,没有任何的数据,这里就不…

设计模式六大原则

前言,最近参加了面试,问道了设计模式的六大原则,当时一阵尴尬,现在总结一下,设计模式的六大原则如下: 定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭 …

服务器查看系统盘位置,服务器上查看硬盘位置

服务器上查看硬盘位置 内容精选 换一换 云硬盘可以做什么?云硬盘(Elastic Volume Service, EVS)可以为云服务器提供高可靠、高性能、规格丰富并且可弹性扩展的块存储服务。成长地图带您由浅入深学习日常使用和维护EVS,包含EVS基础知识,EVS计费方式,EVS的使用方法以及常见问…