当前位置: 首页 > article >正文

【微服务架构】本地负载均衡的实现(基于随机算法)

前言

负载均衡
  • 概念:一种将网络流量或业务请求均匀分配到多个服务器或服务实例上的技术,旨在提高系统的可用性、性能和可伸缩性
  • 作用:
    • 提高性能:通过将请求分散到多个实例上,避免单个实例因请求过多而过载,从而提高系统的整体处理能力。
    • 增强可用性:当某一实例发生故障时,负载均衡器可以自动将流量重定向到其他健康的实例,确保服务仍然可用。
    • 实现可伸缩性:可以根据系统的负载情况,动态地添加或删除服务实例,以适应业务需求的变化。
  • 实现方式
    • 服务器端负载均衡:SpringCloud的LoadBalancer、Netflix的Ribbon
    • 客户端负载均衡:本地负载均衡器【可基于特定算法手写】
    • 中间层负载均衡:Nginx
负载均衡器
  • 概念:是一种软件或硬件设备,用于在多个服务器或服务实例之间分发网络流量或业务请求。

常见负载均衡算法【策略】

  • 随机算法
    • 随机选取集群中的一台服务器访问。
    • 随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器。
  • 轮询算法默认
    • 按顺序向每个服务实例发送请求,适用于系统中的节点处理能力相同的情况。
  • 权重算法
    • 给配置高、负载低的机器配置更高的权重,让其处理更多的请求;
    • 而配置低、负载高的机器,给其分配较低的权重,降低其系统负载。

通俗理解

  • 在微服务架构中,为保证项目的高可用性【如故障转移】和可拓展性【如动态服务注册】,通常需要对特定服务进行集群;
  • 而调用服务者[消费者]通过RPC远程调用目标服务[生产者]的接口时则存在:"具体应该调用集群中的哪个服务?"的问题;
  • 此时需要通过负载均衡实现具体服务的调用[目标服务实例的筛选];
简单概述

负载均衡 = 负载均衡器 + 负载均衡算法【策略】 —》 按特定策略从服务集群中挑选一个服务实例【服务器】调用。


实践(以随机算法为例)

package com.xiaohan.loadbalance;/*** @program: SpringCloud_Demo* @description: 本地负载均衡器的实现:随机算法* @author: 韩小豪* @create: 2025-01-04 13:46**/import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Random;/*** 随机算法实现* 实现自定义的本地负载均衡接口【策略模式】*/
@Component
public class RandomLoadBalance implements LoadBalance {  @Autowiredprivate DiscoveryClient discoveryClient;  //用以从服务注册中心的Server端获取已注册的目标服务的ip地址和端口号@Overridepublic ServiceInstance getInstance(String serviceId) {//获取目标服务可用的所有实例【可用的ip地址和端口号】//根据服务名称(id)从注册中心中获取其的地址和端口号:返回数组,因为目标服务可能做集群List<ServiceInstance> serviceInstances = discoveryClient.getInstances(serviceId);//判空if (serviceInstances == null || serviceInstances.isEmpty()) {  //没有可用服务return null;}/*** 随机算法思想:设置随机数的取值范围,形参可以直接传入目标服务的可用实例数* 例:当目标服务存在两个可用实例时:数组下标为0和1* 此时random.nextInt(2)只会在0、1之间随机取值,而不会取到2*/Random random = new Random();int index = random.nextInt(serviceInstances.size());//返回服务列表中具体要调用的服务实例return serviceInstances.get(index);}
}

结语

  • 了解原理和具体实现才利于更好使用【理解 > 会用
  • 基于轮训和权重算法的实现见首页文章后续更新

相关文章:

【微服务架构】本地负载均衡的实现(基于随机算法)

前言 负载均衡 概念&#xff1a;一种将网络流量或业务请求均匀分配到多个服务器或服务实例上的技术&#xff0c;旨在提高系统的可用性、性能和可伸缩性。作用&#xff1a; 提高性能&#xff1a;通过将请求分散到多个实例上&#xff0c;避免单个实例因请求过多而过载&#xff…...

C盘急救实录:从爆红到畅快

极速救援通道&#xff08;懒人专享&#xff09; 老规矩&#xff0c;先上王炸方案&#xff01;”小番茄C盘清理器”直达链接&#xff1a;https://cclean-cdn.xkbrowser.com/cleanmaster/FanQieClean_13046_st.exe 这个神器有三绝&#xff1a; 智能扫描引擎&#xff1a;能识别23…...

从零开始理解基于深度学习的语义分割模型:RCA与RCM模块的实现

从零开始理解基于深度学习的语义分割模型:RCA与RCM模块的实现 随着深度学习技术的发展,图像分割任务取得了长足的进步。本文将从一个具体的PyTorch代码实例出发,带大家了解一种 novel 的语义分割网络架构——RCA(Rectangular Self-Calibration Attention)和 RCM(Rectang…...

openGl片段着色器的含义

片段着色器的含义及代码中的应用说明&#xff1a; 1. 片段着色器的基本概念 片段着色器&#xff08;Fragment Shader&#xff09;是OpenGL着色器管线中的关键组件&#xff0c;主要用于计算屏幕空间中每个片段&#xff08;对应像素&#xff09;的最终颜色。它是图形渲染流程的…...

ROS2 部署大语言模型节点

4GB GPU的DeepSeek-Coder 1.3B模型&#xff0c;并且它已经被量化或优化过。以下是具体的步骤&#xff1a; 安装必要的依赖项&#xff1a; pip install transformers torch grpcio googleapis-common-protos创建一个新的ROS 2包&#xff1a; cd ~/ros2_ws/src ros2 pkg creat…...

UART转APB模块ModelSim仿真

一、简介 之前介绍过一个UART转AHB模块&#xff0c;这个代码的框架有个好处&#xff0c;就是FPGA内总线接口比较容易修改成其他总线接口。下图是UART转AHB模块中子模块uart_ahb_mst的框图&#xff0c;主要有三个状态机&#xff1a; &#xff08;1&#xff09; UART_RX_FSM将接收…...

【LeetCode 题解】算法:4.寻找两个正序数组的中位数

1. 引言&#xff1a;挑战 LeetCode 经典算法题 在算法这片广袤无垠的天地里&#xff0c;一道道经典题目宛如夜空中熠熠生辉的星辰&#xff0c;持续吸引着开发者们投身其中&#xff0c;不断探索。今天&#xff0c;我们继续将目光聚焦于 LeetCode 平台上一道极具代表性的题目&am…...

基于 SGLang 部署 Qwen2.5 7B 模型

本文将详细介绍如何使用 SGLang 快速部署 Qwen2.5 7B 模型,并深入探讨 SGLang 的关键性能优化技术,以及预期可以达到的延迟和吞吐量。 1. SGLang 框架介绍 SGLang 旨在解决 LLM 服务中的核心挑战: 高延迟: LLM 推理通常需要较长的计算时间,导致响应延迟高。低吞吐量: 由…...

Cesium 自定义路径导航材质

cesium 自定义路径导航纹理图片随便更换&#xff0c;UI 提供设计图片即可达到效果&#xff1b; 打开小马的weix 关注下 搜索“技术链” 回复关键词《《路径》》获取原始代码&#xff1b; 拿到就能用轻松解决&#xff01;帮忙点个关注吧&#xff01;...

JDBC 连接字连接 KingbaseES支持主从负载均衡参数说明。

JDBC 连接字符串是用于连接 KingbaseES&#xff08;人大金仓数据库&#xff09;的&#xff0c;支持主从负载均衡。让我们逐一解析各个参数的作用&#xff0c;并探讨如何调整到最优。 参数解析 jdbc:kingbase8://10.10.14.19:54321/xxx_onlinejdbc:kingbase8://&#xff1a;指定…...

Java运行时的堆、栈和方法区

目录 1. 堆&#xff08;Heap&#xff09;存储内容与线程关系 2. 栈&#xff08;Stack&#xff09;存储内容与线程关系 3. 方法区&#xff08;Method Area&#xff09;存储内容与线程关系变动 1. 堆&#xff08;Heap&#xff09; 存储内容 对象实例&#xff08;对象实例的全部数…...

【江协科技STM32】BKP备寄存器RTC实时时钟(学习笔记)

BKP备寄存器 BKP简介 BKP&#xff08;Backup Registers&#xff09;备份寄存器BKP可用于存储用户应用程序数据。当VDD&#xff08;2.0~3.6V&#xff09;电源被切断&#xff0c;他们仍然由VBAT&#xff08;1.8~3.6V&#xff09;维持供电。当系统在待机模式下被唤醒&#xff0…...

卷积神经网络 - 参数学习

本文我们通过两个简化的例子&#xff0c;展示如何从前向传播、损失计算&#xff0c;到反向传播推导梯度&#xff0c;再到参数更新&#xff0c;完整地描述卷积层的参数学习过程。 一、例子一 我们构造一个非常简单的卷积神经网络&#xff0c;其结构仅包含一个卷积层和一个输出…...

亮数据爬取API爬取亚马逊电商平台实战教程

前言 在当今数据驱动的商业环境中&#xff0c;企业需要快速、精准地获取互联网上的公开数据以支持市场分析、竞品调研和用户行为研究。然而&#xff0c;传统的手动网页爬取方式面临着诸多挑战&#xff1a;IP封锁、验证码干扰、网站结构频繁变更&#xff0c;以及高昂的运维成本…...

[CLS] Token 在 ViT(Vision Transformer)中的作用与实现

[CLS] Token 在 ViT&#xff08;Vision Transformer&#xff09;中的作用与实现 1. 什么是 [CLS] Token&#xff1f; [CLS]&#xff08;classification token&#xff09;是Transformer模型中一个可学习的嵌入向量&#xff0c;最初在 BERT&#xff08;Bidirectional Encoder …...

基于网启PXE服务器的批量定制系统平台

项目概述 1.需求 公司新购了一批服务器和台式机&#xff0c;需要为台式机和服务器安装系统&#xff0c;一部分需要安装国产OpenEuler&#xff0c;一部分要求安装CentOS 7.9&#xff0c;同时也要满足定制化需求&#xff0c;即按要求分区安装相应软件。 2.使用开源软件 &…...

Reactor/Epoll为什么可以高性能?

在 Reactor 模式中使用 epoll_wait 实现低 CPU 占用率的核心原理是 ​事件驱动的阻塞等待机制&#xff0c;而非忙等待。以下通过分步骤解析其工作原理和性能优势&#xff1a; void network_thread() {int epoll_fd epoll_create1(0);epoll_event events[MAX_EVENTS];// 添加U…...

-JavaEE 应用Servlet 路由技术JDBCMybatis 数据库生命周期

#JavaEE-HTTP-Servlet& 路由 & 周期 参考&#xff1a; https://blog.csdn.net/qq_52173163/article/details/121110753 1 、解释 Servlet 是运行在 Web 服务器或应用服务器上的程序 , 它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数…...

在本地Windows机器加载大模型并生成内容

本篇演示在本地机器下载和加载大模型并获取AI产生的内容。简单起见&#xff0c;使用的大模型是Qwen2.5-0.5B-Instruct&#xff0c;整个模型的所有文件不到1G。 Qwen2.5-0.5B-Instruct 是阿里巴巴云 QWen 团队基于 Transformer 架构开发的轻量级指令调优语言模型&#xff0c;专…...

热门面试题第14天|Leetcode 513找树左下角的值 112 113 路径总和 105 106 从中序与后序遍历序列构造二叉树 (及其扩展形式)以一敌二

找树左下角的值 本题递归偏难&#xff0c;反而迭代简单属于模板题&#xff0c; 两种方法掌握一下 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html 我们来分析一下题目&#…...

shopify跨境电商行业前景与规模

Shopify跨境电商行业前景与规模分析 一、行业背景 Shopify 是一个全球知名的电子商务平台&#xff0c;它为小型企业到大型企业提供了创建和管理在线商店的工具。近年来&#xff0c;随着全球化进程的加快以及互联网技术的发展&#xff0c;跨境电商已经成为国际贸易的重要组成部…...

【计算机网络】-计算机网络期末复习题复习资料

一、计算机网络体系结构&#xff08;800字&#xff09; 1. OSI参考模型 七层结构&#xff1a;物理层→数据链路层→网络层→传输层→会话层→表示层→应用层 各层核心功能&#xff1a; 物理层&#xff1a;比特流传输&#xff08;如RJ45、光纤接口&#xff09; 数据链路层&…...

游戏中的碰撞检测算法

参考博客Sort, sweep, and prune: Collision detection algorithms...

批归一化(Batch Normalization)与层归一化(Layer Normalization)的区别与联系

文章目录 一、Batch normalization 理论与应用1. 理论解释2. 数值例子 二、Layer normalization 理论与应用1. 理论解释2. 数值例子 三、Layer Normalization 和 Batch Normalization 的区别四、《Transformers without Normalization》笔记 一、Batch normalization 理论与应用…...

12届蓝桥杯—货物摆放

货物摆放 题目描述 小蓝有一个超大的仓库&#xff0c;可以摆放很多货物。 现在&#xff0c;小蓝有 nn 箱货物要摆放在仓库&#xff0c;每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向&#xff0c;每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所…...

c++进阶--哈希表的实现

大家好&#xff0c;今天我们来学习ubordered_set和unordered_map的底层哈希表。 目录 哈希表实现 1. 哈希概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因⼦ 1.4 将关键字转为整数 1.5 哈希函数 下面我们介绍几种哈希函数&#xff1a;1.5.1 除法散列法/除留余数法 1.…...

颠覆传统:SaaS 品牌如何通过 SEO 策略引爆市场!

SaaS 商业模式提供了令人难以置信的可扩展性和盈利能力——但前提是与正确的营销增长策略相结合。 SaaS 品牌知道&#xff0c;托管基于云的应用程序的成本会随着用户量的增加而降低&#xff0c;因此必须专注于订阅者的快速增长&#xff0c;以保持竞争力并降低成本。 许多 CMO…...

【数据库发展史】

数据库的发展历史可以追溯到20世纪50年代&#xff0c;随着计算机技术的进步和数据管理需求的演变&#xff0c;数据库系统经历了多个阶段的变革。以下是数据库技术的主要发展阶段&#xff1a; 1. 前数据库时代&#xff08;1950年代前&#xff09; 手工管理&#xff1a;数据通过…...

HTTP 核心知识点整理

1. HTTP 基础 ​定义&#xff1a;HTTP&#xff08;HyperText Transfer Protocol&#xff09;是应用层协议&#xff0c;基于 ​请求-响应模型&#xff0c;用于客户端&#xff08;浏览器&#xff09;与服务器之间的通信。​特点&#xff1a; ​无状态&#xff1a;每次请求独立&a…...

从AEC-Q100看车规芯片的可靠性设计要点

引言 随着汽车电子化、智能化的飞速发展&#xff0c;汽车电子控制系统对芯片的可靠性提出了极为严苛的要求。AEC-Q100是汽车电子委员会&#xff08;Automotive Electronics Council&#xff09;制定的车规级芯片可靠性标准&#xff0c;旨在确保芯片能够在复杂多变的汽车环境中…...