-
Поднять сервис:
$ docker-compose up
-
Послать в nats-streaming фейковые данные:
$ cd servce # go run ./util/main.go <Количество записей order> $ go run ./util/main.go 100
Посылает в nats-streaming 100 случайно сгенерированных моделей
-
Web клиент доступен по адресу
localhost:8081
В поле для ввода нужно вводить значение поля
order_uid
моделиСправа список доступных id (закешированных в сервисе), при нажатии на id клиент получает объект из сервиса
-
База данных (postgres):
-
по адресу
localhost:8080
доступен клиент adminerимя пользователя: root пароль: toor база данных: root
-
таблицы:
orders - основная таблица, где хранятся данные в соответствии с моделью из условия deliveries, items, payments - таблицы для хранения внутренних структур модели
подробнее см.
postgres/1.sql
-
-
Если в сервис приходит не json - то сервис ничего не делает, продолжает ожидать данные
-
Если поступает валидный json, тогда сервис валидирует полученный объект (с помощью
github.com/go-playground/validator/v10
), если объект не проходит валидацию, то сервис ничего не делает, продолжает ожидать данные; если с данными все в порядке, то объект записывается в БД и в кеш -
При создании сервиса из БД в кеш загружаются все записи из БД, впоследствии, одновременно с записью в БД, в кеше сохраняются получаемые данные
-
При падении сервиса он перезапускается, при запуске кеш загружается из БД
Тестирование с помощью утилиты WRK (всё на локальной машине)
Результаты:
Running 20s test @ http://l0-service-1:8000/order/db9fbd48-7dc7-46ff-b23a-351ba3edcae8
8 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 14.03ms 16.55ms 138.89ms 84.99%
Req/Sec 775.38 304.32 1.56k 70.26%
30482 requests in 20.09s, 83.23MB read
Socket errors: connect 0, read 0, write 0, timeout 192
Requests/sec: 1517.49
Transfer/sec: 4.14MB
Running 20s test @ http://l0-service-1:8000/cached
8 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 9.94ms 14.10ms 205.88ms 89.41%
Req/Sec 1.98k 633.20 4.79k 71.62%
315637 requests in 20.05s, 8.12GB read
Requests/sec: 15745.70
Transfer/sec: 414.66MB