微服务治理与可观测性

服务注册与发现

核心功能
  • 服务实例动态变化:实例可能因扩缩容、故障或迁移导致IP变动。
  • 服务依赖解耦:调用方无需硬编码服务地址,降低耦合度。
  • 负载均衡:自动选择健康实例,提升系统可用性。
核心组件
  • 服务注册中心(Registry)

    • 作用:存储服务实例的元数据(如IP、端口、健康状态、标签),提供心跳检测和实例状态维护功能。
    • 代表工具:Eureka、Consul、Nacos、ZooKeeper。
  • 服务提供者(Provider) :启动时向注册中心注册自身信息;定期发送心跳以维持注册状态。

  • 服务消费者(Consumer) :从注册中心获取可用服务实例列表;通过负载均衡策略(如轮询、权重)选择实例发起调用。

工作流程
  • 注册阶段:服务提供者启动时,向注册中心发送注册请求(包含元数据);注册中心存储实例信息,并标记为“健康”状态。
  • 心跳维护:提供者周期性(如30秒)发送心跳包,刷新存活状态;若注册中心未收到心跳,标记实例为“不健康”或删除。
  • 发现阶段:消费者向注册中心查询目标服务的实例列表;注册中心返回当前健康的实例列表。
  • 调用与负载均衡:消费者根据策略(如随机、轮询)选择实例发起请求。

流量控制策略

常见限流算法
算法原理适用场景优缺点
固定窗口计数器每单位时间(如1秒)允许固定数量的请求,超出则拒绝。简单场景(如API Key限流)实现简单,但窗口切换时可能突发流量溢出。
滑动窗口计数器将时间窗口细分为多个小窗口,统计最近N个小窗口的总请求量。需要平滑限流的场景更精准,但计算复杂度较高。
漏桶算法请求以恒定速率处理(类似水从漏桶流出),超出桶容量则丢弃或排队。流量整形(如消息队列消费)输出流量恒定,但无法应对突发流量。
令牌桶算法以固定速率向桶中添加令牌,请求需获取令牌才能执行,否则拒绝或等待。允许突发流量(如秒杀场景)灵活支持突发,但需维护令牌状态。
  • 单机限流Guava RateLimiter:基于令牌桶算法,支持预热模式。

  • 分布式限流

    • Redis + Lua脚本:利用Redis的原子操作统计全局请求量。
    • Sentinel:阿里开源的流量控制组件,支持集群限流和动态规则配置。
    • Nginx限流模块:通过limit_req_zonelimit_conn_zone实现网关层限流。
熔断(Circuit Breaking)
  • 熔断器:当服务调用失败率达到阈值时,后续请求直接拒绝,避免资源耗尽。

  • 熔断器三态转换

    • Closed(闭合) :正常处理请求,统计失败率。
    • Open(断开) :拒绝所有请求,直接返回错误或降级结果。
    • Half-Open(半开) :尝试放行部分请求,若成功则恢复Closed状态。
  • 熔断参数配置

    • 失败率阈值:如10秒内失败率超过50%触发熔断。
    • 熔断时长:Open状态持续时间(如5秒后进入Half-Open)。
    • 最小请求数:统计窗口内至少需要一定请求量才触发熔断(避免低流量误判)。
  • 实现工具:Hystrix、Sentinel。
降级(Fallback)
  • 手动降级:运维人员通过配置中心手动触发(如大促期间关闭积分兑换)。

  • 自动降级:基于熔断规则或系统负载自动触发(如CPU超过80%时关闭推荐服务)。

  • 降级策略

    • 返回默认值:如商品详情页降级时返回缓存中的静态信息。
    • 简化流程:跳过非必要步骤(如下单时不校验库存,仅记录日志异步核对)。
    • 功能屏蔽:直接关闭某功能入口(如隐藏“秒杀”按钮)。
负载均衡(Load Balancing)
  • 流量分配:将请求合理分发到多个服务实例,避免单点过载。

  • 健康检查:自动剔除不健康实例,保证请求成功率。

  • 负载均衡算法

    算法原理适用场景
    轮询(Round Robin)依次将请求分发到每个实例。实例性能均匀的场景
    加权轮询根据实例权重分配请求(如CPU核数多的实例权重高)。异构硬件环境
    随机(Random)随机选择一个实例。快速简单,无状态场景
    最小连接数将请求分发给当前连接数最少的实例。长连接服务(如WebSocket)
    一致性哈希相同请求参数(如用户ID)始终路由到同一实例。缓存服务、会话保持需求

配置中心

核心功能
  • 集中化存储:所有配置(数据库连接、功能开关、超时参数等)存储在统一平台,避免配置散落在代码或配置文件中。
  • 动态更新:修改配置后无需重启服务,实时或近实时生效(如调整日志级别、限流阈值)。
  • 环境隔离:支持多环境(dev/test/prod)配置隔离,同一服务在不同环境加载不同配置。
  • 版本控制与回滚:记录配置变更历史,支持一键回滚到任意版本。
  • 权限与审计:配置修改需权限控制,记录操作日志(如谁在何时修改了哪些配置)。
  • 加密与安全:敏感配置(密码、密钥)加密存储,传输过程使用TLS加密。
