gorpc alternatives and similar packages
Based on the "Distributed Systems" category.
Alternatively, view gorpc 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] -
rpcx
Best microservices framework in Go, like alibaba Dubbo, but with more features, Scale easily. Try it. Test it. If you feel it's better, use it! ๐๐๐ฏ๐ๆ๐๐ฎ๐๐๐จ, ๐๐จ๐ฅ๐๐ง๐ ๆ๐ซ๐ฉ๐๐ฑ! build for cloud! -
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. -
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. -
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-health
Library for enabling asynchronous health checks in your service -
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.
Clean code begins in your IDE with SonarLint
Do you think we are missing an alternative of gorpc or a related project?
Popular Comparisons
README
gorpc
Simple, fast and scalable golang RPC library for high load and microservices.
Gorpc provides the following features useful for highly loaded projects with RPC:
It minimizes the number of connect() syscalls by pipelining request and response messages over a single connection.
It minimizes the number of send() syscalls by packing as much as possible pending requests and responses into a single compressed buffer before passing it into send() syscall.
It minimizes the number of recv() syscalls by reading and buffering as much as possible data from the network.
It supports RPC batching, which allows preparing multiple requests and sending them to the server in a single batch.
These features help the OS minimizing overhead (CPU load, the number of TCP connections in TIME_WAIT and CLOSE_WAIT states, the number of network packets and the amount of network bandwidth) required for RPC processing under high load.
Additionally gorpc provides the following features missing in net/rpc:
- Client automatically manages connections and automatically reconnects to the server on connection errors.
- Client supports response timeouts.
- Client supports RPC batching.
- Client supports async requests' canceling.
- Client prioritizes new requests over old pending requests if server fails to handle the given load.
- Client detects stuck servers and immediately returns error to the caller.
- Client supports fast message passing to the Server, i.e. requests without responses.
- Both Client and Server provide network stats and RPC stats out of the box.
- Commonly used RPC transports such as TCP, TLS and unix socket are available out of the box.
- RPC transport compression is provided out of the box.
- Server provides graceful shutdown out of the box.
- Server supports RPC handlers' councurrency throttling out of the box.
- Server may pass client address to RPC handlers.
- Server gracefully handles panic in RPC handlers.
- Dispatcher accepts functions as RPC handlers.
- Dispatcher supports registering multiple receiver objects of the same type under distinct names.
- Dispatcher supports RPC handlers with zero, one (request) or two (client address and request) arguments and zero, one (either response or error) or two (response, error) return values.
Dispatcher API provided by gorpc allows easily converting usual functions and/or struct methods into RPC versions on both client and server sides. See Dispatcher examples for more details.
By default TCP connections are used as underlying gorpc transport. But it is possible using arbitrary underlying transport - just provide custom implementations for Client.Dial and Server.Listener. RPC authentication, authorization and encryption can be easily implemented via custom underlying transport and/or via OnConnect callbacks. Currently gorpc provides TCP, TLS and unix socket transport out of the box.
Currently gorpc with default settings is successfully used in highly loaded production environment serving up to 40K qps. Switching from http-based rpc to gorpc reduced required network bandwidth from 300 Mbit/s to 24 Mbit/s.
Docs
See http://godoc.org/github.com/valyala/gorpc .
Usage
Server:
s := &gorpc.Server{
// Accept clients on this TCP address.
Addr: ":12345",
// Echo handler - just return back the message we received from the client
Handler: func(clientAddr string, request interface{}) interface{} {
log.Printf("Obtained request %+v from the client %s\n", request, clientAddr)
return request
},
}
if err := s.Serve(); err != nil {
log.Fatalf("Cannot start rpc server: %s", err)
}
Client:
c := &gorpc.Client{
// TCP address of the server.
Addr: "rpc.server.addr:12345",
}
c.Start()
// All client methods issuing RPCs are thread-safe and goroutine-safe,
// i.e. it is safe to call them from multiple concurrently running goroutines.
resp, err := c.Call("foobar")
if err != nil {
log.Fatalf("Error when sending request to server: %s", err)
}
if resp.(string) != "foobar" {
log.Fatalf("Unexpected response from the server: %+v", resp)
}
Both client and server collect connection stats - the number of bytes read / written and the number of calls / errors to send(), recv(), connect() and accept(). This stats is available at Client.Stats and Server.Stats.
See tests for more usage examples.