All Projects → storj → drpc

storj / drpc

Licence: MIT license
drpc is a lightweight, drop-in replacement for gRPC

Programming Languages

go
31211 projects - #10 most used programming language
Nix
1067 projects

Projects that are alternatives of or similar to drpc

Grpc Go
The Go language implementation of gRPC. HTTP/2 based RPC
Stars: ✭ 15,042 (+1383.43%)
Mutual labels:  grpc, rpc, proto, nanoservices
Tonic
A native gRPC client & server implementation with async/await support.
Stars: ✭ 4,422 (+336.09%)
Mutual labels:  grpc, rpc, proto
Purerpc
Asynchronous pure Python gRPC client and server implementation supporting asyncio, uvloop, curio and trio
Stars: ✭ 125 (-87.67%)
Mutual labels:  grpc, rpc
Go Grpc
A collection of gRPC and Go examples showcasing features of the framework
Stars: ✭ 127 (-87.48%)
Mutual labels:  grpc, rpc
Evans
Evans: more expressive universal gRPC client
Stars: ✭ 2,710 (+167.26%)
Mutual labels:  grpc, rpc
Docker Cloud Platform
使用Docker构建云平台,Docker云平台系列共三讲,Docker基础、Docker进阶、基于Docker的云平台方案。OpenStack+Docker+RestAPI+OAuth/HMAC+RabbitMQ/ZMQ+OpenResty/HAProxy/Nginx/APIGateway+Bootstrap/AngularJS+Ansible+K8S/Mesos/Marathon构建/探索微服务最佳实践。
Stars: ✭ 86 (-91.52%)
Mutual labels:  grpc, rpc
Pool
General Purpose Connection Pool for GRPC,RPC,TCP Sevice Cluster
Stars: ✭ 98 (-90.34%)
Mutual labels:  grpc, rpc
Ginrpc
gin auto binding,grpc, and annotated route,gin 注解路由, grpc,自动参数绑定工具
Stars: ✭ 157 (-84.52%)
Mutual labels:  grpc, rpc
Libra Sdk Go
Go SDK for the Libra cryptocurrency
Stars: ✭ 23 (-97.73%)
Mutual labels:  grpc, rpc
Magiconion
Unified Realtime/API framework for .NET platform and Unity.
Stars: ✭ 2,505 (+147.04%)
Mutual labels:  grpc, rpc
Mu Haskell
Mu (μ) is a purely functional framework for building micro services.
Stars: ✭ 215 (-78.8%)
Mutual labels:  grpc, rpc
Kubemq
KubeMQ is Enterprise-grade message broker native for Docker and Kubernetes
Stars: ✭ 58 (-94.28%)
Mutual labels:  grpc, rpc
Grpc
An Elixir implementation of gRPC
Stars: ✭ 858 (-15.38%)
Mutual labels:  grpc, rpc
Rpc Framework Tutorials
Java分布式RPC服务框架教程,包括 Dubbo/Dubbox, Motan, gRPC.
Stars: ✭ 114 (-88.76%)
Mutual labels:  grpc, rpc
Lnd Grpc Client
A python grpc client/async client for LND ⚡⚡⚡
Stars: ✭ 26 (-97.44%)
Mutual labels:  grpc, rpc
Go Micro Boilerplate
The boilerplate of the GoLang application with a clear microservices architecture.
Stars: ✭ 147 (-85.5%)
Mutual labels:  grpc, rpc
rpc ts
Remote Procedure Calls in TypeScript made simple 🤞
Stars: ✭ 71 (-93%)
Mutual labels:  grpc, rpc
Servicetalk
A networking framework that evolves with your application
Stars: ✭ 656 (-35.31%)
Mutual labels:  grpc, rpc
Rpc Thunderdome
A comparison between Proteus RPC and other commonly used RPC frameworks
Stars: ✭ 22 (-97.83%)
Mutual labels:  grpc, rpc
Go Grpc Examples
This repo contains examples and implementations of different types of GRPC services and APIs using Golang.
Stars: ✭ 180 (-82.25%)
Mutual labels:  grpc, rpc

DRPC

A drop-in, lightweight gRPC replacement.

Go Report Card Go Doc Beta Zulip Chat

Links

Highlights

  • Simple, at just a few thousand lines of code.
  • Small dependencies. Only 3 requirements in go.mod, and 9 lines of go mod graph!
  • Compatible. Works for many gRPC use-cases as-is!
  • Fast. DRPC has a lightning quick wire format.
  • Extensible. DRPC is transport agnostic, supports middleware, and is designed around interfaces.
  • Battle Tested. Already used in production for years across tens of thousands of servers.

