// Package implement ... // // Description : implement ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2025-05-23 23:24 package implement import ( "git.zhangdeman.cn/gateway/balance/abstract" "git.zhangdeman.cn/gateway/balance/define" "git.zhangdeman.cn/zhangdeman/exception" ) func NewWeightRoundRobin() abstract.IBalance { return &WeightRoundRobin{} } // WeightRoundRobin 加权轮询选择机器 type WeightRoundRobin struct { } func (w *WeightRoundRobin) Get(nodeList []*define.SeverNode) (*define.SeverNode, exception.IException) { totalWeight := int64(0) var selectedNode *define.SeverNode // 计算总权重 for _, node := range nodeList { node.CurrentWeight = node.CurrentWeight + node.EffectiveWeight // 每个节点的当前权重 totalWeight += node.EffectiveWeight // 总权重是有效权重的累加. 配置的权重只是初始权重 if nil == selectedNode { selectedNode = node } else { if node.CurrentWeight > selectedNode.CurrentWeight { selectedNode = node } } } // 当前选中节点权重重置 selectedNode.CurrentWeight = selectedNode.CurrentWeight - totalWeight return selectedNode, nil }