go-micro关键点
容错
心跳
心跳是在服务发现中刷新注册的机制
设置服务的ttl存活时间和重新注册时间,用于容错,自动移除不可用的注册服务 micro –register_ttl=30 –register_interval=15 api
或者
service := micro.NewService( micro.Name(“com.example.srv.foo”), micro.RegisterTTL(time.Second30), micro.RegisterInterval(time.Second15), )
负载平衡
负载平衡是一种分散请求负载或保持高可用性的方法
通过 selector 来实现轮训,哈希,随机(默认)三种负载均衡,向服务注册中心查询选出当前请求的可用服务节点
重试
重试是在请求失败时重试请求的一种方法
重试机制在客户端,通过 selector 实现了在请求某个服务节点失败后,会继续根据next策略来选择新的服务节点请求,直到超出一定的次数。
micro --client_retries=3
或者
client.Init(
client.Retries(3),
)
缓存服务注册发现
服务注册发现缓存是客户端方面的缓存
每次请求都去查询服务注册中心服务节点的地址,高并发时将会造成瓶颈,严重影响性能
客户端缓存是一种消除服务发现瓶颈和单点故障的方法。通过 selector 维护服务发现信息的内存缓存。如果缓存未命中,选择器将使用服务注册表进行查找并缓存数据。缓存也会定期被清除,以确保过时的数据不会继续存在。
micro --selector=cache api
或者
service.Client().Init(
cache.NewSelector()
)
附带
各组件的类型选择
DefaultBrokers
DefaultBrokers = map[string]func(...broker.Option)
broker.Broker{
"http": http.NewBroker,
"memory": memory.NewBroker,
"nats": nats.NewBroker,
}
DefaultClients
DefaultClients = map[string]func(...client.Option)
client.Client{
"rpc": client.NewClient,
"mucp": cmucp.NewClient,
"grpc": cgrpc.NewClient,
}
DefaultRegistries
DefaultRegistries = map[string]func(...registry.Option)
registry.Registry{
"go.micro.registry": regSrv.NewRegistry,
"service": regSrv.NewRegistry,
"consul": consul.NewRegistry,
"gossip": gossip.NewRegistry,
"mdns": mdns.NewRegistry,
"memory": rmem.NewRegistry,
}
DefaultSelectors
DefaultSelectors = map[string]func(...selector.Option)
selector.Selector{
"default": selector.NewSelector,
"dns": dns.NewSelector,
"cache": selector.NewSelector,
"router": router.NewSelector,
"static": static.NewSelector,
}
DefaultServers
DefaultServers = map[string]func(...server.Option)
server.Server{
"rpc": server.NewServer,
"mucp": smucp.NewServer,
"grpc": sgrpc.NewServer,
}
DefaultTransports
DefaultTransports = map[string]func(...transport.Option)
transport.Transport{
"memory": tmem.NewTransport,
"http": thttp.NewTransport,
"grpc": tgrpc.NewTransport,
"quic": quic.NewTransport,
}
组件默认值
- defaultClient = “rpc”
- defaultServer = “rpc”
- defaultBroker = “http”
- defaultRegistry = “mdns”
- defaultSelector = “registry”
- defaultTransport = “http”