随机算法 实现 负载均衡

表妹要我教她负载均衡算法 一、随机法(Random) 完全随机:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。 代码实现: public class Servers { public List<String> list = new ArrayList<>() { { add("192.168.1. 阅读详情

需求:

实现一个最简单的负载均衡(均衡算法采用随机算法)。

具体实现:前端用户访问localhost:8080,通过反向代理随机分配到localhost:9091或lcalhost:9092。

1、确保启动这2个(或多个)9091、9092web服务

实现代码查看:

https://blog.youkuaiyun.com/github_26672553/article/details/99165065

2、前端访问负载均衡服务器 主要代码

func main() {
	_ = http.ListenAndServe(":8080", &ProxyHandler{})
}

3、ProxyHandler类必须实现ServeHTTP方法

//定义代理处理结构体
type ProxyHandler struct {
}

//必须实现的ServeHttp方法
func (*ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	defer func() {
		if err := recover(); err != nil {
			w.WriteHeader(500)
			log.Println(err)
		}
	}()

	//实例化负载均衡
	lb := util.NewLoadBalance()
	//给其添加2个服务
	lb.AddServer(util.NewHttpServer("http://localhost:9091"))
	lb.AddServer(util.NewHttpServer("http://localhost:9092"))
	url,_ := url2.Parse(lb.SelectForRand().Host)
	//go内置的反向代理函数
	proxy := httputil.NewSingleHostReverseProxy(url)
	proxy.ServeHTTP(w, r)

	_, _ = w.Write([]byte("index"))
}

4、下面就是最重要的部分了,创建util目录,创建loadBalance.go文件,代码如下:

package util

import (
	"math/rand"
	"time"
)

//目标server类
type HttpServer struct {
	Host string
}
//初始化HttpServer对象
func NewHttpServer(host string)*HttpServer  {
	return &HttpServer{Host:host}
}

//负载均衡类
type LoadBalance struct {
	Servers []*HttpServer
}

//初始化负载均衡对象
func NewLoadBalance() *LoadBalance {
	return &LoadBalance{Servers: make([]*HttpServer, 0)}
}
//给负载均衡添加服务
func (this *LoadBalance)AddServer(server *HttpServer)  {
	this.Servers = append(this.Servers, server)
}

//随机从负载均衡里选择一个服务
func (this *LoadBalance)SelectForRand() *HttpServer  {
	rand.Seed(time.Now().UnixNano()) //设置随机因子,精确到纳秒
	index := rand.Intn(len(this.Servers))
	return this.Servers[index]
}

5、到这里应该可以看出,我们这里实现“负载均衡”主要是通过反向代理。
我们启动程序,监听负载均衡服务器。

package main

import (
	"loadBalance/util"
	"log"
	"net/http"
	"net/http/httputil"
	url2 "net/url"
)

//定义代理处理结构体
type ProxyHandler struct {
}

//必须实现的ServeHttp方法
func (*ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	defer func() {
		if err := recover(); err != nil {
			w.WriteHeader(500)
			log.Println(err)
		}
	}()

	//实例化负载均衡
	lb := util.NewLoadBalance()
	//给其添加2个服务
	lb.AddServer(util.NewHttpServer("http://localhost:9091"))
	lb.AddServer(util.NewHttpServer("http://localhost:9092"))
	url,_ := url2.Parse(lb.SelectForRand().Host)
	//go内置的反向代理函数
	proxy := httputil.NewSingleHostReverseProxy(url)
	proxy.ServeHTTP(w, r)

	_, _ = w.Write([]byte("index"))
}

func main() {
	_ = http.ListenAndServe(":8080", &ProxyHandler{})
}

在这里插入图片描述
在这里插入图片描述 现在我们访问localhost:8080就会被随机分配到locahost:9091和localhost:9092

负载均衡算法 文章目录一、前言二、概述三、负载均衡算法轮询(Round Robin)法随机(Random)法加权轮询(Weight Round Robin)法加权随机(Weight Random)法最小连接数(Least Connections)法 一、前言         最近在开发聊天室服务器,考虑到服务器的并发性,因此需要支持聊天服务器的集群功能。对服务器需要做负载均衡,查阅了一些资料,在此做下简单总结和笔记。 二、概述  & 阅读详情

相关推荐

负载均衡算法之加权随机算法的简单实现

1、我们在前面写过“随机算法”来实现简单的负载均衡。 https://blog.youkuaiyun.com/github_26672553/article/details/99701928 用过nginx配置负载均衡,可能会写过类似这样的配置: upstream lb { server xxxxxx1 weight=1 server xxxxxx2 weight=2 } 这表示server1和serv...

823

负载均衡--随机算法(Random)

随机算法是指:从服务器列表中,随机选取一台服务器进行访问。由概率论可以得知,随着客户端调用服务端的次数增多,其实际效果趋近于平均分配请求到服务端的每一台服务器,也就是达到轮询的效果。 一、算法描述 假设有 N 台服务器 S = {S0, S1, S2, …, Sn},算法可以描述为: 1、通过随机函数生成 0 到 N 之间的任意整理,将该数字作为索引,从 S 中获取对应的服务器; 假定我们现在有如下四台服务器: 服务器地址 权重 192.168.1.1 1 192.168.1.2

WorldMvp的专栏 2011

负载均衡随机算法的实现 (Java)

希望本文对您有所帮助!在LoadBalancer类中,我们使用一个整数数组weights来保存每个服务器的权重值,然后通过随机数生成器Random来生成一个随机权重值,最后遍历服务器节点列表并根据权重值选择对应的服务器。其中,负载均衡随机算法是一种简单但有效的负载均衡算法,它通过随机选择服务器来均衡负载。在LoadBalancer类中,我们需要维护一个服务器节点列表,以及一个用于保存每个服务器的权重值的数组。首先,我们需要定义一个服务器节点的数据结构,用于保存服务器的相关信息,包括IP地址和端口号等。

2301_79331230的博客 200

初探负载均衡算法【随机、轮询、加权随机、加权轮询、平滑加权轮询】

简介 负载平衡(Load balancing)是一种在多个计算机(网络、CPU、磁盘)之间均匀分配资源,以提高资源利用的技术。使用负载均衡可以最大化服务吞吐量,可能最小化响应时间,同时由于使用负载均衡时,会使用多个服务器节点代单点服务,也提高了服务的可用性。 负载均衡的实现可以软件可以硬件,硬件如大名鼎鼎的 F5 负载均衡设备,软件如 NGINX 中的负载均衡实现,又如 Springcloud Ribbon 组件中的负载均衡实现。本文主要从软件层面来说明其实现算法。 负载均衡算法主要分为以下6大类: 随机

popofzk的博客 4390

负载均衡加权随机算法的实现(Java)

负载均衡是分布式系统中常用的一种技术,用于均衡系统中不同节点的负载压力,提高系统的性能和可靠性。在负载均衡中,加权随机算法是一种常见的选择,它根据节点的权重来决定请求被分发到哪个节点上。当然,这只是其中一种负载均衡算法的实现方式,实际应用中可能会使用更复杂的算法和策略来实现更高效的负载均衡。在上述示例中,我们创建了一个负载均衡器对象,并添加了三个节点,它们的权重分别为3、2和1。首先,我们需要定义一个节点类,用于表示负载均衡系统中的节点。方法来获取一个随机的节点,节点的选择概率将根据节点的权重进行加权。

HackLogic的博客 220

go语言实现加权随机负载均衡算法(附完整源码)

go语言实现加权随机负载均衡算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 217

常见负载均衡算法实现详解

package com.example.producer; import com.example.producer.util.ThreadPoolUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.junit.MockitoJUnitRunner; import java.io.*; import java.util.*; import java.util.c.

Dream_it_possible!的博客 943

python负载均衡的简单实现方法

给大家介绍用python实现最简单的负载均衡方法,即将请求发送到未宕机的服务器上,感兴趣的朋友一起看看吧

负载均衡之带权重的随机负载均衡算法详解与实现

带权随机负载均衡是一个简单而实用的策略,它能根据节点权重调整流量分布,避免“木桶短板效应”。在节点规模较小、权重变化不频繁的场景下,完全够用。如果需要更平滑的分布,可以考虑平滑加权轮询(SWRR)或加权一致性哈希等更高级的算法。

青衫客36的博客 1345

海康工业相机触发模式详解:软触发 vs 外触发,在C#里如何选与用?

本文深入解析海康工业相机的软触发与外触发模式,详细比较两者的特性差异、适用场景及C#实现方法。通过海康SDK配置指南和实战代码示例,帮助开发者掌握工业相机触发模式的选择与优化技巧,提升自动化检测系统的精确性和可靠性。

weixin_42635064的博客 554

基于STM32的智能交通灯管理系统设计

本项目基于STM32微控制器设计了一个智能交通灯管理系统,通过多个传感器模块实现对交通灯的智能化控制。项目涉及硬件电路设计、传感器数据采集和逻辑控制实现,适用于城市交通路口或小区路口。该基于STM32的智能交通灯系统通过超声波传感器实现了流量监测,结合LED和蜂鸣器实现了自动交通信号控制,适用于城市或社区路口。基于STM32CubeMX生成的框架,编写红绿灯切换、流量监测和蜂鸣器控制的代码。以下为主循环,通过不断读取传感器数据,结合交通灯和蜂鸣器模块实现智能交通灯控制。

2401_88410555的博客 2062

Java:实现负载均衡随机法算法(附带源码)

Java:实现负载均衡随机法算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1854

单细胞测序数据读取实战指南:从入门到精通

本文提供了单细胞测序数据读取的实战指南,涵盖从标准10X Genomics格式到通用表达矩阵及RDS文件的读取方法。文章重点解析了数据读取的核心步骤、常见问题解决方案及进阶技巧,旨在帮助用户夯实数据分析基础,确保后续分析流程的准确性。

weixin_29095587的博客 459

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

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

多学、多想、多做 717

CXL3.0 CDAT(Coherent Device Attributes Table)

在说明CDAT之前,先讲一下CXL中的DOE类型:CXL协议里定义了两种DOE的类型,一种是Compliance就是合规性测试的内容,还有一种就是CDAT(一致性属性表)Memory_Info_Valid是CXL设备的内存配置完成标志,位于DVSEC(Designated Vendor-Specific Extended Capability)的CXL Range X Size Low寄存器中(X为1或2)。

Summer的博客 1434

ADS 2024实战:手把手教你搞定2.3-3.5GHz宽带Doherty功放仿真与版图(附源文件)

本文详细解析了在ADS 2024环境中实现2.3-3.5GHz宽带Doherty功放的全流程设计,包括仿真与版图实现。从软件环境搭建、器件模型导入到核心电路设计、匹配网络优化,再到系统集成与版图生成,提供了实战技巧和关键参数设置。特别针对5G通信和卫星应用中的高效率需求,展示了如何通过ADS 2024的新功能提升设计效率。

weixin_42639246的博客 460

负载均衡算法实现(权重随机、平滑轮询、一致性哈希

写在前面 通过客户端实现负载均衡算法(包括随机,轮询,一致性哈希),要求在客户端使用参数指定负载均衡策略和调用次数,调用不同的服务端。 三台服务器,一台客户端 由于只在一台机器上进行实现,三台服务器的不同由端口号来区分 客户端,服务端均采用spring-boot暴露Restful接口 三种负载均衡策略 随机算法 随机算法顾名思义,从一些服务器列表中随机挑选出一个服务器来进行负载操作,强调随机性。 但只是简单随机会有一些问题,如果我们有3台服务器,运算效率差距很大,第一台运算效率100分,第二台50分,第

Jerry1ee 3052

PostgreSQL面试题及详细答案120道(101-120)

本文针对PostgreSQL数据库提供全面的性能优化方案,涵盖10个关键面试题解析。主要内容包括:1)并发参数调优(max_connections、worker_processes);2)缓存设置(effective_cache_size);3)WAL日志优化;4)慢查询监控与日志配置;5)会话管理与阻塞处理;6)高写入场景优化策略;7)存储类型参数调整;8)自动清理机制配置;9)大表DDL操作避坑指南;10)性能瓶颈诊断方法论。对DBA和开发者具有实操指导价值

大剑师兰特的GIS世界 854

Java负载均衡算法实现与原理分析(轮询、随机、哈希、加权、最小连接)

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。既然涉及到多个机器,就涉及到任务如何分发,这就是负载均衡算法问题。轮询即排好队,一个接一个。从可服务的列表中随机取一个提供响应。对当前访问的ip地址做一个hash值,相同的key被路由到同一台机器去。场景常见于分布式集群环境下,用户登录时的请求路由和会话保持。

秃了也弱了 1846

人工智能大模型原理与应用实战:AI模型转换为API的步骤和方法

传统的开发模式下,构建复杂的软件系统是非常费时费力的,而通过云计算、微服务等技术手段可以实现快速部署、弹性扩展的能力。在这种背景下,越来越多的公司将重点转移到研发人员的产品思维上,希望能够将自己的AI模型转换为一个可供他人调用的API接口。但是对于许多从事AI领域的研发人员来说,如何将自己的AI模型转换为API是一个比较棘手的问题。在这篇文章中,作者将从AI模型转换为API的过程分为以下几个步骤:AI模型准备阶段——模型选择、数据准备、模型训练。

AI天才研究院 2598

YOLO11-pose关键点检测:训练实战篇 | 自己数据集从labelme标注到生成yolo格式的关键点数据以及训练教程

教会你如何用自己的数据集转换成对应格式的数据集以及如何训练YOLO11-pose关键点检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 5416

redis实现轮询算法_负载均衡之随机、轮询、一致性哈希

1、什么是负载均衡负载均衡指多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担任务,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接受到的请求的服务器独立地回应客户的请求。负载均衡能够平均分配客户请求到服务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用最少的投资获得接近于大...

weixin_39573136的博客 1422

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

加权随机负载均衡算法golang实现

通过这种方式,加权随机负载均衡算法能够确保高处理能力的服务器承担更多的请求,而低处理能力的服务器则承担较少的请求,从而达到优化资源利用和提高系统整体性能的目的。值得注意的是,加权随机负载均衡算法并不保证绝对的公平性,因为权重较高的服务器可能会连续多次被选中,而权重较低的服务器可能长时间不被选中。加权随机负载均衡算法是一种根据服务器权重分配请求的算法,其核心思想是为每个服务器分配一个权重值,权重值高的服务器被选中的概率更大。接着,它遍历服务器列表,累加每个服务器的权重,直到累加的权重大于或等于生成的随机数。

拙言的专栏 806

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java实现加权随机,负载均衡--加权随机算法(Weight Random)

加权随机法根据服务器的配置和系统的负载,分配不同的权重,按照权重随机请求后端服务器。一、算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn},权重为 W = {W0, W1, W2, …, Wn},权重之和为 weightSum, 服务器列表为 serverList,算法可以描述为:1、初始化 serverList,将 W0 个 S0 加入至serverList,将 W1 ...

weixin_42303627的博客 1511

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【用GO实现一个负载均衡算法------随机算法】

代码】【用GO实现一个负载均衡算法------随机算法】

weixin_52767328的博客 206
上一篇: 设计ini配置文件格式
下一篇: 负载均衡算法之ip_hash简单应用
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值