核心组件
  • 配置存储

    • 数据库:MySQL、PostgreSQL等,存储配置键值对。
    • 分布式KV存储:Etcd、Consul,支持高可用和快速读取。
    • 文件系统:Git仓库(如Spring Cloud Config支持Git后端)。
  • 配置管理平台:提供Web界面或API,供运维人员查看、修改和发布配置。

  • 客户端SDK:集成到服务中,负责从配置中心拉取配置并监听变更(如Nacos Client、Spring Cloud Config Client)。

  • 配置推送机制

    • 长轮询(Long Polling) :客户端定期检查配置变更(如Nacos)。
    • WebSocket/SSE:服务端主动推送变更(实时性更高)。
工作流程
  • 服务启动:服务通过客户端SDK从配置中心拉取当前环境的配置。
  • 配置修改:管理员通过Web界面修改配置并发布。
  • 配置推送:配置中心通知所有订阅该配置的服务实例。
  • 配置生效:服务动态加载新配置(如热更新线程池大小)。

可观测性

日志(Logs)
  • 定义:系统运行时生成的文本记录,包含时间戳、事件描述和上下文信息。

  • 结构化:使用JSON格式,便于解析(如{"level":"ERROR","time":"2023-10-05","message":"connection failed"})。

  • 分级:DEBUG、INFO、WARN、ERROR等级别,按需采集。

  • 上下文:附加请求ID、用户ID、设备信息等,支持关联分析。

  • 工具链

    • 采集:Fluentd、Filebeat。
    • 存储与搜索:Elasticsearch、Loki。
    • 可视化:Kibana、Grafana。
指标(Metrics)
  • 定义:系统运行状态的数值化度量(如QPS、延迟、错误率)。

  • 核心类型

    • 计数器(Counter) :累加值(如总请求数)。
    • 仪表盘(Gauge) :瞬时值(如当前内存使用量)。
    • 直方图(Histogram) :统计分布(如请求延迟的P50/P90/P99)。
    • 摘要(Summary) :类似直方图,但客户端计算分位数。
  • 工具链

    • 采集与存储:Prometheus、InfluxDB。
    • 可视化与告警:Grafana、Alertmanager。
追踪(Traces)
  • 定义:记录请求在分布式系统中的完整调用链路,展示跨服务、跨组件的执行路径和耗时。

  • 核心概念

    • Trace:一个请求的完整生命周期(如用户下单请求)。

    • Span:Trace中的一个操作单元(如调用支付服务),包含:

      Span ID:唯一标识。

      Parent Span ID:父级Span ID,构建树形结构。

      Tags:附加信息(如HTTP状态码、数据库查询语句)。

    • 上下文传播(Context Propagation) :通过HTTP头(如traceparent)在服务间传递Trace信息。

  • 工具链

    • 采集与存储:Jaeger、Zipkin、SkyWalking。
    • 协议标准:OpenTelemetry(统一日志、指标、追踪的API规范)。

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

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

相关文章

嵌入式linux系统中内存管理的方法与实现

第一:linux内核管理详解图形 第二:Linux内存管理详细分析 深入剖析Linux内核内存管理 作为嵌入式系统开发者,理解Linux内核的内存管理对于开发高效、稳定的系统至关重要。在这篇文章中,我们将详细解析Linux内核如何划分物理内存和虚拟内存,页表、MMU(内存管理单元)与TL…

【dataframe显示不全问题】打开一个行列超多的excel转成df之后行列显示不全

出现问题如下图: 解决方案~ display.width解决列显示不全 pd.set_option(display.max_columns,1000) pd.set_option(display.width, 1000) pd.set_option(display.max_colwidth,1000) pd.set_option(display.max_rows,1000)

Linux——Shell编程之正则表达式与文本处理器(笔记)

