注册中心

注册中心三层模型对齐 K8s Endpoints + Istio ServiceEntry:

概念说明
Instance实例(一个进程的一个端口),含 Id/Name/Cluster/Protocol/Ip/Port/Metadata/Labels
Cluster集群(同名+同 cluster 的实例集合,按 cluster 路由的候选池)
ServiceEntry逻辑服务(同名实例的集合)

注册/反注册最小单位是 *types.Instance。多协议应用注册多条 Instance(每条带 Protocol 字段,如 http/grpc)。

内置实现

1import "github.com/go-zeus/zeus/registry/memory"
2
3reg := memory.New()

registry/memory 是进程内实现,零依赖,主要用于单进程 demo 和单测 mock。

plugins 实现

1import _ "github.com/go-zeus/zeus/plugins/registry/etcd"

通过 import _ 副作用注册 etcd:// scheme。

URL scheme 切换

L2 用户通过 URL 字符串切换实现:

Scheme实现
memory://registry/memory
etcd://plugins/registry/etcd
nacos://plugins/registry/nacos
1app.Run(&app.Config{
2    Registry: "etcd://127.0.0.1:2379?name=my-service",
3}, handler)

核心 API

接口职责
RegistrarRegister(ctx, *Instance) / Deregister(ctx, *Instance)
DiscoveryGetService(ctx, name) / Watch(ctx, name) <-chan Event
WatcherNext() (Event, error) / Stop()

多协议注册

一个 App 持有多个 Server(HTTP + gRPC 同进程)时,每个 Server 对应一个 Instance:

1components.NewServiceComponent(
2    components.WithServiceName("my-app"),
3    components.WithServiceCluster("canary"),
4)
5// ServiceComponent 在 OnStart 时遍历所有 Instance 调用 Registrar.Register