Skip to content

Releases: BrittleFoot/async-architecture

🔥 Homework. Week #3

11 Mar 11:19
9f349c4
Compare
Choose a tag to compare

Схема данных

Схему храню в common package jirapopug.
Схема написана на валидаторах pydantic.
При необходимости уйти из питона - педантик умеет сгенерировать json-схему (см jirapopug.json)

Соответственно схема в формате json :)

Миграция на вторую версию схемы

Миграция на вторую версию в коммите a4bd3e1

В целом прошла безболезненно, по шагам:

  • добавил новую версию схемы
  • добавил новое поле в модель таски
  • добавил в трекер новую версию вью, которая
    • принимает новые параметры и создает таску
    • и отдает в новом формате фронту
    • и создает событие второй версии
  • в биллинге поменял модель
  • и добавил обработчик новой версии события

На каждом шаге приложение целиком оставалось в рабочем состоянии, так как пока все сервисы переходили на новую версию - те, что уже перешли поддерживали обе схемы и генерировали события в нужном формате.

Как тестировать и не терять деньги?

  1. Все операции - транзакционно
  2. Событие отправляется только при подтверждении транзакции
  3. Ошибочные события складывать в очередь неуспешных и позже обрабатывать отдельно
    • сейчас этого конечно нет, но зародыш - я не подтверждаю оффсет кафки, если хэндлер упал с ошибкой - сервис падает пока не поправится код. вот этот момент заменить на "очередь ошибок"
  4. Так как все обработчики просто вызывают сервисы с нужными данными, и сервис зависит только от событий - то можно тестировать отправляя нужные события и смотря на результат (выходные собития или проверкой состояния сервиса через апи)

Немного фотокарточек

Сервис биллинга и аккаунтинга

image

Сервис аналитики

image

🔥 Homework. Week #2

02 Mar 17:18
Compare
Choose a tag to compare
image

Посмотреть на код

🤔 Выбор

  • Аутентификация - oAuth
  • Message broker - Kafka

🐕‍🦺 Сервисы

Общая архитектура

Реализация сервиса аутентификации

image image

Реализация таск-трекера

Создание задачи

image

Список задач

image

Выполнение задачи

image

Перераспределение задач

image image

Связь сервисов

image

Коммуникации

Django App с кодом консюмера/продьюсера

Топики/События

account

  • user.created
  • user.updated

task

  • task.created
  • task.performer_changed
  • task.completed