即一个客户端对应多个服务端
一般在大型的微服务系统中,会为同一个服务部署到多个节点, 以便服务能够支持大并发的访问。可能部署在同一个数据中心的多个节点,或者多个数据中心。
那么,在rpcx来完成service调用时,该如何将求请求交给对应的服务节点来完成,在rpcx中通过 Selector来实现路由选择, 很像一个负载均衡器,来选择出一个合适的节点。
在rpcx提供了多个路由策略算法,可以在创建XClient来指定。
注意,在Rpcx的路由是针对 ServicePath 和 ServiceMethod的路由。
rpcx提供多种路由供选择:
- [Random]随机策略: 从指定的服务节点集合中随机选择一个节点。
- [Roundrobin] 轮训策略
- [WeightedRoundRobin] 平滑加权轮训策略:使用Nginx采用的[平滑加权的轮询算法]
- [网络质量优先]
- [一致性哈希]
- [地理位置优先]
- 自定义路由策略
前六种都可以直接使用,下面自定义路由策略供参考
服务端
一个服务端起两个及以上的rpc服务,或者是多个微服务
package main
import (
"flag"
"github.com/smallnest/rpcx/server"
"github.com/rpcx-ecosystem/rpcx-examples3"
"context"
"fmt"
)
var (
addr = flag.String("addr", "localhost:8972", "server address")
addr = flag.String("addr", "localhost:8973", "server address")
)
func main() {
flag.Parse()
go createServer(*addr1)
go createServer(*addr2)
select {
}
}
func createServer(addr string) {
s := server.NewServer()
s.