Official site: http://rpcx.site
install the basic features:
go get -u -v github.com/smallnest/rpcx/...
If you want to use reuseport
、quic
、kcp
, zookeeper
, etcd
, consul
registry, use those tags to go get
、 go build
or go run
. For example, if you want to use all features, you can:
go get -u -v -tags "reuseport quic kcp zookeeper etcd consul ping" github.com/smallnest/rpcx/...
tags:
- quic: support quic transport
- kcp: support kcp transport
- zookeeper: support zookeeper register
- etcd: support etcd register
- consul: support consul register
- ping: support network quality load balancing
- reuseport: support reuseport
rpcx is a RPC framework like Alibaba Dubbo and Weibo Motan.
rpcx 3.0 has been refactored for targets:
- Simple: easy to learn, easy to develop, easy to intergate and easy to deploy
- Performance: high perforamnce (>= grpc-go)
- Cross-platform: support raw slice of bytes, JSON, Protobuf and MessagePack. Theoretically it can be use in java, php, python, c/c++, node.js, c# and other platforms
- Service discovery and service governance.: support zookeeper, etcd and consul.
It contains below features
- Support raw Go functions,. No need to define proto files.
- Pluggable. Features can be extended such as service discovery, tracing.
- Support TCP, HTTP, QUIC and KCP
- Support multiple codecs such as JSON、Protobuf、MessagePack and raw bytes.
- Service discovery. Support peer2peer, configured peers, zookeeper, etcd, consul and mDNS.
- Fault tolerance:Failover、Failfast、Failtry.
- Load banlancing:support Random, RoundRobin, Consistent hashing, Weighted, network quality and Geography.
- Support Compression.
- Support passing metadata.
- Support Authorization.
- Support heartbeat and one-way request.
- Other features: metrics, log, timeout, alias, CircuitBreaker.
rpcx uses a binary protocol and platform-independent, that means you can develop services in other languages such as Java, python, nodejs, and you can use other prorgramming languages to invoke services developed in Go.
There is a UI manager: rpcx-ui.
Test Environment
- CPU: Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz, 32 cores
- Memory: 32G
- Go: 1.9.0
- OS: CentOS 7 / 3.10.0-229.el7.x86_64
Use
- protobuf
- one machine for the client and the server
- 581 bytes payload
- 5000 concurrent clients
Test Result
rpcx | grpc-go | |
---|---|---|
TPS | 192300 request/second | 106886 request/second |
Mean latency | 25 ms | 46 ms |
Median latency | 12 ms | 41 ms |
P99 | 246ms | 170ms |
You can find all examples at rpcx-ecosystem/rpcx-examples3.
The below is a simple example.
Server
// define example.Arith
……
s := server.NewServer()
s.RegisterName("Arith", new(example.Arith), "")
s.Serve("tcp", addr)
Client
// prepare requests
……
d := client.NewPeer2PeerDiscovery("tcp@"+addr, "")
xclient := client.NewXClient("Arith", client.Failtry, client.RandomSelect, d, client.DefaultOption)
defer xclient.Close()
err := xclient.Call(context.Background(), "Mul", args, reply, nil)
- Cluster defense project: 10 millions of calls per day.
- Storm of the Three Kingdoms: game
- 车弹趣
- 撩车友
- 迈布
If you or your company is using rpcx, welcome to tell me and I will add more in this.
see contributors.
Welcome to contribute:
- submit issues or requirements
- send PRs
- write projects to use rpcx
- write tutorials or articles to introduce rpcx
Apache License, Version 2.0