Skip to content

valyala/fastrpc

Repository files navigation

Build Status GoDoc Go Report

fastrpc

Building blocks for fast rpc systems.

Features

  • Optimized for speed.
  • Zero memory allocations in hot paths.
  • Compression saves network bandwidth.

How does it work?

It just sends batched rpc requests and responses over a single compressed connection. This solves the following issues:

  • High network bandwidth usage.
  • High network packets rate.
  • A lot of open TCP connections.

Benchmark results

GOMAXPROCS=1 go test -bench=. -benchmem
goos: linux
goarch: amd64
pkg: github.com/valyala/fastrpc
BenchmarkCoarseTimeNow             	500000000	         3.91 ns/op	       0 B/op	       0 allocs/op
BenchmarkTimeNow                   	30000000	        47.1 ns/op	       0 B/op	       0 allocs/op
BenchmarkEndToEndNoDelay1          	  500000	      3442 ns/op	  75.81 MB/s	       0 B/op	       0 allocs/op
BenchmarkEndToEndNoDelay10         	  500000	      3440 ns/op	  75.85 MB/s	       2 B/op	       0 allocs/op
BenchmarkEndToEndNoDelay100        	  500000	      3448 ns/op	  75.69 MB/s	       2 B/op	       0 allocs/op
BenchmarkEndToEndNoDelay1000       	  500000	      3440 ns/op	  75.86 MB/s	       8 B/op	       0 allocs/op
BenchmarkEndToEndNoDelay10K        	  300000	      3960 ns/op	  65.90 MB/s	      79 B/op	       0 allocs/op
BenchmarkEndToEndDelay1ms          	  500000	      3395 ns/op	  76.87 MB/s	       6 B/op	       0 allocs/op
BenchmarkEndToEndDelay2ms          	  500000	      3519 ns/op	  74.16 MB/s	       6 B/op	       0 allocs/op
BenchmarkEndToEndDelay4ms          	  300000	      4562 ns/op	  57.20 MB/s	      10 B/op	       0 allocs/op
BenchmarkEndToEndDelay8ms          	  200000	      8909 ns/op	  29.30 MB/s	      15 B/op	       0 allocs/op
BenchmarkEndToEndDelay16ms         	  100000	     16647 ns/op	  15.68 MB/s	      31 B/op	       0 allocs/op
BenchmarkEndToEndCompressNone      	  500000	      3376 ns/op	  77.29 MB/s	       6 B/op	       0 allocs/op
BenchmarkEndToEndCompressFlate     	  200000	      8154 ns/op	  32.01 MB/s	      49 B/op	       0 allocs/op
BenchmarkEndToEndCompressSnappy    	  500000	      3665 ns/op	  71.20 MB/s	      10 B/op	       0 allocs/op
BenchmarkEndToEndTLSCompressNone   	  300000	      3892 ns/op	  67.06 MB/s	      15 B/op	       0 allocs/op
BenchmarkEndToEndTLSCompressFlate  	  200000	      8474 ns/op	  30.80 MB/s	      51 B/op	       0 allocs/op
BenchmarkEndToEndTLSCompressSnappy 	  300000	      3851 ns/op	  67.77 MB/s	      18 B/op	       0 allocs/op
BenchmarkEndToEndPipeline1         	  500000	      3249 ns/op	  80.31 MB/s	       0 B/op	       0 allocs/op
BenchmarkEndToEndPipeline10        	  500000	      3232 ns/op	  80.75 MB/s	       2 B/op	       0 allocs/op
BenchmarkEndToEndPipeline100       	  500000	      3237 ns/op	  80.62 MB/s	       2 B/op	       0 allocs/op
BenchmarkEndToEndPipeline1000      	  500000	      3215 ns/op	  81.17 MB/s	       8 B/op	       0 allocs/op
BenchmarkSendNowait                	 3000000	       451 ns/op	       0 B/op	       0 allocs/op

GOMAXPROCS=4 go test -bench=. -benchmem
goos: linux
goarch: amd64
pkg: github.com/valyala/fastrpc
BenchmarkCoarseTimeNow-4               	1000000000	         2.37 ns/op	       0 B/op	       0 allocs/op
BenchmarkTimeNow-4                     	100000000	        17.7 ns/op	       0 B/op	       0 allocs/op
BenchmarkEndToEndNoDelay1-4            	 1000000	      1726 ns/op	 151.14 MB/s	       1 B/op	       0 allocs/op
BenchmarkEndToEndNoDelay10-4           	 1000000	      1757 ns/op	 148.47 MB/s	       1 B/op	       0 allocs/op
BenchmarkEndToEndNoDelay100-4          	 1000000	      1768 ns/op	 147.59 MB/s	       2 B/op	       0 allocs/op
BenchmarkEndToEndNoDelay1000-4         	 1000000	      1610 ns/op	 162.09 MB/s	      11 B/op	       0 allocs/op
BenchmarkEndToEndNoDelay10K-4          	 1000000	      1825 ns/op	 142.94 MB/s	      41 B/op	       0 allocs/op
BenchmarkEndToEndDelay1ms-4            	 1000000	      1656 ns/op	 157.57 MB/s	       8 B/op	       0 allocs/op
BenchmarkEndToEndDelay2ms-4            	 1000000	      1715 ns/op	 152.10 MB/s	       8 B/op	       0 allocs/op
BenchmarkEndToEndDelay4ms-4            	 1000000	      1635 ns/op	 159.62 MB/s	       7 B/op	       0 allocs/op
BenchmarkEndToEndDelay8ms-4            	  500000	      2322 ns/op	 112.36 MB/s	      15 B/op	       0 allocs/op
BenchmarkEndToEndDelay16ms-4           	  300000	      4944 ns/op	  52.78 MB/s	      27 B/op	       0 allocs/op
BenchmarkEndToEndCompressNone-4        	 1000000	      1688 ns/op	 154.58 MB/s	       8 B/op	       0 allocs/op
BenchmarkEndToEndCompressFlate-4       	  500000	      3129 ns/op	  83.40 MB/s	      29 B/op	       0 allocs/op
BenchmarkEndToEndCompressSnappy-4      	 1000000	      1720 ns/op	 151.68 MB/s	       9 B/op	       0 allocs/op
BenchmarkEndToEndTLSCompressNone-4     	 1000000	      1780 ns/op	 146.58 MB/s	       9 B/op	       0 allocs/op
BenchmarkEndToEndTLSCompressFlate-4    	  500000	      3133 ns/op	  83.29 MB/s	      29 B/op	       0 allocs/op
BenchmarkEndToEndTLSCompressSnappy-4   	 1000000	      1758 ns/op	 148.45 MB/s	      10 B/op	       0 allocs/op
BenchmarkEndToEndPipeline1-4           	 1000000	      1638 ns/op	 159.27 MB/s	       1 B/op	       0 allocs/op
BenchmarkEndToEndPipeline10-4          	 1000000	      1646 ns/op	 158.56 MB/s	       1 B/op	       0 allocs/op
BenchmarkEndToEndPipeline100-4         	 1000000	      1623 ns/op	 160.78 MB/s	       2 B/op	       0 allocs/op
BenchmarkEndToEndPipeline1000-4        	 1000000	      1386 ns/op	 188.20 MB/s	      10 B/op	       0 allocs/op
BenchmarkSendNowait-4                  	 5000000	       327 ns/op	       1 B/op	       0 allocs/op

Users

About

Building blocks for fast rpc systems

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages