cluster Package
cluster包提供了集群管理功能,包括分组路由、故障转移和服务选择。
failover 子包
failover子包实现了故障转移功能:
// DefaultFailoverHandler 默认故障转移处理器
type DefaultFailoverHandler struct {
detector Detector
circuitBreaker CircuitBreaker
retryPolicy RetryPolicy
recovery RecoveryStrategy
monitor InstanceMonitor
}
// NewFailoverHandler 创建故障转移处理器
func NewFailoverHandler(config *Config) (*DefaultFailoverHandler, error)
// Execute 执行带故障转移的调用
func (h *DefaultFailoverHandler) Execute(ctx context.Context, instances []*naming.Instance, operation func(context.Context, *naming.Instance) error) (*FailoverResult, error)
故障检测:
type Detector interface {
// Detect 检测实例是否健康
Detect(ctx context.Context, instance *naming.Instance) (Status, error)
// MarkFailed 标记实例为失败状态
MarkFailed(ctx context.Context, instance *naming.Instance) error
// MarkSuccess 标记实例为成功状态
MarkSuccess(ctx context.Context, instance *naming.Instance) error
}
熔断器:
type CircuitBreaker interface {
// Allow 判断请求是否允许通过
Allow(ctx context.Context, instance *naming.Instance) (bool, error)
// MarkSuccess 标记成功调用
MarkSuccess(ctx context.Context, instance *naming.Instance) error
// MarkFailure 标记失败调用
MarkFailure(ctx context.Context, instance *naming.Instance, err error) error
// GetState 获取熔断器状态
GetState(instance *naming.Instance) (State, error)
// Reset 重置熔断器状态
Reset(instance *naming.Instance) error
}
重试策略:
type RetryPolicy interface {
// ShouldRetry 决定是否需要重试
ShouldRetry(ctx context.Context, attempt int, err error) bool
// NextBackoff 计算下一次重试的等待时间
NextBackoff(attempt int) time.Duration
// MaxAttempts 返回最大重试次数
MaxAttempts() int
}
selector 子包
selector子包实现了服务选择功能:
// Selector 定义了选择器接口
type Selector interface {
// Select 从服务实例列表中选择符合条件的实例
Select(ctx context.Context, instances []*naming.Instance) ([]*naming.Instance, error)
// Name 返回选择器名称
Name() string
}
选择器链:
// Chain 选择器链,支持多个选择器串联
type Chain struct {
selectors []Selector
name string
}
// NewChain 创建新的选择器链
func NewChain(name string, selectors ...Selector) *Chain
// Select 按顺序执行选择器链中的所有选择器
func (c *Chain) Select(ctx context.Context, instances []*naming.Instance) ([]*naming.Instance, error)
group 子包
group子包实现了服务分组功能:
// Group 表示一个服务分组的接口
type Group interface {
// Name 返回分组名称
Name() string
// Match 检查实例是否匹配该分组
Match(instance *naming.Instance) bool
// Select 从实例列表中选择匹配该分组的实例
Select(ctx context.Context, instances []*naming.Instance) ([]*naming.Instance, error)
}
// NewGroup 创建新的分组
func NewGroup(name string, opts ...Option) (*DefaultGroup, error)
分组路由:
// GroupRouter 分组路由接口
type GroupRouter interface {
// Route 根据上下文路由到指定分组
Route(ctx context.Context, instances []*naming.Instance) ([]*naming.Instance, error)
}
// NewRouter 创建新的路由器
func NewRouter(manager GroupManager) *DefaultRouter
// NewRouterChain 创建新的路由链
func NewRouterChain(routers ...GroupRouter) *RouterChain