go

go-micro

go-micro关键点

Posted by Liangjf on December 31, 2019

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”