mirror of
https://github.com/foomo/gotsrpc.git
synced 2025-10-16 12:35:35 +00:00
chore: add ADR & client benchmarks
This commit is contained in:
parent
b0b85f2b4f
commit
9ee1a8d34c
@ -1,7 +1,6 @@
|
||||
package gotsrpc
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"compress/gzip"
|
||||
"context"
|
||||
"fmt"
|
||||
@ -155,7 +154,7 @@ func (c *BufferedClient) Call(ctx context.Context, url string, endpoint string,
|
||||
encodeWriter = snappyWriter
|
||||
defer snappyWriter.Close()
|
||||
case CompressorNone:
|
||||
encodeWriter = bufio.NewWriterSize(writer, 1024)
|
||||
encodeWriter = writer
|
||||
default:
|
||||
encodeWriter = writer
|
||||
}
|
||||
@ -180,6 +179,8 @@ func (c *BufferedClient) Call(ctx context.Context, url string, endpoint string,
|
||||
req.Header.Set("Content-Encoding", "gzip")
|
||||
case CompressorSnappy:
|
||||
req.Header.Set("Content-Encoding", "snappy")
|
||||
case CompressorNone:
|
||||
// uncompressed, nothing to do
|
||||
default:
|
||||
// uncompressed, nothing to do
|
||||
}
|
||||
|
||||
@ -97,7 +97,6 @@ func TestNewBufferedClient(t *testing.T) {
|
||||
}
|
||||
|
||||
func BenchmarkBufferedClient(b *testing.B) {
|
||||
|
||||
var testRequestData []interface{}
|
||||
data, err := os.ReadFile("testdata/request.json")
|
||||
require.NoError(b, err)
|
||||
@ -106,22 +105,33 @@ func BenchmarkBufferedClient(b *testing.B) {
|
||||
require.NoError(b, err)
|
||||
|
||||
benchClient := func(b *testing.B, client Client) {
|
||||
|
||||
server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
|
||||
writer.Write([]byte("[]"))
|
||||
}))
|
||||
defer server.Close()
|
||||
b.ReportAllocs()
|
||||
|
||||
client.(*BufferedClient).client = server.Client()
|
||||
b.ResetTimer()
|
||||
if bc, ok := client.(*BufferedClient); ok {
|
||||
bc.client = server.Client()
|
||||
}
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
err := client.Call(context.Background(), server.URL, "/test", "test", testRequestData, nil)
|
||||
require.NoError(b, err)
|
||||
}
|
||||
}
|
||||
benchmarks := map[string]Compressor{
|
||||
"none": CompressorNone,
|
||||
"gzip": CompressorGZIP,
|
||||
"snappy": CompressorSnappy,
|
||||
}
|
||||
runs := 5
|
||||
|
||||
b.Run("uncompressed", func(b *testing.B) { benchClient(b, NewBufferedClient(WithCompressor(CompressorNone))) })
|
||||
b.Run("gzip", func(b *testing.B) { benchClient(b, NewBufferedClient(WithCompressor(CompressorGZIP))) })
|
||||
b.Run("snappy", func(b *testing.B) { benchClient(b, NewBufferedClient(WithCompressor(CompressorSnappy))) })
|
||||
for name, compressor := range benchmarks {
|
||||
b.Run(name, func(b *testing.B) {
|
||||
for index := 0; index < runs; index++ {
|
||||
b.Run(fmt.Sprintf("%d", index), func(b *testing.B) { benchClient(b, NewBufferedClient(WithCompressor(compressor))) })
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
19
doc/adr/0001-record-architecture-decisions.md
Normal file
19
doc/adr/0001-record-architecture-decisions.md
Normal file
@ -0,0 +1,19 @@
|
||||
# 1. Record architecture decisions
|
||||
|
||||
Date: 2025-01-16
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
We need to record the architectural decisions made on this project.
|
||||
|
||||
## Decision
|
||||
|
||||
We will use Architecture Decision Records, as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions).
|
||||
|
||||
## Consequences
|
||||
|
||||
See Michael Nygard's article, linked above. For a lightweight ADR toolset, see Nat Pryce's [adr-tools](https://github.com/npryce/adr-tools).
|
||||
72
doc/adr/0002-streaming-and-compression.md
Normal file
72
doc/adr/0002-streaming-and-compression.md
Normal file
@ -0,0 +1,72 @@
|
||||
# 2. streaming and compression
|
||||
|
||||
Date: 2025-01-16
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
We need to allow streaming and compression of the data.
|
||||
|
||||
## Decision
|
||||
|
||||
We will use the `io.Pipe` interface to allow streaming of the data, and pipe the data through the compression algorithm.
|
||||
For
|
||||
|
||||
## Consequences
|
||||
|
||||
Benchmarking shows that the compression is not noticeable for snappy, but the streaming is in comparison to the old method.
|
||||
|
||||
```text
|
||||
goos: darwin
|
||||
goarch: arm64
|
||||
pkg: github.com/foomo/gotsrpc/v2
|
||||
cpu: Apple M1 Max
|
||||
BenchmarkBufferedClient
|
||||
BenchmarkBufferedClient/deprecated
|
||||
BenchmarkBufferedClient/deprecated/0
|
||||
BenchmarkBufferedClient/deprecated/0-10 20712 54428 ns/op 26135 B/op 108 allocs/op
|
||||
BenchmarkBufferedClient/deprecated/1
|
||||
BenchmarkBufferedClient/deprecated/1-10 22180 52320 ns/op 26170 B/op 108 allocs/op
|
||||
BenchmarkBufferedClient/deprecated/2
|
||||
BenchmarkBufferedClient/deprecated/2-10 22329 49323 ns/op 26236 B/op 108 allocs/op
|
||||
BenchmarkBufferedClient/deprecated/3
|
||||
BenchmarkBufferedClient/deprecated/3-10 24580 48177 ns/op 26138 B/op 108 allocs/op
|
||||
BenchmarkBufferedClient/deprecated/4
|
||||
BenchmarkBufferedClient/deprecated/4-10 24999 57772 ns/op 26154 B/op 108 allocs/op
|
||||
BenchmarkBufferedClient/snappy
|
||||
BenchmarkBufferedClient/snappy/0
|
||||
BenchmarkBufferedClient/snappy/0-10 16392 69553 ns/op 15282 B/op 114 allocs/op
|
||||
BenchmarkBufferedClient/snappy/1
|
||||
BenchmarkBufferedClient/snappy/1-10 17702 72923 ns/op 14944 B/op 114 allocs/op
|
||||
BenchmarkBufferedClient/snappy/2
|
||||
BenchmarkBufferedClient/snappy/2-10 17932 67446 ns/op 14819 B/op 114 allocs/op
|
||||
BenchmarkBufferedClient/snappy/3
|
||||
BenchmarkBufferedClient/snappy/3-10 16640 69216 ns/op 15155 B/op 114 allocs/op
|
||||
BenchmarkBufferedClient/snappy/4
|
||||
BenchmarkBufferedClient/snappy/4-10 16767 66247 ns/op 15010 B/op 114 allocs/op
|
||||
BenchmarkBufferedClient/none
|
||||
BenchmarkBufferedClient/none/0
|
||||
BenchmarkBufferedClient/none/0-10 17706 68516 ns/op 12280 B/op 112 allocs/op
|
||||
BenchmarkBufferedClient/none/1
|
||||
BenchmarkBufferedClient/none/1-10 17593 68580 ns/op 12308 B/op 112 allocs/op
|
||||
BenchmarkBufferedClient/none/2
|
||||
BenchmarkBufferedClient/none/2-10 17292 67673 ns/op 12208 B/op 112 allocs/op
|
||||
BenchmarkBufferedClient/none/3
|
||||
BenchmarkBufferedClient/none/3-10 17086 71715 ns/op 12285 B/op 112 allocs/op
|
||||
BenchmarkBufferedClient/none/4
|
||||
BenchmarkBufferedClient/none/4-10 17067 68955 ns/op 12295 B/op 112 allocs/op
|
||||
BenchmarkBufferedClient/gzip
|
||||
BenchmarkBufferedClient/gzip/0
|
||||
BenchmarkBufferedClient/gzip/0-10 7190 153284 ns/op 22024 B/op 113 allocs/op
|
||||
BenchmarkBufferedClient/gzip/1
|
||||
BenchmarkBufferedClient/gzip/1-10 6808 158344 ns/op 20757 B/op 113 allocs/op
|
||||
BenchmarkBufferedClient/gzip/2
|
||||
BenchmarkBufferedClient/gzip/2-10 6889 156492 ns/op 19680 B/op 113 allocs/op
|
||||
BenchmarkBufferedClient/gzip/3
|
||||
BenchmarkBufferedClient/gzip/3-10 6927 148146 ns/op 18912 B/op 113 allocs/op
|
||||
BenchmarkBufferedClient/gzip/4
|
||||
BenchmarkBufferedClient/gzip/4-10 8340 146697 ns/op 20207 B/op 113 allocs/op
|
||||
```
|
||||
Loading…
Reference in New Issue
Block a user