wrr

package
v0.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 2, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package wrr provides weighted round-robin load balancing selector. The selector picks instances based on their weight values in metadata. Supported weight values in metadata["weight"]: 100, 80, 50, 20, 10, default 1. When the instance count exceeds wrrP2CFallbackThreshold (100), it automatically falls back to P2C to avoid O(n) per-selection overhead becoming a CPU hotspot.

加权轮询负载均衡选择器包,提供基于权重的轮询选择算法。 选择器根据实例 metadata 中的权重值进行选择。 支持的 metadata["weight"] 权重值:100, 80, 50, 20, 10,默认为 1。 当实例数量超过 wrrP2CFallbackThreshold (100) 时,自动降级到 P2C, 避免 O(n) 的每次选择开销成为 CPU 热点。

Eg:

// 注册 Provider
app.Register(wrr.NewProvider())

// 使用选择器
selector := c.MustMake(discoverycontract.SelectorKey).(discoverycontract.Selector)
instance, doneFunc, _ := selector.Select(ctx, instances)

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Provider

type Provider struct{}

Provider registers the WRR selector contract.

Provider 注册加权轮询选择器契约。

func NewProvider

func NewProvider() *Provider

NewProvider creates a new WRR selector provider instance.

NewProvider 创建新的加权轮询选择器 Provider 实例。

func (*Provider) Boot

Boot is a no-op for WRR selector provider.

Boot 加权轮询选择器 Provider 无启动逻辑。

func (*Provider) DependsOn

func (p *Provider) DependsOn() []string

DependsOn returns the keys this provider depends on. WRR selector has no dependencies.

DependsOn 返回该 provider 依赖的 key。 WRR selector 无依赖。

func (*Provider) IsDefer

func (p *Provider) IsDefer() bool

IsDefer returns true, selector can be deferred until first use.

IsDefer 返回 true,选择器可延迟初始化直到首次使用。

func (*Provider) Name

func (p *Provider) Name() string

Name returns the provider name "selector.wrr".

Name 返回 Provider 名称 "selector.wrr"。

func (*Provider) Provides

func (p *Provider) Provides() []string

Provides returns the selector contract keys.

Provides 返回选择器契约键列表。

func (*Provider) Register

func (p *Provider) Register(c runtimecontract.Container) error

Register binds the WRR selector factory to the container.

Register 将加权轮询选择器工厂绑定到容器。

type WRRSelector

type WRRSelector struct {
	// contains filtered or unexported fields
}

WRRSelector implements discoverycontract.Selector with weighted round-robin algorithm. When the instance count exceeds wrrP2CFallbackThreshold, it falls back to P2C to avoid the O(n) per-selection overhead becoming a CPU hotspot.

WRRSelector 使用加权轮询算法实现 discoverycontract.Selector 接口。 当实例数量超过 wrrP2CFallbackThreshold 时,自动降级到 P2C, 避免 O(n) 的每次选择开销成为 CPU 热点。

func NewWRRSelector

func NewWRRSelector() *WRRSelector

NewWRRSelector creates a new WRR selector instance.

NewWRRSelector 创建新的加权轮询选择器实例。

func (*WRRSelector) Select

Select picks an instance using weighted round-robin algorithm. Core logic: Calculate weights, add to current, pick max, subtract total. Falls back to P2C when instance count exceeds wrrP2CFallbackThreshold.

Select 使用加权轮询算法选择实例。 核心逻辑:计算权重、累加到当前权重、选择最大值、减去总权重。 实例数量超过 wrrP2CFallbackThreshold 时自动降级到 P2C。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL