p2c

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: 7 Imported by: 0

Documentation

Overview

Package p2c provides Power of Two Choices load balancing selector. The P2C algorithm picks two random instances and selects the one with lower load. Load calculation considers: pending requests, failure rate, latency EWMA. Eg:

P2C(二选一)负载均衡选择器包,提供基于负载感知的选择算法。 P2C 算法随机选择两个实例,然后选择负载较低的那个。 负载计算考虑:待处理请求、失败率、延迟 EWMA。 Eg:

// 注册 Provider
app.Register(p2c.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 InstanceStats

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

InstanceStats tracks load metrics for a single instance.

InstanceStats 跟踪单个实例的负载指标。

type P2CSelector

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

P2CSelector implements discoverycontract.Selector with Power of Two Choices algorithm.

P2CSelector 使用 P2C 算法实现 discoverycontract.Selector 接口。

func NewP2CSelector

func NewP2CSelector() *P2CSelector

NewP2CSelector creates a new P2C selector instance.

NewP2CSelector 创建新的 P2C 选择器实例。

func (*P2CSelector) Select

Select picks an instance using P2C algorithm with load awareness. Core logic: Pick two random instances, compare their scores, pick lower load.

Select 使用 P2C 算法选择实例,考虑负载感知。 核心逻辑:随机选择两个实例,比较它们的分数,选择负载较低的那个。

type Provider

type Provider struct{}

Provider registers the P2C selector contract.

Provider 注册 P2C 选择器契约。

func NewProvider

func NewProvider() *Provider

NewProvider creates a new P2C selector provider instance.

NewProvider 创建新的 P2C 选择器 Provider 实例。

func (*Provider) Boot

Boot is a no-op for P2C selector provider.

Boot P2C 选择器 Provider 无启动逻辑。

func (*Provider) DependsOn

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

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

DependsOn 返回该 provider 依赖的 key。 P2C 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.p2c".

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

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 P2C selector factory to the container.

Register 将 P2C 选择器工厂绑定到容器。

Jump to

Keyboard shortcuts

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