返回顶部
首页 > 资讯 > 后端开发 > GO >Golang 实现简单随机负载均衡
  • 323
分享到

Golang 实现简单随机负载均衡

2024-04-02 19:04:59 323人浏览 独家记忆
摘要

目录负载均衡简介随机负载均衡测试 随机负载均衡负载均衡简介 从设备角度实现负载均衡: 硬件负载均衡: 由专门的 负载均衡器 服务提供商,在你的服务器和外部网络之间架设 服务商的 负载

负载均衡简介

从设备角度实现负载均衡:

硬件负载均衡:

由专门的 负载均衡器 服务提供商,在你的服务器和外部网络之间架设 服务商的 负载均衡器。服务商提供设备和方案帮你处理流量的均衡,不过因为比较费钱包国内没什么人用

软件负载均衡:

包括家喻户晓的Nginx,LVS,Tengine(阿里版Nginx)。优点就是成本比较低,但需要运维去配置、维护。会踩坑,但国内都在用基本上网找就有解决方案。

随机负载均衡

无论是Nginx,LVS 均衡负载的核心在于 网络 io 复用,负载均衡算法。其中均衡算法又分为 随机,轮询,加权轮询,哈希,而随机负载均衡算法就是本文的重点。

随机负载均衡:意味没有规律,随机在服务器队列中获得一台服务器处理请求。其代码实现如下:


package main

import (
	"fmt"
	"math/rand"
)

// 接口定义
type LoadBalance interface {
	//选择一个后端Server
	//参数remove是需要排除选择的后端Server
	Next(remove []string) *Server
	//更新可用Server列表
	UpdateServers(servers []*Server)
}

// 后端Server定义
type Server struct {
	//主机地址
	Host string
	//主机名
	Name string
	Id int
	//主机是否在线
	Online bool
}

type LoadBalanceRandom struct{
	servers []*Server
}

// 实例化 随机均衡负载
func NewLoadBalanceRandom(servers []*Server) *LoadBalanceRandom{
	newBalance := &LoadBalanceRandom{}
	newBalance.UpdateServers(servers)
	return newBalance
}

//选择一个后端Server
func (r *LoadBalanceRandom) Next() *Server {
	if len(r.servers) == 0 {
		return nil
	}

	curIndex := rand.Intn(len(r.servers))
	return r.servers[curIndex]
}

func (r *LoadBalanceRandom) Get(key string) (*Server, error) {
	return r.Next(), nil
}

//系统运行过程中,后端可用Server会更新
func (this *LoadBalanceRandom) UpdateServers(servers []*Server) {
	newServers:=make([]*Server,0)
	for _,e:=range servers {
		if e.Online==true {
			newServers=append(newServers,e)
		}
	}
	this.servers=newServers
}

测试 随机负载均衡


func main() {
	count:=make([]int,4)
	servers:=make([]*Server,0)
	servers=append(servers,&Server{Host:"1",Id:0,Online:true})
	servers=append(servers,&Server{Host:"2",Id:1,Online:true})
	servers=append(servers,&Server{Host:"3",Id:2,Online:true})
	servers=append(servers,&Server{Host:"4",Id:3,Online:true})
	lb:=NewLoadBalanceRandom(servers)

	// 创建4个Server,随机选择100000次。查看4台机器 被选中次数
	for i:=0;i<100000;i++{
		c:=lb.Next()
		count[c.Id]++
	}
	fmt.Println(count)
}

输出

// 4 个服务器选择的次数都是相对平均 [25058 24947 25105 24890]

到此这篇关于golang 实现简单随机负载均衡 的文章就介绍到这了,更多相关Golang 随机负载均衡内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Golang 实现简单随机负载均衡

本文链接: https://lsjlt.com/news/128369.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Golang 实现简单随机负载均衡
    目录负载均衡简介随机负载均衡测试 随机负载均衡负载均衡简介 从设备角度实现负载均衡: 硬件负载均衡: 由专门的 负载均衡器 服务提供商,在你的服务器和外部网络之间架设 服务商的 负载...
    99+
    2024-04-02
  • golang 实现一个负载均衡案例(随机,轮训)
    今天用go实现一个简单的负载均衡的算法,虽然简单,还是要写一下。 1.首先就是服务器的信息 package balance type Instance struct { ...
    99+
    2024-04-02
  • Golang实现四种负载均衡的算法(随机,轮询等)
    随机负载 随机挑选目标服务器 package load_balance import ( "errors" "math/rand" ) //随机负载均衡 type Ran...
    99+
    2024-04-02
  • 怎么在golang中实现负载均衡
    本篇文章为大家展示了怎么在golang中实现负载均衡,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部...
    99+
    2023-06-14
  • Golang加权轮询负载均衡的实现
    目录实现加权轮询负载均衡思路加权轮询负载均衡代码测试代码实现加权轮询负载均衡思路 代码实现一个加权负载均衡 Weight    &...
    99+
    2024-04-02
  • 负载均衡如何实现
    负载均衡是通过将网络请求分发到多个服务器上,以实现对服务器资源的均衡利用,提高系统的性能和可用性。实现负载均衡可以采用以下几种方法:...
    99+
    2023-09-02
    负载均衡
  • 在 Linux 上用 DNS 实现简单的负载均衡的方法
    DNS 轮询将多个服务器映射到同一个主机名,并没有为这里展示的魔法做更多的工作。 如果你的后端服务器是由多台服务器构成的,比如集群化或者镜像的 Web 或者文件服务器,通过负载均衡器提供了单一的入口点。业务繁忙的大型电商...
    99+
    2022-06-04
    Linux DNS 负载均衡
  • cdn负载均衡怎么实现
    cdn负载均衡的实现过程:采用专业负载均衡设备,当用户访问yisu.com时,首先要进行DNS解析,查出yisu.comd的IP地址,然后用户与该IP地址建立TCP连接访问网站内容,DNS流量分配方式工作在DNS解析过程中,通过在域yisu...
    99+
    2024-04-02
  • 负载均衡的实现方法
    这篇文章主要讲解了“负载均衡的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“负载均衡的实现方法”吧!    客户端发送多个请求到服务器,服务器...
    99+
    2023-06-20
  • ngnix如何实现负载均衡
    nginx可以通过多种方式实现负载均衡,以下是两种常见的方式:1. 基于IP Hash的负载均衡:nginx根据客户端的IP地址将请...
    99+
    2023-09-07
    ngnix 负载均衡
  • nginx如何实现负载均衡
    Nginx可以通过以下几种方式实现负载均衡:1. 轮询(Round Robin):Nginx默认使用轮询算法,将请求依次分配给不同的...
    99+
    2023-09-02
    nginx 负载均衡
  • springcloud负载均衡怎么实现
    Spring Cloud提供了多种方式来实现负载均衡,常用的有以下几种方式:1. Ribbon:Ribbon是Spring Clou...
    99+
    2023-09-02
    springcloud 负载均衡
  • nginx怎么实现负载均衡
    要实现负载均衡,可以通过Nginx的反向代理和负载均衡模块来完成。以下是一种常见的配置方法:1. 安装Nginx:首先需要安装Ngi...
    99+
    2023-09-02
    nginx 负载均衡
  • Nginx怎样实现负载均衡
    这篇文章主要为大家展示了“Nginx怎样实现负载均衡”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Nginx怎样实现负载均衡”这篇文章吧。一、Nginx介绍Nginx是一款高性能的Http和反向...
    99+
    2023-06-29
  • nacos负载均衡如何实现
    Nacos提供了两种方式来实现负载均衡:客户端负载均衡和服务端负载均衡。1. 客户端负载均衡:在客户端进行负载均衡,客户端会通过Na...
    99+
    2023-09-04
    nacos
  • mac负载均衡怎么实现
    在mac上实现负载均衡可以通过以下几种方式:1. 使用NAT(Network Address Translation)路由器:将多个...
    99+
    2023-09-01
    负载均衡
  • redis如何实现负载均衡
    要实现Redis的负载均衡,可以采取以下几种方式:1. 客户端分片:将数据按照一定的规则分散存储在多个Redis实例中,客户端在访问...
    99+
    2023-09-07
    redis 负载均衡
  • socket怎么实现负载均衡
    Socket负载均衡是通过将网络流量分发到多个服务器来实现的。以下是一种基于Socket的负载均衡实现方法:1. 设置一个负载均衡器...
    99+
    2023-09-07
    负载均衡 socket
  • apache怎么实现负载均衡
    要实现负载均衡,可以使用Apache的代理模块mod_proxy和mod_proxy_balancer。以下是一个简单的步骤:1. ...
    99+
    2023-09-07
    负载均衡 apache
  • dubbo负载均衡怎么实现
    Dubbo负载均衡可以通过以下方式实现:1. 随机负载均衡(Random Load Balance):每次从可用的服务提供者中随机选...
    99+
    2023-10-20
    dubbo
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作