Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save des1roer/71eba51c8903035325ede5e06e4104d1 to your computer and use it in GitHub Desktop.
Save des1roer/71eba51c8903035325ede5e06e4104d1 to your computer and use it in GitHub Desktop.

1 неделя - Знакомство, протоколы http и gRPC

  • Создать репозиторий под названием auth и настроить, как было показано в Блоке 1
  • Создать репозиторий под названием chat-server и настроить, как было показано в Блоке 1
  • В репозитории auth описать User API в proto-файле и реализовать холостую логику, то есть можно просто печатать входные данные на экран
    • Create - ручка создания нового пользователя в системе.
      • Request
        • string name
        • string email
        • string password
        • string password_confirm
        • enum role (требуется создать enum из двух вариантов user и admin)
      • Response
        • int64 id
    • Get - ручка получения информации о пользователе по его идентификатору.
      • Request
        • int64 id
      • Response
        • int64 id
        • string name
        • string email
        • enum role
        • Timestamp created_at
        • Timestamp updated_at
    • Update - ручка обновления информации о пользователе по его идентификатору.
      • Request
        • int64 id
        • StringValue name
        • StringValue email
      • Response
        • empty
    • Delete - удаление пользователя из системы по его идентификатору.
      • Request
        • int64 id
      • Response
        • empty
  • В репозитории chat-server описать Chat API в proto-файле и реализовать холостую логику, то есть можно просто печатать входные данные на экран
    • Create - ручка создания нового чата.
      • Request
        • []string usernames
      • Response
        • int64 id
    • Delete - удаление чата из системы по его идентификатору.
      • Request
        • int64 id
      • Response
        • empty
    • SendMessage - ручка отправки сообщения на сервер.
      • Request
        • string from
        • string text
        • Timestamp timestamp
      • Response
        • empty

2 неделя - Deploy сервиса в облако и работа с PostgreSQL

  • Развернуть базы данных для сервисов auth и chat-server с помощью docker compose
  • Написать соответствующие миграции для обоих сервисов
  • Реализовать для обоих сервисов логику сохранения и получения данных в БД
  • [опционально] Для сервисов auth и chat-server написать Dockerfile’ы
  • [опционально] Купить свой сервер в облаке
  • [опционально] Установить на сервер docker
  • [опционально] Создать свой registry в облаке
  • [опционально] Написать GitHub Actions для deploy сервисов в облако
  • [опционально] Создать несколько конфигурационных файлов для разных сред для обоих проектов
  • [опционально] Написать парсер конфигов для обоих проектов
  • [опционально] Создать отдельный докер файл мигратора и осуществить автоматическую накатку миграций при старте всех контейнеров

3 неделя - Архитектура проекта

  • Для сервисов auth и chat-server реализовать слоистую архитектуру handler-service-repo
  • Для обоих сервисов реализовать DI контейнер
  • Для обоих сервисов реализовать клиент к Postgres на спидах
  • [опционально] Добавить таблицу с логированием действий пользователя через API и важно, чтобы и операция и лог успешно выполнялись, иначе откатываем изменение.

4 неделя - Тестирование сервиса и создание платформенной библиотеки

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

5 неделя - Дополнительные опции экосистемы gRPC

Для любого из сервисов реализовать gateway

Для любого из сервисов реализовать proto-validation

Для любого из сервисов реализовать swagger и поднять его, как отдельный сервер

6 неделя - Безопасность сетевых взаимодействий между сервисами

  • В сервисе auth реализовать Auth API и Access API в соответствии с описанными контрактами

    Auth API

    • Login - ручка первичной авторизации
      • Request
        • string username
        • string password
      • Response
        • string refresh_token
    • GetRefreshToken - ручка получения нового refresh токена по предоставлению старого
      • Request
        • string old_refresh_token
      • Response
        • string refresh_token
    • GetAccessToken - ручка получения нового access токена по предоставлению refresh токена
      • Request
        • string refresh_token
      • Response
        • string access_token

Access API

  • Check - ручка проверки доступа у пользователя к ресурсу
    • Request
      • string endpoint_address
    • Response
      • empty
  • В сервисе chat-server реализовать серверный интерцептор, который делает запрос в auth (Access API) сервис с целью проверки токена пользователя и его доступа к запрашиваемому ресурсу

7 неделя - Мониторинг системы

  • Для любого из сервисов реализовать логгирование
  • Для любого из сервисов реализовать сбор метрик, разобранных в лекциях
  • Для любого из сервисов развернуть Prometheus в docker compose и поднять http сервер для сбора метрик
  • [опционально] Для любого из сервисов развернуть Grafana в docker compose
  • [опционально] Для любого из сервисов импортировать метрики из Prometheus в Grafana
  • [опционально] Для любого из сервисов развернуть Jaeger в docker compose
  • [опционально] Для любого из сервисов организовать сбор трейсов в приложении

8 неделя - Паттерны отказоусточивости приложения и потоковая обработка данных

  • Расширить Chat API стриминговой ручкой
    • Connect- ручка подключения к чату по его идентификатору
      • Request
        • int64 id
      • Response
        • stream Message msg (такие же поля что и в запросе ручки SendMessage)
  • Разработать клиентскую cli-утилиту для общения в чате через сервер
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment