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
|
package gotsrpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -155,7 +154,7 @@ func (c *BufferedClient) Call(ctx context.Context, url string, endpoint string,
|
|||||||
encodeWriter = snappyWriter
|
encodeWriter = snappyWriter
|
||||||
defer snappyWriter.Close()
|
defer snappyWriter.Close()
|
||||||
case CompressorNone:
|
case CompressorNone:
|
||||||
encodeWriter = bufio.NewWriterSize(writer, 1024)
|
encodeWriter = writer
|
||||||
default:
|
default:
|
||||||
encodeWriter = writer
|
encodeWriter = writer
|
||||||
}
|
}
|
||||||
@ -180,6 +179,8 @@ func (c *BufferedClient) Call(ctx context.Context, url string, endpoint string,
|
|||||||
req.Header.Set("Content-Encoding", "gzip")
|
req.Header.Set("Content-Encoding", "gzip")
|
||||||
case CompressorSnappy:
|
case CompressorSnappy:
|
||||||
req.Header.Set("Content-Encoding", "snappy")
|
req.Header.Set("Content-Encoding", "snappy")
|
||||||
|
case CompressorNone:
|
||||||
|
// uncompressed, nothing to do
|
||||||
default:
|
default:
|
||||||
// uncompressed, nothing to do
|
// uncompressed, nothing to do
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,7 +97,6 @@ func TestNewBufferedClient(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkBufferedClient(b *testing.B) {
|
func BenchmarkBufferedClient(b *testing.B) {
|
||||||
|
|
||||||
var testRequestData []interface{}
|
var testRequestData []interface{}
|
||||||
data, err := os.ReadFile("testdata/request.json")
|
data, err := os.ReadFile("testdata/request.json")
|
||||||
require.NoError(b, err)
|
require.NoError(b, err)
|
||||||
@ -106,22 +105,33 @@ func BenchmarkBufferedClient(b *testing.B) {
|
|||||||
require.NoError(b, err)
|
require.NoError(b, err)
|
||||||
|
|
||||||
benchClient := func(b *testing.B, client Client) {
|
benchClient := func(b *testing.B, client Client) {
|
||||||
|
|
||||||
server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
|
server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
|
||||||
writer.Write([]byte("[]"))
|
writer.Write([]byte("[]"))
|
||||||
}))
|
}))
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
|
b.ResetTimer()
|
||||||
client.(*BufferedClient).client = server.Client()
|
if bc, ok := client.(*BufferedClient); ok {
|
||||||
|
bc.client = server.Client()
|
||||||
|
}
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
err := client.Call(context.Background(), server.URL, "/test", "test", testRequestData, nil)
|
err := client.Call(context.Background(), server.URL, "/test", "test", testRequestData, nil)
|
||||||
require.NoError(b, err)
|
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))) })
|
for name, compressor := range benchmarks {
|
||||||
b.Run("gzip", func(b *testing.B) { benchClient(b, NewBufferedClient(WithCompressor(CompressorGZIP))) })
|
b.Run(name, func(b *testing.B) {
|
||||||
b.Run("snappy", func(b *testing.B) { benchClient(b, NewBufferedClient(WithCompressor(CompressorSnappy))) })
|
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