Git Product home page Git Product logo

drpc's Introduction

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 388
storj.io/drpc/drpcwire 332
storj.io/drpc/drpcmanager 280
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 19
storj.io/drpc/drpcenc 15
storj.io/drpc/internal/drpcopts 11
Total 2890

drpc's People

Contributors

zeebo avatar jtolio avatar egonelbre avatar ifraixedes avatar maxtruxa avatar stefanbenten avatar vinozzz avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.