【八股消消乐】构建微服务架构体系—服务注册与发现

news2025/6/9 6:05:51

在这里插入图片描述

😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔本专栏《八股消消乐》旨在记录个人所背的八股文,包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点,期待与你一同探索、学习、进步,一起卷起来叭!

目录

  • 题目
  • 答案
    • 服务注册发现模型
    • 模板总结

题目

💬技术栈:微服务架构

🔍简历内容:熟悉服务注册与发现模型,了解主流的服务注册中心,如Etcd、Nacos、Eureka、ZooKeeper,熟悉分布式CAP理论,有应对服务注册中心宕机处理经验。

🚩面试问:我司使用etcd作为注册中心,etcd维护团队已离职,如果注册中心宕机了,你的系统会怎么样?如何处理?


在这里插入图片描述

💡建议暂停思考10s,你有答案了嘛?如果你有不同题解,欢迎评论区留言、打卡。


答案

手段总结:
(1)启动备份注册中心,而且是异构的备份中心。考虑能做到自动切换吗?还是依赖于人手动切换?
(2)兜底节点:人手动配置一些固定 IP,万一注册中心崩了就用这个。这个缺陷就是 IP 需要人来维护,比如说万一某个IP 不可用了。

具体流程:
1、禁止所有部署(我们使用aws,部署可能会换新机器)【防止故障扩散,etcd集群在节点异常时若继续扩缩容,可能导致数据不一致或脑裂问题。】
2、保护住所有的现有机器,禁止scale in和scale out【多花了很多钱】
3、在经历多轮抢修依然无法启动etcd的情况下,我们切换到了consul【etcd基于Raft协议强一致性模型,故障恢复需严格满足多数节点存活条件】
4、注册中心团队对consul添加了fallback的方案,当consul挂掉的时候进行fallback
5、我们有个服务是通过注册中心获取有序的节点列表从而分配定时任务执行,注册中心故障时可能有时成功有时失败,所以我们添加了基于配置的固定列表,当注册中心down掉时,我们可以配置自己的机器列表,在内存中做排序,以分配定时任务。【兜底策略】

服务注册发现模型

(1)为什么需要服务注册发现?

你的服务部署在不同的机房、不同的机器上,监听不同的端口。现在你的客户端收到了一个请求,要发送给服务端,那么你的客户端怎么知道哪些服务端能够处理这个请求呢?

在这里插入图片描述
所以,一定要注册才能知道哇!

服务注册发现模型如下:

(1)服务上线:

在这里插入图片描述

  1. 服务端启动的时候,需要往注册中心里注册自身的信息,主要是定位信息。
  2. 注册成功之后,注册中心和服务端要保持心跳。
  3. 客户端第一次发起对某个服务的调用之前,要先找注册中心获得所有可用服务节点列表,随后客户端会在本地缓存每个服务对应的可用节点列表。
  4. 客户端和注册中心要保持心跳和数据同步,后续服务端有任何变动,注册中心都会通知客户端,客户端会更新本地的可用节点列表。
  5. 客户端发送请求。
  6. 服务端返回响应。

(2)服务下线:

在这里插入图片描述

  1. 服务端通知注册中心自己准备下线了。
  2. 注册中心通知客户端某个服务端下线了。
  3. 客户端收到通知之后,新来的请求就不会再给该服务端发过去。
  4. 服务端等待一段时间之后,暂停服务并下线。

常见的注册中心:ZooKeeper、Nacos、 etcd(为什么要选用该中间件作为注册中心?)

需要搞懂的数据和信息:注册中心的集群规模、读写 QPS(每秒查询率)、机器性能,如 CPU 和内存大小、注册中心出故障之后你排查和后续优化的案例。

模板总结

“你知道服务注册与发现吗?”或者“你知道注册中心吗?”

(1)回答服务注册与发现的基本模型,例如服务上线和服务下线这两个流程的具体步骤

(2)描述所在公司的注册中心

  • CAP:注册中心更加关注 CAP 中选 CP 还是选 AP 的问题
    • 解释
      • C:Consistency,数据一致性
      • A:Availability,服务可用性
      • P:Partition-tolerance,分区容错性
    • AP:客户端容错,例如Eureka、Nacos。客户端就可能拿到错误的可用节点列表。如果客户端将请求发到错误的可用节点上,就会出现错误,此时客户端自然可以执行容错,换一个可用节点重试。
    • CP:体量小,集群规模也不大,例如ZooKeeper。
  • 中间件成熟度
  • 社区活跃度
  • 性能

(3)注册数据

服务端注册的数据除了定位信息是必需的以外,剩下需要什么数据都是根据微服务框架本身的功能和业务来设计的。比如说很多微服务框架支持分组功能,那么就可以让服务端在注册的时候同时注册自己的分组信息,比如说当前节点是 VIP 节点。那么客户端在收到 VIP 请求之后就会把请求发给 VIP 节点。【分组