External Packages

  • go.bryk.io/pkg/net/drpc

    • Simplified TLS setup (for client and server)
    • Server middleware, including basic components for logging, token-based auth, rate limit, panic recovery, etc
    • Client middleware, including basic components for logging, custom metadata, panic recovery, etc
    • Bi-directional streaming support over upgraded HTTP(S) connections using WebSockets
    • Concurrent RPCs via connection pool
  • Open an issue or join the Zulip chat if you'd like to be featured here.

Other Languages

DRPC can be made compatible with RPC clients generated from other languages. For example, Twirp clients and grpc-web clients can be used against the drpchttp package.

Native implementations can have some advantages, and so some bindings for other languages are in progress, all in various states of completeness. Join the Zulip chat if you want more information or to help out with any!

Language Repository Status
C++ https://github.com/storj/drpc-cpp Incomplete
Rust https://github.com/zeebo/drpc-rs Incomplete
Node https://github.com/mjpitz/drpc-node Incomplete

Licensing

DRPC is licensed under the MIT/expat license. See the LICENSE file for more.


Benchmarks

These microbenchmarks attempt to provide a comparison and come with some caveats. First, it does not send data over a network connection which is expected to be the bottleneck almost all of the time. Second, no attempt was made to do the benchmarks in a controlled environment (CPU scaling disabled, noiseless, etc.). Third, no tuning was done to ensure they're both performing optimally, so there is an inherent advantage for DRPC because the author is familiar with how it works.

Measure Benchmark Small Medium Large
gRPCDRPCdelta gRPCDRPCdelta gRPCDRPCdelta
time/op Unitary 30.2µs8.6µs-71.60% 38.0µs11.1µs-70.88% 1.33ms0.63ms-52.30%
Input Stream 878ns759ns-13.54% 2.85µs2.00µs-29.69% 508µs249µs-51.08%
Output Stream 862ns757ns-12.18% 2.76µs1.99µs-27.92% 487µs239µs-50.94%
Bidir Stream 9.81µs3.30µs-66.38% 14.8µs4.9µs-66.69% 1.31ms0.55ms-58.41%
speed Unitary 70.0kB/s230.0kB/s+228.57% 54.0MB/s185.3MB/s+243.44% 791MB/s1658MB/s+109.62%
Input Stream 2.29MB/s2.64MB/s+15.37% 721MB/s1026MB/s+42.21% 2.06GB/s4.22GB/s+104.32%
Output Stream 2.32MB/s2.64MB/s+13.67% 743MB/s1031MB/s+38.74% 2.15GB/s4.39GB/s+103.75%
Bidir Stream 200kB/s604kB/s+201.87% 138MB/s415MB/s+200.20% 799MB/s1920MB/s+140.44%
mem/op Unitary 8.37kB1.29kB-84.59% 21.8kB7.7kB-64.81% 6.50MB3.16MB-51.38%
Input Stream 399B80B-79.96% 7.09kB2.13kB-69.97% 3.20MB1.05MB-67.16%
Output Stream 309B80B-74.13% 6.98kB2.13kB-69.53% 3.20MB1.05MB-67.17%
Bidir Stream 1.02kB0.24kB-76.40% 14.4kB4.3kB-69.99% 6.52MB2.10MB-67.74%
allocs/op Unitary 1697-95.86% 1719-94.74% 4039-97.76%
Input Stream 111-90.91% 122-83.33% 1212-98.35%
Output Stream 91-88.89% 102-80.00% 1172-98.29%
Bidir Stream 413-92.68% 445-88.64% 2725-98.16%

Lines of code

Package Lines
storj.io/drpc/drpchttp 475
storj.io/drpc/cmd/protoc-gen-go-drpc 418
storj.io/drpc/drpcstream 390
storj.io/drpc/drpcwire 332
storj.io/drpc/drpcmanager 300
storj.io/drpc/drpcmigrate 237
storj.io/drpc/drpcsignal 133
storj.io/drpc/drpcconn 116
storj.io/drpc/drpcmetadata 115
storj.io/drpc/drpcmux 95
storj.io/drpc/drpcserver 76
storj.io/drpc/drpccache 54
storj.io/drpc 47
storj.io/drpc/drpcerr 42
storj.io/drpc/drpcctx 37
storj.io/drpc/drpcdebug 22
storj.io/drpc/drpcenc 15
storj.io/drpc/internal/drpcopts 11
Total 2915
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].