Skip to content

Repository files navigation

cubic-root

Go Publish Docker image

Приложение по мотивам данной задачи: https://jtprog.ru/interview-task-0003/

Приложение докеризовано с использованием multi stage build для Go приложений.

Имеется Helm Chart для установки приложения в Kubernetes.

Usage

Приложение по умолчанию слушает на порту 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

build:bin

Собирает локально готовый бинарный файл и складывает его по пути bin/cubic-root:

task build:bin

task: [build:bin] go build -o bin/cubic-root main.go

Testing

Для тестирования приложения воспользуйтесь командой 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

Лицензия

WTFPL

About

HTTP-микросервис на Go для вычисления кубического корня: Docker multi-stage build + Helm chart для Kubernetes

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages