Skip to content

neoetheilred/L0

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

L0

Автор: Роман Андриевский


Использование:

  • Поднять сервис:

    $ 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