LGTM (40 частей серии)
Далее в наших технических решениях мы должны принять, как и где мы принимаем эту вещь? Мы установили несколько вещей, которые окрашивают наше решение:
- Нам нужно получить GitHub Webhooks, так как мы должны быть уведомлены о вилках.
- Нам нужно опросить API уведомлений GitHub, чтобы получить информацию о том, когда возникают комментарии и другие вещи
- Нам нужно где -нибудь запустить наш игровой код, и это, вероятно, будет в Python
- Мы должны отслеживать выполнение задач пользователя, поэтому Требуется база данных
У меня тоже было гораздо больше мыслей, о которых я не написал, но имею последствия технической реализации:
- GitHub API имеет квоты использования, и может потерпеть неудачу, если мы попытаемся сделать слишком много вещей одновременно. Это означает, что нам нужен наш код для обработки повторных переписей.
- Для реализма мы можем захотеть запланировать вещи на таймере. На самом деле, вообще не очень важно что-то в режиме реального времени. Когда игрок подает результат, нам нужно только реагировать в течение нескольких десятков секунд. Это значительно упрощает требования
У меня уже есть сильные предпочтения Google Cloud, в основном из -за знакомства. Это чувствует Как Google Firebase будет работать очень хорошо: у нее есть облачные функции, которые могут получать веб -крючки, если не запускать весь наш стек игры; Firestore является подходящей базой данных для хранения наших игровых данных; И, кроме того, хостинг будет здорово запустить веб -сайт (который показывает статистику и прочее), и мы можем также использовать службу автозаправления для управления учетными записями пользователей (даже если регистрация не будет традиционным делом по электронной почте/пароля) Анкет
Для требований очереди задач может показаться, что облачные задачи Google будут выполнены для работы и, по-видимому, хорошо работают с Firebase и являются необходимым предварительным условием для разрешения запланированных задач (что, вероятно, потребуется для контроля опроса уведомлений API)
Поэтому наш технический стек:
- Функции Firebase (работающий Python)
- Firebase Auth
- Firestore
- Облачные задачи
Все это вместе означает, что я смогу построить игру без сервера!
Имея это в виду, архитектура выглядит примерно так:
Причина разделения бэкэнда игры на микросервисы заключается в том, что работа прекрасно разбита, а также дает нам большую гибкость в прикреплении других услуг. Например, я мог бы однажды добавить дополнительный набор приемников WebHook и диспетчеров для Gitlab:
А также, эти диаграммы не являются полной картиной, я уже могу представить себе много других вещей, которые необходимо добавить – база данных для игровых данных и учетных записей игрока; интернационализация; и веб -сайт для игрока, чтобы посмотреть на их статистику и детали и сделать другие вещи с их учетной записью, которые мы не можем через интерфейс GIT/GitHub; и OAuth, чтобы позволить игрокам войти в веб -интерфейс. Список можно продолжить, и полная диаграмма может быть еще более сложной, чем эта:
Я думаю, что это хорошее место для принятия технических и архитектурных решений. Мы можем начать работать с этим, что мы будем вкладывать вещи на Firebase
LGTM (40 частей серии)
Оригинал: “https://dev.to/meseta/lgtm-devlog-5-technical-decisions-serverless-architecture-5e7f”