(4)高可用

  • 注册服务端崩溃检测:“心跳”
    • 注册中心在和服务端进行心跳的时候失败了,就要 立刻通知客户端 该服务端已经不可用了,那么客户端就不会再发请求过来。在这里插入图片描述
    • 注册中心还要继续往服务端发心跳。如果只是偶发性的心跳失败,那么注册中心后面心跳是肯定能够连上的,这时候注册中心再通知客户端这个服务端是可用的。【比如说因为网络偶尔不稳定造成的在这里插入图片描述
    • 如何重试:考虑重试次数和重试间隔
      • 比较好的策略是立刻重试几次如果都失败了就再间隔一段时间继续重试
      • 一定要考虑重试间隔:第一次心跳失败之后,你立刻重试多半也是失败的,因为此时网络很可能还是不稳定。
  • 客户端容错:尽量在注册中心或者服务端节点出现问题的时候,依旧保证请求能够发送到正确的服务端节点上
    • 原因:从服务端崩溃到客户端最终知道是有一段延时的。在这段延时内,客户端还是会把请求发送到已经崩溃的服务端节点上。
    • 解决方案:“换节点”(failover)在这里插入图片描述
      • 延时计算:服务端和注册中心心跳间隔 + 注册中心通知客户端的时间(很快,毫秒级以内)。
      • 什么时候再将这个节点挪回可用列表:注册中心发现服务端再次恢复了,那么注册中心会通知客户端,此时客户端更新可用节点列表。在这里插入图片描述

往期精彩专栏内容,欢迎订阅:

🔗【八股消消乐】20250607:MySQL存储引擎InnoDB知识点汇总
🔗【八股消消乐】20250606:MySQL参数优化大汇总
🔗【八股消消乐】20250605:端午节产生的消费数据,如何分表分库?
🔗【八股消消乐】20250604:如何解决SQL线上死锁事故
🔗【八股消消乐】20250603:索引失效与优化方法总结
🔗【八股消消乐】20250512:慢SQL优化手段总结
🔗【八股消消乐】20250511:项目中如何排查内存持续上升问题
🔗【八股消消乐】20250510:项目中如何优化JVM内存分配?
🔗【八股消消乐】20250509:你在项目中如何优化垃圾回收机制?
🔗【八股消消乐】20250508:Java编译优化技术在项目中的应用
🔗【八股消消乐】20250507:你了解JVM内存模型吗?
🔗【八股消消乐】20250506:你是如何设置线程池大小?
🔗【八股消消乐】20250430:十分钟带背Duubo中大厂经典面试题
🔗【八股消消乐】20250429:你是如何在项目场景中选取最优并发容器?
🔗【八股消消乐】20250428:你是项目中如何优化多线程上下文切换?
🔗【八股消消乐】20250427:发送请求有遇到服务不可用吗?如何解决?

📌 [ 笔者 ]   文艺倾年
📃 [ 更新 ]   2025.6.7
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

在这里插入图片描述

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

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

相关文章

掌握Git核心:版本控制、分支管理与远程操作

前言 无论热爱技术的阅读者你是希望掌握Git的企业级应用,能够深刻理解Git操作过程及操作原理,理解工作区暂存区、版本库的含义;还是想要掌握Git的版本、分支管理,自由的进行版本回退、撤销、修改等Git操作方式与背后原理和通过分…

c#,Powershell,mmsys.cpl,使用Win32 API展示音频设备属性对话框

常识(基础) 众所周知,mmsys.cpl使管理音频设备的控制面板小工具, 其能产生一个对话框(属性表)让我们查看和修改各设备的详细属性: 在音量合成器中单击音频输出设备的小图标也能实现这个效果&a…

STM标准库-TIM旋转编码器

文章目录 一、编码器接口1.1简介1.2正交编码器1.3编码器接口基本结构**1. 模块与 STM32 配置的映射关系****2. 设计实现步骤(核心流程)****① 硬件规划****② 时钟使能****③ GPIO 配置(对应架构图 “GPIO” 模块)****④ 时基单元…

【原创】基于视觉模型+FFmpeg+MoviePy实现短视频自动化二次编辑+多赛道

AI视频处理系统功能总览 🎯 系统概述 这是一个智能短视频自动化处理系统,专门用于视频搬运和二次创作。系统支持多赛道配置,可以根据不同的内容类型(如"外国人少系列"等)应用不同的处理策略。 &#x1f3d…

C++----剖析list

前面学习了vector和string,接下来剖析stl中的list,在数据库中学习过,list逻辑上是连续的,但是存储中是分散的,这是与vector这种数组类型不同的地方。所以list中的元素设置为一个结构体,将list设计成双向的&…

纳米AI搜索与百度AI搜、豆包的核心差异解析

一、技术定位与设计目标 1、纳米AI搜索:轻量化边缘计算导向
专注于实时数据处理与资源受限环境下的高效响应,通过算法优化和模型压缩技术,实现在物联网设备、智能终端等低功耗场景的本地化部署。其核心优势在于减少云端依赖,保障…

不到 2 个月,OpenAI 火速用 Rust 重写 AI 编程工具。尤雨溪也觉得 Rust 香!

一、OpenAI 用 Rust 重写 Codex CLI OpenAI 已用 Rust 语言重写了其 AI 命令行编程工具 Codex CLI,理由是此举能提升性能和安全性,同时避免对 Node.js 的依赖。他们认为 Node.js “可能让部分用户感到沮丧或成为使用障碍”。 Codex 是一款实验性编程代理…

Python60日基础学习打卡Day46

一、 什么是注意力 注意力机制的由来本质是从onehot-elmo-selfattention-encoder-bert这就是一条不断提取特征的路。各有各的特点,也可以说由弱到强。 其中注意力机制是一种让模型学会「选择性关注重要信息」的特征提取器,就像人类视觉会自动忽略背景&…

WEB3全栈开发——面试专业技能点P1Node.js / Web3.js / Ethers.js

一、Node.js 事件循环 Node.js 的事件循环(Event Loop)是其异步编程的核心机制,它使得 Node.js 可以在单线程中实现非阻塞 I/O 操作。 🔁 简要原理 Node.js 是基于 libuv 实现的,它使用事件循环来处理非阻塞操作。事件…

Vscode下Go语言环境配置

前言 本文介绍了vscode下Go语言开发环境的快速配置,为新手小白快速上手Go语言提供帮助。 1.下载官方Vscode 这步比较基础,已经安装好的同学可以直接快进到第二步 官方安装包地址:https://code.visualstudio.com/ 双击一直点击下一步即可,记…

Go语言--语法基础5--基本数据类型--输入输出(1)

I : input 输入操作 格式化输入 scanf O : output 输出操作 格式化输出 printf 标准输入 》键盘设备 》 Stdin 标准输出 》显示器终端 》 Stdout 异常输出 》显示器终端 》 Stderr 1 、输入语句 Go 语言的标准输出流在打印到屏幕时有些参数跟别的语言…

永磁同步电机无速度算法--自适应龙贝格观测器

一、原理介绍 传统龙伯格观测器,在设计观测器反馈增益矩阵K时,为简化分析与设计,根据静止两相坐标系下的对称关系,只引入了K、K,两个常系数,且在实际应用时,大多是通过试凑找到一组合适的反馈增益系数缺乏…

LangChain工具集成实战:构建智能问答系统完整指南

导读:在人工智能快速发展的今天,如何构建一个既能理解自然语言又能调用外部工具的智能问答系统,成为许多开发者面临的核心挑战。本文将为您提供一套完整的解决方案,从LangChain内置工具包的基础架构到复杂系统的工程实践。 文章深…

【razor】x264 在 的intra-refresh和IDR插帧

你提到的是这样一个情况: 使用 DirectShow 采集,帧率稳定(如回调了20帧)使用 x264 的 total intra refresh 模式(intra-refresh=1) 进行编码但编码过程中「隔几十秒才有一帧intra(关键帧)」这不正常,具体分析如下: 🎯 一、问题核心 x264 的 intra refresh 模式(特…

随机算法一文深度全解

随机算法一文深度全解 一、随机算法基础1.1 定义与核心特性1.2 算法优势与局限 二、随机算法经典案例2.1 随机化快速排序原理推导问题分析与策略代码实现(Python、Java、C) 2.2 蒙特卡罗方法计算 π 值原理推导问题分析与策略代码实现(Python…

在 Conda 环境下配置 Jupyter Notebook 环境和工作目录

作为数据科学家或Python开发者,Jupyter Notebook 是我们日常工作的得力工具。本文将详细介绍如何在 Conda 环境中配置 Jupyter Notebook,包括环境设置和工作目录管理,帮助你打造高效的工作流程。 为什么要在 Conda 环境中使用 Jupyter Noteb…

MS39531N 是一款正弦驱动的三相无感直流电机驱动器,具有最小振动和高效率的特点

MS39531N 是一款正弦驱动的三相无感直流电机驱动器,具有最小振动和高效率的特点 简述 MS39531 是一款正弦驱动的 三相无感直流电机驱动器 ,具有最小振动和高效率的特点。该驱动器内部集成了基本的闭环速度控制功能,能够根据特定的应用定制电…

web3-基于贝尔曼福特算法(Bellman-Ford )与 SMT 的 Web3 DeFi 套利策略研究

web3-基于贝尔曼福特算法(Bellman-Ford )与 SMT 的 Web3 DeFi 套利策略研究 如何找到Defi中的交易机会 把defi看做是一个完全开放的金融产品图表,可以看到所有的一切东西;我们要沿着这些金融图表找到一些最优的路径,就…

分析 java 的 Map<String,Map<String, List<Map<String,Integer>>>>

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;public class Test02 {public static void main(String[] args) {//分析方法:由外层向内层逐渐拆解要定义的变量。再由内向外进行变量赋值//外层第一层&#x…

ChatterBox - 轻巧快速的语音克隆与文本转语音模型,支持情感控制 支持50系显卡 一键整合包下载

ChatterBox 是一个近期备受关注的开源语音克隆与文本转语音(TTS)模型,由 Resemble AI 推出,具备体积轻巧及超快的推理速度等特色。它也是首个支持情感夸张控制的开放源代码 TTS 模型,这一强大功能能让您的声音脱颖而出…