Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

2022-10-12 0 1,002
资源编号 45265 最近更新 2022-10-12
¥ 0人民币 升级VIP
立即下载 注意事项
下载不了?请联系网站客服提交链接错误!
增值服务: 安装指导 环境配置 二次开发 模板修改 源码安装

本期推荐的是一个Go语言RPC服务治理框架——RPCX。

Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

RPCX是当前最流行的Go生态圈的微服务框架之一,很多大厂和创业公司都在使用,并且服务端无需额外配置,RPCX也同时支持HTTP调用,这样其它编程语言都可以调用RPCX服务, 是目前性能最好的 RPC 框架之一。

功能特性

  • 简单易用:易于入门, 易于开发, 易于集成, 易于发布, 易于监控
  • 高性能:性能远远高于 Dubbo、Motan、Thrift等框架,是gRPC性能的两倍
  • 交叉平台,交叉语言:可以容易部署在Windows/Linux/MacOS等平台,支持各种编程语言的调用
  • 服务发现:除了直连外,还支持 Zookeeper、Etcd、 Consul、mDNS等注册中心
  • 服务治理:支持 Failover、 Failfast、 Failtry、Backup等失败模式,支持 随机、 轮询、权重、网络质量, 一致性哈希,地理位置等路由算法

快速起步

安装

首先,你需要安装 rpcx:

go get -u -v github.com/smallnest/rpcx/...

这一步只会安装 rpcx 的基础功能。如果你想要使用 etcd 作为注册中心,你需要加上 etcd 这个标签。

go get -u -v -tags "etcd" github.com/smallnest/rpcx/...

如果你想要使用 quic ,你也需要加上 quic 这个标签。

go get -u -v -tags "quic etcd" github.com/smallnest/rpcx/...

方便起见,我推荐你安装所有的tags,即使你现在并不需要他们:

go get -u -v -tags "reuseport quic kcp zookeeper etcd consul ping" github.com/smallnest/rpcx/...

tags 对应:

  • quic:支持 quic 协议
  • kcp:支持 kcp 协议
  • zookeeper:支持 zookeeper 注册中心
  • etcd:支持 etcd 注册中心
  • consul:支持 consul 注册中心
  • ping:支持 网络质量负载均衡
  • reuseport:支持 reuseport

实现Service

实现一个 Sevice 就像写一个单纯的 Go 结构体:

import "context"

type Args struct {
    A int
    B int
}

type Reply struct {
    C int
}

type Arith int

func (t *Arith) Mul(ctx context.Context, args *Args, reply *Reply) error {
    reply.C = args.A * args.B
    return nil
}

Arith 是一个 Go 类型,并且它有一个方法 Mul。 方法 Mul 的 第 1 个参数是 context.Context。 方法 Mul 的 第 2 个参数是 args, args 包含了请求的数据 A 和 B。 方法 Mul 的 第 3 个参数是 reply, reply 是一个指向了 Reply 结构体的指针。 方法 Mul 的 返回类型是 error (可以为 nil)。 方法 Mul 把 A * B 的结果 赋值到 Reply.C

现在你已经定义了一个叫做 Arith 的 service, 并且为它实现了 Mul 方法。 下一步骤中, 我们将会继续介绍如何把这个服务注册给服务器,并且如何用 client 调用它。

Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

实现Server

三行代码就可以注册一个服务:

s := server.NewServer()

s.RegisterName("Arith", new(Arith), "")

s.Serve("tcp", ":8972")

这里你把你的服务命名 Arith。

你可以按照如下的代码注册服务。

s.Register(new(example.Arith), "")

这里简单使用了服务的 类型名称 作为 服务名。

Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

实现Client

 // #1
    d := client.NewPeer2PeerDiscovery("tcp@"+*addr, "")
    // #2
    xclient := client.NewXClient("Arith", client.Failtry, client.RandomSelect, d, client.DefaultOption)
    defer xclient.Close()

    // #3
    args := &example.Args{
        A: 10,
        B: 20,
    }

    // #4
    reply := &example.Reply{}

    // #5
    err := xclient.Call(context.Background(), "Mul", args, reply)
    if err != nil {
        log.Fatalf("failed to call: %v", err)
    }

    log.Printf("%d * %d = %d", args.A, args.B, reply.C)

#1 定义了使用什么方式来实现服务发现。 在这里我们使用最简单的 Peer2PeerDiscovery(点对点)。客户端直连服务器来获取服务地址。

#2 创建了 XClient, 并且传进去了 FailMode、 SelectMode 和默认选项。 FailMode 告诉客户端如何处理调用失败:重试、快速返回,或者 尝试另一台服务器。 SelectMode 告诉客户端如何在有多台服务器提供了同一服务的情况下选择服务器。

#3 定义了请求:这里我们想获得 10 * 20 的结果。 当然我们可以自己算出结果是 200,但是我们仍然想确认这与服务器的返回结果是否一致。

#4 定义了响应对象, 默认值是0值, 事实上 rpcx 会通过它来知晓返回结果的类型,然后把结果反序列化到这个对象。

#5 调用了远程服务并且同步获取结果。

Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

异步调用 Service

以下的代码可以异步调用服务:

   d := client.NewPeer2PeerDiscovery("tcp@"+*addr2, "")
    xclient := client.NewXClient("Arith", client.Failtry, client.RandomSelect, d, client.DefaultOption)
    defer xclient.Close()

    args := &example.Args{
        A: 10,
        B: 20,
    }

    reply := &example.Reply{}
    call, err := xclient.Go(context.Background(), "Mul", args, reply, nil)
    if err != nil {
        log.Fatalf("failed to call: %v", err)
    }

    replyCall := <-call.Done
    if replyCall.Error != nil {
        log.Fatalf("failed to call: %v", replyCall.Error)
    } else {
        log.Printf("%d * %d = %d", args.A, args.B, reply.C)
    }

你必须使用 xclient.Go 来替换 xclient.Call, 然后把结果返回到一个channel里。你可以从chnanel里监听调用结果。

性能测试

测试环境

  • CPU : Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz, 32 cores
  • 内存:32G
  • Go版本:1.9.0
  • 操作系统:CentOS 7 / 3.10.0-229.el7.x86_64

采用

  • protobuf
  • 客户端和服务器在同一台服务器上
  • 581 字节有效载荷
  • 500/2000/5000 个并发客户端
  • 模拟处理时间:0ms、10ms和30ms

测试结果

模拟 0ms 处理时间:

  • 吞吐量
Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

  • 平均延迟
Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

  • P99延迟
Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

模拟 10ms 处理时间:

  • 吞吐量
Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

  • 平均延迟
Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

  • P99延迟
Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

模拟 30ms 处理时间:

  • 吞吐量
Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

  • 平均延迟
Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

  • P99延迟
Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用

—END—

开源协议:Apache 2.0

资源下载此资源为免费资源立即下载

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 免费源码 Go语言开源RPC服务治理框架,很多大厂和创业公司都在使用 https://www.7claw.com/45265.html

分享免费的开源源码

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、七爪会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、七爪无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在七爪上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于七爪介入快速处理。
查看详情
  • 1、七爪作为第三方中介平台,依据交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益; 2、非平台线上交易的项目,出现任何后果均与互站无关;无论卖家以何理由要求线下交易的,请联系管理举报。
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务