yivgame
Yivgame-это решение для сервера архитектуры микросервиса, написанное на языке GO на основе GO-KIT. В дополнение к игровому серверу (длинное подключение), он также включает в себя сервер интерфейса API для операций с фронтальной и задней частью. В дополнение к самому серверу, также будет задействована подробная конфигурация развертывания Docker.
характеристика
- Микросервисная архитектура
- Клиент и игровой сервер реализуют передачу через двунаправленную потоковую передачу GRPC
- Client Server Side WebSocket Communication
- Реализуйте HTTP -конечные точки и WebSocket Endpoints Weights and Logs
Практика дизайна
Микросервисная архитектура
- Через архитектуру микросервиса традиционные игровые серверы разделяются на разные микросервисы
- Различные микро серверы могут синхронно общаться через GRPC и асинхронно через кафку
Доменная модель
- Чтобы достичь развязки различных уровней программного обеспечения, каждая услуга разработана в соответствии с моделью, управляемой доменом.
- Разделите структуру программного обеспечения микросервисов изнутри на внешнюю часть на игровой бизнес, слой использования, уровень интерфейса и уровень зависимости объекта
- Строго соблюдать одностороннюю зависимость снаружи к внутренней части между различными уровнями
Бизнес -уровень в основном реализует основную логику игры или сервера, не заботится о внешних реализациях и зависит от файловых систем, баз данных и т. Д. их в основном через инъекцию зависимости. Поэтому, за исключением ссылки на некоторые основные стандартные библиотеки, бизнес-уровень практически не относится к сторонним пакетам.
Модель, управляемая событиями, с Kafka
- Основным методом связи между всей системой микросервиса является синхронный вызов GRPC и асинхронная связь событий с использованием Kafka в качестве потоковой платформы.
- Все виды деятельности, которые следуют в микросервисах, будут опубликованы в KAFKA в виде потребителей, сформированных с различными проблемами, будут подписаться на события
Модель, управляемая событиями и анализ данных
- В прошлом, когда они проводили анализ игровых данных, их искали через совместные таблицы.
- После использования модели, управляемой событиями, все поведение игроков, на которое мы обращаем внимание, могут быть записаны как события, разработать различные атрибуты для различных событий и добиться чрезвычайно масштабируемого анализа данных


Структура каталогов проектов
- Поскольку архитектура микросервиса, внедренная Go-Kit, постарайтесь как можно больше поддерживать ее в официальном примере Go-Kit в структуре каталогов.
- Поскольку модель, управляемая доменом, является нагрузкой, естественно включать в себя внутренний каталог пакетов в внешний слой при разработке структуры каталога проекта Структура каталогов На уровне домена, вместо этого каталог пакетов разных уровней помещается в каталог того же уровня.
Нет глобальных переменных
- Чтобы сделать программное обеспечение более ясным в логике кода, строго избегайте глобальных переменных
Кэш данных, хранение данных и кафка
- Следовательно, данные игрока напрямую хранятся в сервисной памяти, которая облегчает прямую обработку данных
- Модификация данных игрока записывается в Кафку через Wal, а затем служба хранения асинхронно записывается в базу данных.
- Поскольку метод WAL используется, REDO и отмену данных игрока легко реализовать
Newsql Tackroachdb
- Постоянство данных использует Tackroachdb, реляционную базу данных, которая поддерживает распределенные транзакции
- Использование Tackroachdb может легко достичь горизонтального масштабирования, устойчивости к разлому, автоматического восстановления и балансировки нагрузки
Я начал использовать Tackroachdb от V1.0, от V1.0 до V1.0.6, Tackroachdb всегда имела проблему с аварией в определенных ситуациях и давлении. не было большим. Поскольку почти все данные yivgame находятся в памяти, и только БД должен быть записан при сохранении, поэтому для всей системы yivgame нет узких мест производительности БД.
Модель
Диаграмма связи

- Метод связи
- HTTP: HTTP - это короткое соединение, в основном используемое для связи в системе фоновой работы.
- WebSocket: клиент разработан с использованием Cocos Creator, а связь с длинными соединениями поддерживает WebSocket.
- GRPC: На основе протокола HTTP/2 GRPC он может реализовать многоцелевую связь на подключении к сокетам.
- Формат данных
- JSON: Благодаря самоуничижительной интерпретации формата JSON он в основном используется для обмена данными между короткими соединениями и бэкэнд-операционными интерфейсами в игре.
- Protobuf: в основном используется для обмена данными между клиентом и сервером WebSocket и Micro-Service
Сервисная компонентная диаграмма

- Агент: в основном используется для клиента. и легко расширять горизонтально
- USCERTER: Все данные игрока управляются в центре пользователей, а пользовательский центр отвечает за чтение, написание, удаление, изменение и проверку игровых данных. Полем
- Game Server: в основном ответственность за обработку бизнес -логики Game
Аутентификация и аутентификация личности

- Используйте JWT для аутентификации между службами
- Одиночный вход через API Gateway
- Сделайте аутентификацию по всему миру и разрешение в каждом микросервисе
Зависимость объектов
- Docker: Все средства зависимости и игровые экземпляры развернуты через версию сообщества Docker
- RockCoach: как постоянная база данных
- Кафка: как очередь и потоковая платформа сообщений
- etcd: для обнаружения услуг
- Gogs: используйте Gogs для управления версиями
- Bind9: Сервер доменных имен, беспрепятственное переключение сети разработки и тестирования с помощью разрешения имен переключения доменов.
Go-Kit Generator
- yiv/gk: Go-Kit Generator-это ручная электронная среда. Чтобы написать интерфейс службы, каждый должен написать полный набор конечных точек, набор и транспортировки. Вы чувствуете, что вы выполняете повторяющуюся работу и очень склонны к ошибкам. Еще не было идеальным, и это не было полностью применимо для меня, поэтому я разбил его и изменил его и передал его автоматически код, который может уменьшить дублированный код на 60% при написании интерфейсов услуг. вероятность ошибок.
Системная среда
обратиться к
- GONET/2: yivgame поглотил много конструкций из гонета, таких как использование потока для прозрачной передачи, внедрение кафки и т. Д.
- go-kit: yivgame разработан на основе go-kit
- Бодд: образец приложения, основанного на доменной модели, написанной в Go
- Практическая настойчивость в GO: Организация доступа к базе данных
- Чистая архитектура
- Применение чистой архитектуры для применений
- Пост, чтобы понять иерархическую структуру
Некоторые мысли о дизайне
- Сложность системы только сдвинутся и не исчезнет. Имеет преимущество Go-KIT, что он не выглядит так просто и напрямую отражает цели в коде.
- Go-Kit не подходит для простых в использовании, коротких, плоских и быстрых целях. Помогает логическая развязка.
- Go-Kit начинается с интерфейса сервиса, начинается с сосредоточения внимания на сферах бизнеса, HTTP или GRPC-это просто способ опубликовать его во внешний мир, и в конце концов.
- Не используйте свободу письма, но свобода адаптации программного обеспечения не бесплатно, потому что он определяет результат, что услуги, написанные с использованием всех, выглядят одинаково. Это так удивительно, что код написан как картина, и его можно собрать и запустить.
- Кодек и передача введенных микросервисных вызовов составляет около 2 миллисекунд, а внутренняя задержка взаимной пинга обычно составляет 40 мс.
- Будь то рамки или язык, это просто инструменты if the tools are the best, they will be bad if they are not used well. The key is to learn and master the essence of their design so that they can never leave their essence.