Приложение по мотивам данной задачи: https://jtprog.ru/interview-task-0003/
Приложение докеризовано с использованием multi stage build для Go приложений.
Имеется Helm Chart для установки приложения в Kubernetes.
Приложение по умолчанию слушает на порту 8080.
Все команды можно посмотреть запустив task и получив такой вывод:
task: [default] task --list
task: Available tasks for this project:
* tests: Run all tests
* build:bin: Build binary
* build:docker: Build docker image
* push:docker: Push docker image
* run:bin: Run binary
* test:bench: Run benchmarks
* test:unit: Run unit tests
Собирает локально готовый бинарный файл и складывает его по пути bin/cubic-root:
task build:bin
task: [build:bin] go build -o bin/cubic-root main.goДля тестирования приложения воспользуйтесь командой task tests, она запустит сначала task test:unit для юниттестов, а потом task test:bench для запуска бенчмарков. Пример вывода:
task: [tests] echo "Running unit tests..."
Running unit tests...
task: [test:unit] go test -v -timeout 30s ./...
=== RUN TestCubicRootHandler_ValidRequest
--- PASS: TestCubicRootHandler_ValidRequest (0.00s)
=== RUN TestCubicRootHandler_InvalidParameter
--- PASS: TestCubicRootHandler_InvalidParameter (0.00s)
=== RUN TestCubicRootHandler_Zero
--- PASS: TestCubicRootHandler_Zero (0.00s)
=== RUN TestCubicRootHandler_NegativeNumber
--- PASS: TestCubicRootHandler_NegativeNumber (0.00s)
=== RUN TestParseQueryParamsToStruct
--- PASS: TestParseQueryParamsToStruct (0.00s)
PASS
ok github.com/jtprogru/cubic-root (cached)
task: [tests] echo "Running benchmarks..."
Running benchmarks...
task: [test:bench] go test -bench=. -run=^$ -v
goos: darwin
goarch: arm64
pkg: github.com/jtprogru/cubic-root
cpu: Apple M1 Max
BenchmarkCubicRoot
BenchmarkCubicRoot-10 3147228 413.0 ns/op
BenchmarkCubicRootHandler
BenchmarkCubicRootHandler-10 491019 2303 ns/op
PASS
ok github.com/jtprogru/cubic-root 4.088sДля тестирования производительности можно использовать утилиту wrk. Пример запуска:
wrk -c500 -d300s -t16 'http://127.0.0.1:8080/cubic-root?d=7077888000'Где:
-c500- количество подключений-d300s- длительность теста в секундах-t16- количество потоков
Пример вывода:
Running 5m test @ http://127.0.0.1:8080/cubic-root?d=7077888000
16 threads and 500 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.30ms 3.90ms 93.16ms 55.51%
Req/Sec 3.49k 1.80k 9.17k 62.92%
16646603 requests in 5.00m, 2.19GB read
Socket errors: connect 260, read 104, write 0, timeout 0
Requests/sec: 55470.35
Transfer/sec: 7.46MB