Skip to content

AtaullinShamil/WB-Tech-level-0

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Как запустить

  • git clone git@github.com:AtaullinShamil/L0.git

  • В L0/cmd/base/main.go в функции init указать свой адрес репозитория

  • В L0/cmd/generator/main.go изменить Path на свой адрес репозитория

  • Запустить Docker

  • В L0/deploy ввести команду "make docker"

  • В L0/deploy ввести команду "make"

  • Для запуска генератора заказов в отдельном терминале в L0/deploy ввести команду "make generator"

    Генератор отправляет заказы в nats, печатает uid заказа и количество товаров в заказе в stdout. Данные сохраняются в бд и хранятся в кэше.

    По адресу http://localhost:8080/wb можно ввести uid заказа и получить информацию по нему. Информация выдается из кэша. В случае падения сервиса, данные восстанавливаются из бд и записываются в кэш.

Тестовое задание

Необходимо разработать демонстрационный сервис с простейшим интерфейсом, отображающий данные о заказе. Модель данных в формате JSON прилагается к заданию.

Что нужно сделать:

  1. Развернуть локально PostgreSQL

    • Создать свою БД
    • Настроить своего пользователя
    • Создать таблицы для хранения полученных данных
  2. Разработать сервис

    • Реализовать подключение и подписку на канал в nats-streaming
    • Полученные данные записывать в БД
    • Реализовать кэширование полученных данных в сервисе (сохранять in memory)
    • В случае падения сервиса необходимо восстанавливать кэш из БД
    • Запустить http-сервер и выдавать данные по id из кэша
  3. Разработать простейший интерфейс отображения полученных данных по id заказа

Советы

  • Данные статичны, исходя из этого подумайте насчет модели хранения в кэше и в PostgreSQL. Модель в файле model.json
  • Подумайте как избежать проблем, связанных с тем, что в канал могут закинуть что-угодно.
  • Чтобы проверить работает ли подписка онлайн, сделайте себе отдельный скрипт, для публикации данных в канал
  • Подумайте как не терять данные в случае ошибок или проблем с сервисом
  • Nats-streaming разверните локально (не путать с Nats)

Бонус-задание

Покройте сервис автотестами — будет плюсик вам в карму. Устройте вашему сервису стресс-тест: выясните на что он способен.

Воспользуйтесь утилитами WRK и Vegeta, попробуйте оптимизировать код.

Releases

No releases published

Packages

No packages published