Go微服务网关

ReverseProxy 源码分析

在这里插入图片描述

拓展ReverseProxy功能

四种负载均衡
  1. 随机负载均衡:随机挑选目标服务器的IP

    random.go

    packeage load_balance
    
    // 随机负载均衡
    type RandomBalance struct {
         
    	curIndex int
    	rss      []string //目标服务器的数组
    	//conf     LoadBalanceConf //观察主体,用于服务发现
    }
    
    func (r *RandomBalance) Add(params ...string) error {
         
    	if len(params) == 0 {
         
    		return errors.New("param len 1 at least")
    	}
    	addr := params[0]
    	r.rss = append(r.rss, addr)
    	return nil
    }
    func (r *RandomBalance) Next() string {
         
    	if len(r.rss) == 0 {
         
    		return ""
    	}
    	r.curIndex = rand.Intn(len(r.rss))
    	return r.rss[r.curIndex]
    }
    
    

    random_test.go

    
    func TestRandomBalance(t *testing.T) {
         
    	rb := &RandomBalance{
         }
    	rb.Add("127.0.0.1:2003")
    	rb.Add("127.0.0.1:2004")
    	rb.Add("127.0.0.1:2005")
    	rb.Add("127.0.0.1:2006")
    	fmt.Println(rb.Next())
    	fmt.Println(rb.Next())
    	fmt.Println(rb.Next())
    	fmt.Println(rb.Next())
    }
    
    //-----------结果------------
    === RUN   TestRandomBalance
    127.0.0.1:2004
    127.0.0.1:2006
    127.0.0.1:2006
    127.0.0.1:2006
    --- PASS: TestRandomBalance (0.00s)
    PASS
    
    
  2. 轮询负载均衡:ABC 三台服务器,ABCABC依次轮询

    round_robin.go

packeage load_balance
//round_robin  轮询负载均衡
type RoundRobin struct {
   
	curIndex int
	rss      []string //目标服务器的数组
}

func (r *RoundRobin) Add(params ...string) error {
   
	if len(params) == 0 {
   
		return errors.New("params len 1 at least")
	}
	addr := params[0]
	r.rss = append(r.rss, addr)
	return nil
}

// Next 获取下一个元素
func (r *RoundRobin) Next() string {
   
	if len(r.rss) == 0 {
   
		return ""
	}
	lens := len(r.rss) // 目标服务器的总数
	if r.curIndex >= lens {
   
		r.curIndex = 0
	}
	curAddr := r
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值