modulepackage
0.0.0-20171001152356-0b1a558ac726
Repository: https://github.com/valyala/fastrpc.git
Documentation: pkg.go.dev
# README
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
# Packages
Package tlv provides 'Type-Length-Value' building blocks for fastrpc.
# Constants
CompressFlate uses compress/flate with default compression level for connection compression.
CompressNone disables connection compression.
CompressSnappy uses snappy compression.
DefaultConcurrency is the default maximum number of concurrent Server.Handler goroutines the server may run.
DefaultMaxPendingRequests is the default number of pending requests a single Client may queue before sending them to the server.
DefaultReadBufferSize is the default size for read buffers.
DefaultWriteBufferSize is the default size for write buffers.
# Variables
ErrPendingRequestsOverflow is returned when Client cannot send more requests to the server due to Client.MaxPendingRequests limit.
ErrTimeout is returned from timed out calls.
# Interfaces
HandlerCtx is an interface implementing context passed to Server.Handler.
RequestWriter is an interface for writing rpc request to buffered writer.
ResponseReader is an interface for reading rpc response from buffered reader.
# Type aliases
CompressType is a compression type used for connections.