Spring Cloud之注册中心之Nacos负载均衡

Spring Cloud之注册中心之Nacos负载均衡

目录

负载均衡

服务下线

权重配置

配置权重

解决办法

常见问题

同集群优先访问

给实例配置集群名称

开启Nacos负载均衡策略


负载均衡

⽣产环境相对是⽐较恶劣的, 我们需要对服务的流量进⾏更加精细的控制. Nacos⽀持多种负载均衡策略, 包括权重, 同机房, 同地域, 同环境等.

服务下线

当某⼀个节点上接⼝的性能较差时, 我们可以第⼀时间对该节点进⾏下线.操作步骤: 服务详情 -> 下线

点击下线后, 再次请求接⼝, 会发现该服务没有请求进来了。
再次单击上线, 该节点会继续收到请求。下线之前

下线端口号为9091的服务进程之后:

权重配置

除了下线之外, 我们也可以配置这个节点的流量权重。

配置权重

操作步骤: 找到对应节点 ->编辑 -> 在弹出的窗⼝修改权重值。

下面修改端口号为9091的服务进程的权重为0.1

观察结果:

我们可以看到,三个服务实例接收到的请求次数几乎一样多,这是为什么呢?明明我们已经配置了权重且比例稍微比较大,按理说应该能看到现象。是因为我们使用了LoadBalance,它本来就是负责负载均衡的,此时就不会使用Nacos的权重属性进行负载均衡。我们可以参考一下文章:

解决办法

开启Nacos负载均衡策略application.properties

spring.cloud.loadbalancer.nacos.enabled=true

application.yml 

spring: cloud: loadbalancer: nacos: enabled: true

观察结果:

由此我们可以看到,我们设置的权重生效了。

常见问题

修改权重时, 可能会报错:

报错信息为:

caused: errCode: 500, errMsg: do metadata operation failed ;caused:
com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group
[naming_instance_metadata] did not find the Leader node;caused: The Raft Group
[naming_instance_metadata] did not find the Leader node; 

原因: Nacos 采⽤ raft 算法来计算 Leader, 并且会记录前⼀次启动的集群地址, 当服务器 IP 改变时会导致 raft 记录的集群地址失效, 导致选 Leader 出现问题. (⽹络环境发⽣变化时, IP地址也会发⽣变化)解决办法: 删除 Nacos 根⽬录下 data ⽂件夹下的 protocol ⽂件夹即可。

同集群优先访问

Nacos把同⼀个机房内的实例, 划分为⼀个集群. 所以同集群优先访问, 在⼀定程度上也可以理解为同房优先访问.
微服务架构中, ⼀个服务通常有多个实例共同提供服务, 这些实例可以部署在不同的机器上, 这些机器可以分布在不同的机房, ⽐如product-service:实例1: 分布在上海机房
实例2: 分布在上海机房
实例3: 分布在北京机房
实例4: 分布在北京机房

微服务访问时, 应尽量访问同机房的实例. 当本机房内实例不可⽤时, 才访问其他机房的实例。⽐如order-service 在上海机房, product-service 在北京和上海机房都有实例, 那我们希望可以优先访问上海机房, 如果上海机房没有实例, 或者实例不可⽤, 再访问北京机房的实例. 通常情况下, 因为同⼀个机房的机器属于⼀个局域⽹, 局域⽹访问速度更快⼀点.

给实例配置集群名称

1. 配置集群名称给order-service和端口号为9090的product-service配置 SH 集群名称。

spring: cloud: nacos: discovery: server-addr: 110.41.51.65:10020 cluster-name: SH #集群名称: 上海集群

给端口号为9091的product-service 和 端口号为9092的product-service配置 BJ 集群名称。

开启Nacos负载均衡策略

同权重配置

spring: cloud: nacos: loadbalancer: nacos: enabled: true

多次访问“http://127.0.0.1:8080/order/1”观察结果:

我们前面配置order-service集群为 SH,配置端口号为9090的product-service集群为 SH,配置端口号为9091的product-service集群为 BJ,配置端口号为9092的product-service集群为 BJ。上面的结果可以看到,请求都发送到了端口号为9090的product-service集群,与预期符合。

Read more

一文掌握 Git 分支:本地管理 + 远程协作 + 最佳实践

前言:为什么分支如此重要? 在现代软件开发中,分支(Branch) 是 Git 最强大的特性之一。想象一下: * 🚀 你可以在不影响主代码的情况下开发新功能 * 🐛 你可以独立修复紧急 Bug * 🧪 你可以安全地尝试实验性想法 * 👥 团队成员可以并行工作而不互相干扰 这一切都归功于 git branch 命令。本文将带你从零开始,全面掌握 Git 分支管理的核心技能。 一、分支的本质:理解 Git 分支模型 在深入命令之前,先理解分支的本质: ┌─────────────────────────────────────────────────┐ │ Git 分支 = 指向提交的轻量级指针 │ │ │ │ main ──→ ● ──→ ● ──→ ● (最新提交) │ │ ↘ │ │ feature ──→ ● ──→ ● (独立开发线) │ └─────────────────────────────────────────────────┘ 关键概念: * 分支只是一个指向特定提交的指针 * 创建分支几乎零成本(只创建指针,不复制文件)

By Ne0inhk
PandaWiki:更轻量的开源知识库,问答效果到底如何?(本地部署教程+效果实测)

PandaWiki:更轻量的开源知识库,问答效果到底如何?(本地部署教程+效果实测)

开源 RAG 项目我之前主要围绕 RAGFlow 写了不少落地案例。RAGFlow 定位是大而全的企业级 RAG 引擎,所以社区里也一直有人吐槽:资源吃得多、处理慢。但这事儿某种程度上就是端到端全包(解析、切分、向量化、检索、权限、工作流、评测)的代价,工程体量上去了,默认就不可能太轻。 如果你想找一款更轻量的开源方案,主要用来处理产品文档、技术文档、FAQ、博客等内容,那可以看看今天要介绍的 PandaWiki。一句话总结:PandaWiki 更像开源版的知识库产品,而不是一个给工程师从零拼装的 RAG 引擎。 这个项目实际我也是近期才注意到,GitHub 目前 8.6K Star,看趋势图下半年热度是一路走高。我花了几天集中测了下,确实有一些可圈可点的地方,这篇就抓大放小,来和各位说道说道。 这篇试图说清楚: PandaWiki 的手把手本地部署过程、

By Ne0inhk

3大开源修复模型横评:云端镜像快速部署,1天完成全面测试

3大开源修复模型横评:云端镜像快速部署,1天完成全面测试 你是不是也遇到过这样的情况:团队要选一个AI图像修复工具,大家各自在本地跑GFPGAN、CodeFormer、GPEN,结果有人用笔记本CPU跑,有人用高端显卡,测试速度、画质效果完全没法比?最后开会讨论时,谁的电脑配置高,谁的结果就“看起来更好”,根本没法做出公正决策。 这正是很多技术主管在搭建AI工具链时最头疼的问题——缺乏统一、可复现的测试环境。不同设备、不同依赖版本、不同参数设置,导致评估结果偏差巨大,选型变成“看运气”。 别急,今天我就来帮你解决这个痛点。我们不靠本地部署“拼电脑”,而是直接上云端标准化镜像环境,一键部署三大主流开源人脸修复模型:GFPGAN、CodeFormer 和 GPEN,在相同GPU资源下完成公平对比测试,1天内搞定从部署到出报告的全流程。 ZEEKLOG星图平台提供了预置好这三大模型的AI镜像,无需手动安装复杂依赖,不用折腾CUDA、PyTorch版本兼容问题,点击即用,还能对外暴露API服务,方便团队成员远程调用测试。整个过程就像租了一台“AI修复工作站”,谁都能用,结果可比对。

By Ne0inhk