您的位置 首页 golang

Golang RPCX 非常值得关注的rpc 框架

RPC x是Go语言实现的一个分布式的、多插件的、带有服务治理功能的产品级的RPC框架。类似 Alibaba Dubbo 和 Weibo Motan,但性能远远高于 Dubbo、Motan、Thrift等框架,是非常值得关注的一款产品。

RPCX的特点

基于 net /rpc,可以将net/rpc实现的RPC项目轻松的转换为分布式的RPC

插件式设计,可以配置所需的插件,比如服务发现、日志、统计分析等

基于TCP长连接,只需很小的额外的消息头

支持多种编解码协议,如Gob、 Json 、MessagePack、gencode、ProtoBuf等

服务发现:服务发布、订阅、通知等,支持多种发现方式如 ZooKeeper 、Etcd等

高可用策略:失败重试(Failover)、快速失败(Failfast)

负载均衡:支持随机请求、 轮询 、低并发优先、一致性 Hash等

规模可扩展,可以根据性能的需求增减服务器

其他:调用统计、访问日志等

RPCX架构

rpcx中有服务提供者 RPC server ,服务调用者 RPC Client 和服务注册中心 registry 三个角色。

Server 向 Registry 注册服务,并向注册中心发送心跳汇报状态(基于不同的registry有不同的实现)。

Client 需要向注册中心查询 RPC 服务者列表,Client 根据 Registry 返回的服务者列表,选取其中一个 Sever 进行 RPC 调用。

RPCX 架构

官网地址

server示例:

package main

import “github.com/smallnest/rpcx”

type Args struct {

A int ` msg :”a”`

B int `msg:”b”`

}

type Reply struct {

C int `msg:”c”`

}

type Arith int

func (t *Arith) Mul(args *Args, reply *Reply) error {

reply.C = args.A * args.B

return nil

}

func (t *Arith) Error(args *Args, reply *Reply) error {

panic(“ERROR”)

}

func main() {

server := rpcx.NewServer()

server.RegisterName(“Arith”, new(Arith))

server.Serve(“tcp”, “127.0.0.1:8972”)

}

client 示例:

package main

import (

“fmt”

“time”

“github.com/smallnest/rpcx”

)

type Args struct {

A int `msg:”a”`

B int `msg:”b”`

}

type Reply struct {

C int `msg:”c”`

}

func main() {

s := &rpcx.DirectClientSelector{Network: “tcp”, Address: “127.0.0.1:8972”, Timeout: 10 * time.Second}

client := rpcx.NewClient(s)

args := &Args{7, 8}

var reply Reply

err := client.Call(“Arith.Mul”, args, &reply)

if err != nil {

fmt.Printf(“error for Arith: %d*%d, %v \n”, args.A, args.B, err)

} else {

fmt.Printf(“Arith: %d*%d=%d \n”, args.A, args.B, reply.C)

}

client.Close()

}

小结: RPCX 简单易用 、超快 、高效 、功能强大;其中服务治理支持 Failover、 Failfast、 Failtry、Backup等失败模式,支持 随机、轮询、权重、网络质量, 一致性哈希 ;源代码非常值得一读。

更多内容请关注每日编程,每天进步一点。

文章来源:智云一二三科技

文章标题:Golang RPCX 非常值得关注的rpc 框架

文章地址:https://www.zhihuclub.com/97113.shtml

关于作者: 智云科技

热门文章

网站地图