rpcx alternatives and similar packages
Based on the "Distributed Systems" category.
Alternatively, view rpcx alternatives based on common mentions on social networks and blogs.
-
Nomad
Nomad is an easy-to-use, flexible, and performant workload orchestrator that can deploy a mix of microservice, batch, containerized, and non-containerized applications. Nomad is easy to operate and scale and has native Consul and Vault integrations. -
go-zero
go-zero is a web and rpc framework written in Go. It's born to ensure the stability of the busy sites with resilient design. Builtin goctl greatly improves the development productivity. [Moved to: https://github.com/zeromicro/go-zero] -
ringpop-go
Scalable, fault-tolerant application-layer sharding for Go applications -
Kitex
Go RPC framework with high-performance and strong-extensibility for building micro-services. -
KrakenD
Ultra performant API Gateway with middlewares. A project hosted at The Linux Foundation -
dragonboat
A feature complete and high performance multi-group Raft library in Go. -
Dkron
Dkron - Distributed, fault tolerant job scheduling system https://dkron.io -
emitter-io
High performance, distributed and low latency publish-subscribe platform. -
glow
Glow is an easy-to-use distributed computation system written in Go, similar to Hadoop Map Reduce, Spark, Flink, Storm, etc. I am also working on another similar pure Go system, https://github.com/chrislusf/gleam , which is more flexible and more performant. -
gleam
Fast, efficient, and scalable distributed map/reduce system, DAG execution, in memory or on disk, written in pure Go, runs standalone or distributedly. -
Olric
Distributed in-memory object store. It can be used both as an embedded Go library and as a language-independent service. -
Dragonfly
Dragonfly is an open source P2P-based file distribution and image acceleration system. It is hosted by the Cloud Native Computing Foundation (CNCF) as an Incubating Level Project. -
go-doudou
go-doudou๏ผdoudou pronounce /dษudษu/๏ผis OpenAPI 3.0 (for REST) spec and Protobuf v3 (for grpc) based lightweight microservice framework. It supports monolith service application as well. -
arpc
More effective network communication, two-way calling, notify and broadcast supported. -
resgate
A Realtime API Gateway used with NATS to build REST, real time, and RPC APIs, where all your clients are synchronized seamlessly. -
go-sundheit
A library built to provide support for defining service health for golang services. It allows you to register async health checks for your dependencies and the service itself, provides a health endpoint that exposes their status, and health metrics. -
sleuth
A Go library for master-less peer-to-peer autodiscovery and RPC between HTTP services -
Maestro
Take control of your data, connect with anything, and expose it anywhere through protocols such as HTTP, GraphQL, and gRPC. -
celeriac
Golang client library for adding support for interacting and monitoring Celery workers, tasks and events. -
drmaa
Compute cluster (HPC) job submission library for Go (#golang) based on the open DRMAA standard.
Access the most powerful time series database as a service
Do you think we are missing an alternative of rpcx or a related project?
Popular Comparisons
README
- stable branch: v1.7.x
- development branch: master
Official site: http://rpcx.io
[
](_documents/rpcx_dev_qq3.jpg)
Notice: etcd
since rpcx 1.7.6, some plugins have been moved to the independent project:
etcd
plugin has been moved to rpcx-etcdzookeeper
plugin has been moved to rpcx-zookeeperconsul
plugin has been moved to rpcx-consulredis
plugin has been moved to rpcx-redisinfluxdb
plugin has been moved to rpcx-pluginsopentelemetry
plugin has been moved to rpcx-plugins
Announce
A tcpdump-like tool added: rpcxdumpใ You can use it to debug communications between rpcx services and clients.
Cross-Languages
you can use other programming languages besides Go to access rpcx services.
- rpcx-gateway: You can write clients in any programming languages to call rpcx services via rpcx-gateway
- http invoke: you can use the same http requests to access rpcx gateway
- Java Services/Clients: You can use rpcx-java to implement/access rpcx servies via raw protocol.
- rust rpcx: You can write rpcx services in rust by rpcx-rs
If you can write Go methods, you can also write rpc services. It is so easy to write rpc applications with rpcx.
Installation
install the basic features:
go get -v github.com/smallnest/rpcx/...
If you want to use quic
ใkcp
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 -v -tags "quic kcp" github.com/smallnest/rpcx/...
tags:
- quic: support quic transport
- kcp: support kcp transport
Which companies are using rpcx?
Features
rpcx is a RPC framework like Alibaba Dubbo and Weibo Motan.
rpcx is created 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 used with 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. There's 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, circuit breaker.
- Support bidirectional communication.
- Support access via HTTP so you can write clients in any programming languages.
- Support API gateway.
- Support backup request, forking and broadcast.
rpcx uses a binary protocol and platform-independent, which 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.
Performance
Test results show rpcx has better performance than other rpc framework except standard rpc lib.
The benchmark code is at rpcx-benchmark.
Listen to others, but test by yourself.
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
- the client and the server on the same server
- 581 bytes payload
- 500/2000/5000 concurrent clients
- mock processing time: 0ms, 10ms and 30ms
Test Result
mock 0ms process time
ThroughputsMean LatencyP99 Latency
mock 10ms process time
ThroughputsMean LatencyP99 Latency
mock 30ms process time
ThroughputsMean LatencyP99 Latency
Examples
You can find all examples at rpcxio/rpcx-examples.
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, err := client.NewPeer2PeerDiscovery("[email protected]"+addr, "")
xclient := client.NewXClient("Arith", client.Failtry, client.RandomSelect, d, client.DefaultOption)
defer xclient.Close()
err = xclient.Call(context.Background(), "Mul", args, reply, nil)
Contributors
Contribute
see contributors.
Welcome to contribute:
- submit issues or requirements
- send PRs
- write projects to use rpcx
- write tutorials or articles to introduce rpcx
License
Apache License, Version 2.0
*Note that all licence references and agreements mentioned in the rpcx README section above
are relevant to that project's source code only.