cluster

package
v0.0.0-...-8b6e091 Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2024 License: BSD-3-Clause Imports: 22 Imported by: 4

Documentation

Index

Constants

View Source
const (
	// BalancerRandom 随机
	BalancerRandom = "random"
	// BalancerRoundRobin 加权轮询
	BalancerRoundRobin = "roundRobin"
	// BalancerIPHash 根据客户端IP地址哈希
	BalancerIPHash = "ipHash"
	// BalancerIDHash 根据客户端ID哈希
	BalancerIDHash = "idHash"
)
View Source
const (
	// NodeOK 正常
	NodeOK NodeState = "ok"
	// NodeLazy 不接受新的请求
	NodeLazy NodeState = "lazy"
	// NodeDown 下线,不接受任何请求
	NodeDown NodeState = "down"

	// AutoAllocate 自动分配,第一次请求时,如果还没有分配,会根据负载均衡策略自动选择一个可用节点
	AutoAllocate = "auto"
	// ServerAllocate 服务端分配,只有服务器端分配好节点之后,客户端才能够访问
	ServerAllocate = "server"
	// ClientAllocate 客户端分配,客户端请求时附带的nodeID会被记录下来,后续即使不指定nodeID,也会被分配到同一个节点
	ClientAllocate = "client"
)

Variables

View Source
var (
	// ErrNodeNotFoundOrDown 没有可用节点或节点已下线
	ErrNodeNotFoundOrDown = errors.New("node not found or down")
	// ErrNoNodeAvailable 没有可用节点
	ErrNoNodeAvailable = errors.New("no node available")
)

Functions

func RegisterBalancer

func RegisterBalancer(policy string, factory BalancerFactory)

RegisterBalancer 注册负载均衡器

func WithGRPCDialOptions

func WithGRPCDialOptions(options ...grpc.DialOption) func(*Registry)

WithGRPCDialOptions 设置grpc.DialOption

func WithKeyPrefix

func WithKeyPrefix(prefix string) func(*Registry)

WithKeyPrefix 设置服务条目key前缀

Types

type Balancer

type Balancer interface {
	Pick(sess Session) (NodeEntry, error)
}

Balancer 负载均衡器

func NewBalancer

func NewBalancer(serviceCode int32, nodes []NodeEntry) Balancer

NewBalancer 创建负载均衡器

type BalancerFactory

type BalancerFactory func(serviceCode int32, nodes []NodeEntry) Balancer

BalancerFactory 负载均衡器工厂

type GRPCEntry

type GRPCEntry struct {
	// 监听地址 host:port
	Endpoint string `json:"endpoint"`

	// grpc服务列表
	Services []GRPCServiceDesc `json:"services"`
}

GRPCEntry gRPC服务发现条目

func (GRPCEntry) Validate

func (e GRPCEntry) Validate() error

Validate 验证条目是否合法

type GRPCServiceDesc

type GRPCServiceDesc struct {
	// 服务代码枚举值,每个服务的代码值必须唯一
	//
	// 网关会根据客户端请求消息内的service_code字段,将请求转发到对应的服务
	Code int32 `json:"code"`

	// 服务路径,网关在构造grpc请求时,用于方法地址构造
	//
	// example: /helloworld.Greeter
	Path string `json:"path"`

	// 是否允许客户端访问
	Public bool `json:"public,omitempty"`

	// 负载均衡策略
	Balancer string `json:"balancer"`

	// Weight 节点权重,用于负载均衡
	Weight int `json:"weight,omitempty"`

	// Stateful 是否有状态服务
	Stateful bool `json:"stateful,omitempty"`

	// Allocation 有状态节点分配方式
	Allocation string `json:"allocation,omitempty"`

	// Pipeline 声明管道名称的服务,请求会严格按照时序性顺序处理,没有声明管道的请求会被并发处理
	//
	// 多个服务可以声明同一个管道名称,这样请求会被分配到同一个管道中
	Pipeline string `json:"pipeline,omitempty"`
}

GRPCServiceDesc gRPC服务

func (GRPCServiceDesc) Validate

func (desc GRPCServiceDesc) Validate() error

Validate 验证条目是否合法

type NodeEntry

type NodeEntry struct {
	// 节点ID,集群内唯一
	ID ulid.ULID `json:"id"`

	// 节点名称,仅用于显示
	Name string `json:"name"`

	// 节点状态
	State NodeState `json:"state"`

	// 网关入口URL
	//
	// Example:
	//	 - tcp://0.0.0.0:8222
	//	 - ws://0.0.0.0:8222/grpc
	Entrance string `json:"entrance,omitempty"`

	// grpc服务信息
	GRPC GRPCEntry `json:"grpc"`

	// git版本
	GitVersion string `json:"git_version,omitempty"`
}

NodeEntry 节点服务发现条目

func (NodeEntry) Validate

func (e NodeEntry) Validate() error

Validate 验证条目是否合法

type NodeState

type NodeState string

NodeState 节点状态

type Registry

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

Registry 服务注册表

func NewRegistry

func NewRegistry(client *clientv3.Client, opt ...func(*Registry)) (*Registry, error)

NewRegistry 创建服务注册表

func (*Registry) AllocGRPCNode

func (r *Registry) AllocGRPCNode(serviceCode int32, sess Session) (nodeID ulid.ULID, err error)

AllocGRPCNode 根据负载均衡策略给客户端会话分配可用节点

func (*Registry) Close

func (r *Registry) Close()

Close 关闭

func (*Registry) ForeachNodes

func (r *Registry) ForeachNodes(f func(NodeEntry) bool)

ForeachNodes 遍历所有节点

如果f返回false,则停止遍历

func (*Registry) GetGRPCConn

func (r *Registry) GetGRPCConn(nodeID ulid.ULID) (conn *grpc.ClientConn, err error)

GetGRPCConn 获取指定节点的grpc连接

func (*Registry) GetGRPCDesc

func (r *Registry) GetGRPCDesc(serviceCode int32) (GRPCServiceDesc, bool)

GetGRPCDesc 获取grpc服务描述

func (*Registry) GetGatewayClient

func (r *Registry) GetGatewayClient(nodeID ulid.ULID) (nh.GatewayClient, error)

GetGatewayClient 获取网关grpc服务客户端

func (*Registry) GetNodeClient

func (r *Registry) GetNodeClient(nodeID ulid.ULID) (nh.NodeClient, error)

GetNodeClient 获取节点grpc服务客户端

func (*Registry) PickGRPCNode

func (r *Registry) PickGRPCNode(serviceCode int32) (nodeID ulid.ULID, err error)

PickGRPCNode 随机选择一个可用节点

func (*Registry) Put

func (r *Registry) Put(entry NodeEntry) error

Put 注册服务

func (*Registry) SubscribeDelete

func (r *Registry) SubscribeDelete(handler func(entry NodeEntry))

SubscribeDelete 订阅节点删除

func (*Registry) SubscribeUpdate

func (r *Registry) SubscribeUpdate(handler func(entry NodeEntry))

SubscribeUpdate 订阅节点更新

type Session

type Session interface {
	ID() string
	RemoteAddr() string
}

Session 会话

Jump to

Keyboard shortcuts

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