目录 基础正则表达式 1:基础正则表达式示例 (4)查找任意一个字符“.”与重新字符“*” (5)查找连续字符范围“{ }” 文本处理器 一、sed工具 二、awk工具 (1)按行输出文本 (2&#xff0…

OpenHarmony系统-源码下载,环境搭建,编译,烧录,调试

获取源码 以OpenHarmony5.0.3为例 repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-5.0.3-Release --no-repo-verify repo sync -c repo forall -c git lfs pull搭建环境 安装必要的工具和命令 apt-get install -y apt-utils binutils bison flex bc …

Vue3 本地打包启动白屏解决思路!! !

“为什么我访问 http://127.0.0.1:5501/index.html 白屏,删了 index.html 再访问 / 就又活过来了?” —— 你的项目与 SPA 路由的“宫斗大戏” 一、问题复现 场景 本地通过 VSCode Live Server(或其他静态服务器)启动了打包后的 V…

数字人(2):数字人技术全景透视(2025演进版)

随着人工智能技术的迅猛发展,数字人技术发展也是一日千里。站在当下,着眼未来,我们一起在回眸透视过去的基础上,一起共同眺望数字人技术的未来。 一、数字人技术体系重构 我们可以用三维定义对数字人技术进行框架重构 维度 技术内涵 典型特征 物理层 人体数字化建模技术 …

小刚说C语言刷题——1035 判断成绩等级

1.题目描述 输入某学生成绩,如果 86分以上(包括 86分)则输出 VERY GOOD ,如果在 60到 85之间的则输出 GOOD (包括 60和 85),小于 60 的则输出 BAD。 输入 输入只有一行,包括 1个整数。 输出 输出只有一行&#xf…

React-在使用map循环数组渲染列表时须指定唯一且稳定值的key

在渲染列表的时候,我们须给组件或者元素分配一个唯一值的key, key是一个特殊的属性,不会最终加在元素上面,也无法通过props.key来获取,仅在react内部使用。react中的key本质是服务于diff算法, 它的默认值是null, 在diff算法过程中…

Zookeeper的通知机制是什么?

大家好,我是锋哥。今天分享关于【Zookeeper的通知机制是什么?】面试题。希望对大家有帮助; Zookeeper的通知机制是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 的通知机制是其核心特性之一&#xf…

【LangChain实战】构建下一代智能问答系统:从RAG架构到生产级优化

打破传统问答系统的次元壁 当ChatGPT在2022年掀起AI革命时,开发者们很快发现一个残酷现实:通用大模型在专业领域的表现如同拿着地图的盲人,既无法理解企业私有数据,也无法保证事实准确性。这催生了RAG(检索增强生成&a…

UDS中功能寻址可以请求多帧数据嘛?当ECU响应首帧后,诊断仪是通过物理寻址发送流控帧嘛?

文章目录 1. 前言📢1.1 功能寻址是否支持请求多帧数据?1.2 ECU发送首帧(FF)后,诊断仪如何发送流控帧(FC)?1.3 协议依据(ISO 14229-1)1.4 实际应用注意事项总结1. 前言📢 在UDS(Unified Diagnostic Services)协议中,功能寻址与物理寻址的使用规则以及多帧数据传…

PHP异常处理__Throwable

在 PHP 里,Throwable 是一个极为关键的接口,自 PHP 7 起被引入。它为错误和异常处理构建了一个统一的框架。下面会详细介绍 Throwable 的相关内容。 1. 基本概念 Throwable 是 Exception 和 Error 的父接口。在 PHP 7 之前,异常&#xff08…

无需训练的具身导航探索!TRAVEL:零样本视觉语言导航中的检索与对齐

作者: Navid Rajabi, Jana Kosecka 单位:乔治梅森大学计算机科学系 论文标题:TRAVEL: Training-Free Retrieval and Alignment for Vision-and-Language Navigation 论文链接:https://arxiv.org/pdf/2502.07306 主要贡献 提出…

Vue3+Vite+TypeScript+Element Plus开发-22.客制Table组件

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 Header响应式菜单缩展 Mockjs引用与Axios封装 登录设计 登录成功跳转主页 多用户动态加载菜单 Pinia持久化 动态路由 -动态增加路由 动态路由-动态删除…

Java读取JSON文件并将其中元素转为JSON对象输出

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Java读取JSON文件并将其中元素转为JSON对象输…

Spring Boot自动配置原理深度解析:从条件注解到spring.factories

大家好!今天我们来深入探讨Spring Boot最神奇的特性之一——自动配置(Auto-configuration)。这个功能让Spring Boot如此受欢迎,因为它大大简化了我们的开发工作。让我们一起来揭开它的神秘面纱吧!👀 🌟 什么是自动配置…

【ELF2学习板】利用OpenMP采用多核并行技术提升FFTW的性能

目录 引言 OpenMP简介 编译OpenMP支持的FFTW库 部署与测试 测试程序 程序部署 测试结果 结语 引言 在前面已经介绍了在ELF2开发板上运行FFTW计算FFT。今天尝试利用RK3588的多核运算能力来加速FFT运算。FFTW利用多核能力可以考虑使用多线程或者OpenMP。今天介绍一下Ope…

2000-2017年各省城市天然气供气总量数据

2000-2017年各省城市天然气供气总量数据 1、时间:2000-2017年 2、来源:国家统计局、能源年鉴 3、指标:行政区划代码、城市、年份、城市天然气供气总量 4、范围:31省 5、指标说明:城市天然气供气总量是指在一定时间…

Hadoop的三大结构及其作用?

Hadoop是一个分布式存储和计算框架,其三大核心组件是HDFS(Hadoop Distributed File System)、YARN(Yet Another Resource Negotiator)和MapReduce。它们各自有着重要的作用,共同构成了Hadoop生态系统的基础…

【AI论文】ColorBench:视觉语言模型能否看到并理解多彩的世界?一个全面的色彩感知、推理和鲁棒性基准测试

摘要:颜色在人类感知中起着重要作用,通常在视觉推理中提供关键线索。 然而,尚不清楚视觉语言模型(VLMs)是否以及如何像人类一样感知、理解和利用颜色。 本文介绍了ColorBench,这是一个精心设计的创新基准&a…