Распределенная среда разработки Tencent Interactive Entertainment с открытым исходным кодом Pebble

сервер API игра Тенсент
автор:Хань Вэй

Построение гальки игрового мира

Видение: Отличный низкоуровневый фреймворк на стороне игрового сервера.

В современных игровых проектах, чтобы позволить большему количеству игроков играть вместе, на игровом сервере должно размещаться все больше и больше онлайн-игроков. В то же время, чтобы сделать игру более увлекательной, на игровом сервере необходимо запускать все более сложную бизнес-логику. Поэтому становится все более и более необходимым иметь базовую структуру, которая была бы гибкой и масштабируемой и с помощью которой можно было бы легко создавать кластеры серверов. Таким образом, программисты игр могут сосредоточиться на написании забавной игровой логики, не беспокоясь о нагрузке на сервер.

Галька означает «краеугольный камень». Наша цель при разработке этого фреймворка — надеяться, что он будет сильным и надежным, сыграет роль базовой фреймворка для разработки и станет базовым кодом для игровых серверов. Компания Pebble родилась в государственном центре исследований и разработок отдела исследований и разработок игр Tencent, который на протяжении многих лет обеспечивал игры Tencent базовой технологией и сервисной поддержкой. От игр для ПК и веб-игр до мобильных игр и телевизионных игр эта команда всегда была в авангарде технологий разработки игр. Продукт Pebble — это воплощение их многолетнего опыта в области технологий разработки игр и опыта поддержки игр.

Ценности: простота использования, гибкость, облако

В начале проектирования Pebble основное внимание уделялось трем точкам: простота использования, гибкость, облачные характеристики. Чтобы позволить большему количеству команд разработчиков игр легко создавать игровой сервер, Pebble тщательно измерил различные функции, упростил набор библиотек функций в наиболее часто используемом диапазоне игровых серверов и сделал этот код зависящим только от системы Linux, он может быть запущенным. В то же время сама библиотека Pebble представляет собой многоуровневый SDK.Команда разработчиков может использовать полные функции Pebble для быстрой разработки игрового сервера или только извлечь характерную базовую библиотеку для улучшения собственной программы игрового сервера. Для того, чтобы игровой сервер действительно стал облаком PaaS, Pebble также подготовила полное решение для управления кластером в кодовой базе, которое может легко создать игровой сервер на любом облачном сервере IaaS. Кроме того, Pebble также может идеально интегрировать решение Tencent Cloud «Game Cloud», позволяя подключать любой игровой сервер к облаку одним щелчком мыши, устраняя все процессы установки, развертывания и планирования ресурсов, а также используя полную статистику и услуги мониторинга.

бизнес-характеристики

Рабочая среда:

  • Pebble работает в системе Linux и выпускается в виде статической библиотеки C++ + заголовочный файл;
  • Поддержка клиентского движка: Unity3D (библиотека C#), Cocos2d-x (библиотека C++);
  • Pebble предоставляет каталог проекта проекта шаблона, а также инструмент сборки «blade», который заменяет традиционный make. (Этот инструмент упрощает утомительный процесс написания Makefile в прошлом. Но вы по-прежнему можете использовать make или любой другой инструмент компиляции для создания проектов, использующих Pebble, поскольку файлы статической библиотеки и заголовочные файлы являются стандартными.)

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

  • Pebble поддерживает взаимодействие «клиент-сервер» и «сервер-сервер». Пользователи могут использовать библиотеку, предоставляемую Pebble, для простой реализации связи между мобильным клиентом и серверным процессом Linux; в то же время библиотеку Pebble также можно использовать для простой реализации функции связи между серверными процессами Linux. Сам Pebble может одновременно поддерживать несколько протоколов передачи и протоколов кодирования, включая TCP и HTTP для передачи, Binary и JSON для кодирования, и пользователи также могут настраивать расширенные поддерживаемые протоколы.
  • Интерфейс коммуникационной функции представлен в виде RPC: пользователь пишет IDL-файл функции [~тот же формат, что и у знаменитого программного обеспечения с открытым исходным кодом Thrift от Facebook], определяет функцию и параметры функции, а Pebble отвечает за построение базовый коммуникационный код для этой функции. Пользователю нужно только вызвать автоматически сгенерированную функцию «код-заглушка», удаленная функция «скелетного кода» будет автоматически вызвана, а возвращаемое значение будет автоматически возвращено вызывающей стороне. Пользователям нужно только заполнить шаблонную вакансию функции «скелетный код», чтобы реализовать нужные им функции.
  • В дополнение к стандартной модели «запрос-ответ» Pebble RPC также поддерживает «односторонний RPC». Кроме того, Pebble также поддерживает возможность широковещательной связи: пользователям нужно только зарегистрировать на мобильном телефоне (или на сервере) скелетную функцию «обратного RPC» в качестве функции обработки для получения уведомлений, и они могут отправлять любое количество сообщений с Сервер Linux на любое количество комбинированных терминалов (включая мобильные телефоны и серверы) передает данные. Целью вещания является использование API, предоставляемого Pebble, для управления подканалами. Эти данные канала автоматически распределяются между кластером, поэтому вы можете использовать весь кластер серверов Pebble для функций вещания без одновременного подключения всех мобильных клиентов к определенному серверу для вещания.

Асинхронные фреймворки и сопрограммы

  • Сам Pebble представляет собой асинхронную однопроцессную среду, которая может обеспечить очень высокую производительность обработки, а также может значительно упростить проблему параллельного обмена данными в сложной бизнес-логике. Поэтому, когда пользователи используют Pebble, также рекомендуется использовать асинхронный способ разработки бизнес-логики. Чтобы поддерживать асинхронный режим разработки, Pebble сам предоставляет несколько общих интерфейсов обработки сигналов, таких как запуск, перезагрузка данных и остановка сервисов, а также предоставляет API-интерфейсы таймера для коммерческого использования.
  • Хотя асинхронный код имеет преимущества в производительности, читабельность кода часто хуже, чем у синхронного кода, поскольку полный бизнес-процесс может быть разделен на несколько разных кодов асинхронного обратного вызова, которые трудно прочитать при чтении кода. впечатление. Итак, Pebble вводит возможность сопрограмм: каждая RPC-обработка пользователя автоматически создает сопрограмму. Другими словами, пользователи могут использовать оператор Yiled() для переключения в любое время при написании содержимого «скелетного кода» RPC, а затем использовать Resume() для обратного переключения после завершения асинхронной обработки. Таким образом, бизнес-логика, которая должна пройти многократную асинхронную обработку, может быть полностью записана в одной и той же функции. Помимо использования сопрограмм в RPC, функция обратного вызова таймера также создает отдельную сопрограмму для использования в бизнес-коде.
  • IDL, предоставляемый Pebble, — это не просто язык описания для генерации RPC-кода, он также позволяет пользователям расширять его функциональность в виде «аннотаций». Пользователь может только определять различные функции и элементы конфигурации объекта и записывать их в IDL с синтаксисом «аннотации», а затем эта уникальная логика будет вызывать некоторый пользовательский код в рамках синтаксиса «аннотации», таким образом генерировать постоянно меняющиеся возможности. Например, вы можете использовать функцию аннотаций для реализации некоторой специальной инициализации или записи объектов данных на определенные устройства хранения и т. д.
  • Фреймворк Pebble, как и обычный фреймворк, также предоставляет несколько полезных разнообразных функций: чтение конфигурации из INI-файлов, переопределение этих конфигураций параметрами командной строки или системными переменными, предоставление практических ежедневных функций конфигурации и печати, установка номера версии процесса и т. д.

Кэширование и сохранение данных

  • Одной из характеристик развития игрового бизнеса является наличие большого количества сложных структур бизнес-данных. Эти структуры данных часто требуют постоянной модификации в процессе разработки и эксплуатации игр. В то же время данные в этих структурах обычно необходимо передавать между клиентом и сервером, затем кэшировать и обрабатывать на сервере и, наконец, записывать обратно (сохранять) в базу данных. Чтобы упростить этот процесс, Pebble предоставляет полный набор функциональных API-интерфейсов, позволяющих пользователям полностью решать проблемы связи, кэширования и сохраняемости за один раз.
  • Pebble предоставляет интерфейс, аналогичный std::map, позволяющий буферизовать определенные пользователем структуры данных в пуле объектов с помощью put/get. Этот пул объектов является общим для всего кластера, то есть любой процесс, помещенный в объект, может получить этот объект другим процессам.
  • Чтобы повысить производительность, пул кэша объектов Pebble способен к «локальному кэшированию», то есть, если вы продолжаете помещать/получать объект в процессе, объект фактически кэшируется в памяти локальной машины. производительность чтения и записи кэша объектов для удовлетворения очень высоких требований. Проблема синхронизации объектов между несколькими машинами решается самим Pebble по принципу эвентуальной согласованности.
  • Чтобы упростить сохранение объекта в базе данных, Pebble предоставляет встроенные операции для записи объектов в базы данных MySQL и хранилище Redis. Вам нужно только вызвать функцию Save(), чтобы завершить операцию сохранения; и вы также можете установить операцию сохранения для автоматической обратной записи. Связь между полями объектов и постоянными структурами таблиц устройств не требует от пользователей написания кода SQL, но может быть выполнена путем простого "аннотирования" IDL. Pebble также поддерживает сохранение объектов в облаке tcaplus, более мощном профессиональном устройстве для хранения игр, производимом Tencent. Наконец, если вам необходимо поддерживать другие устройства постоянного хранения, вы можете использовать API постоянного интерфейса, предоставляемый Pebble, для самостоятельной записи операций хранения и чтения; вы также можете использовать возможности аннотаций IDL для определения отношений между объектами и постоянными структурами. связанный код выполнения.

Особенности кластера

Три режима работы

  • Поскольку Pebble предназначен для создания крупномасштабных кластеров игровых серверов, он обладает широкими возможностями кластеризации. В то же время, учитывая, что в процессе разработки и тестирования играм часто требуется быстро собрать несколько небольших серверов, Pebble также стремится упростить самостоятельное развертывание серверов. Поэтому Pebble разработал характеристики кластера трех моделей: одиночный сервер (автономный), кластер (кластер), облако (облако).
  • Режим одного сервера: используется для разработки игр и функционального тестирования. В этой модели игровой сервер предназначен для работы независимо от какого-либо программного обеспечения или службы. Просто позвольте вашей программе скомпилироваться и пройти проверку, и вы сможете протестировать ее напрямую, даже не подключаясь к базе данных. Pebble в этом режиме полностью функционален, поэтому вам не нужно беспокоиться об изменении кода позже при переключении режимов. В этом режиме игровой сервер ограничен одним процессом, и вы можете скопировать весь файл среды выполнения и связанные с ним каталоги для запуска в любой системе Linux.
  • Кластерный режим: сервисный процесс, написанный платформой Pebble, можно легко развернуть в виде кластера. Узлы в этом кластере имеют возможности балансировки нагрузки, автоматического аварийного восстановления и динамического расширения емкости. Самые сложные проблемы в этих кластерных системах можно решить, не написав ни строчки кода. Вам нужно только просто использовать предыдущий код в режиме одного сервера, затем изменить параметры командной строки (или файлы конфигурации) для запуска и, наконец, запустить несколько процессов фонового мониторинга.
  • Облачный режим: в кластерном режиме Pebble может выполнять большинство массовых задач. Но если вам также необходимо более оптимально использовать аппаратные ресурсы, вам следует использовать облачный режим. Облачная модель Pebble может предоставить вам возможность изолировать и динамически настраивать ресурсы в кластере, позволяя использовать ресурсы сервера с максимальной эффективностью. В то же время поставщик облачных услуг также предоставляет полную статистику и систему мониторинга в веб-интерфейсе, которая может отслеживать работу всего облака служб в режиме реального времени.

Модель одноранговой сети:
В кластере Pebble есть два типа процессов: один — это процесс «центр кластера», который отвечает за управление и хранение состояния выполнения всего кластера.Этот тип процесса управляется ZooKeeper и не требует разработки пользователем; другой — «сервисный процесс», эти процессы отвечают за выполнение бизнес-функций, и эти процессы разрабатываются и компилируются пользователями с использованием библиотеки Pebble. Все «сервисные процессы» следуют простейшей логике взаимодействия: каждый процесс является одноранговым, и они сообщают о своем состоянии в центр кластера. Когда запрос инициирует запрос, он сначала получает конкретный адрес целевого процесса из «центра кластера», а затем инициирует запрос. Таким образом, кластеры Pebble имеют очень заметные преимущества: развертывание очень простое — каждому процессу нужно только настроить свой собственный служебный порт и настроить «центральный адрес», представляющий кластер. После настройки этих двух адресов можно формировать кластеры любого размера и сложности. Кроме того, благодаря наличию «кластерного центра» из него также можно в режиме реального времени считывать состояние всего кластера и использовать эту информацию для разработки собственной системы мониторинга и управления кластером. Pebble разрабатывает для вас систему управления кластером и предоставляет соответствующий API «управления услугами».

Возможности масштабирования на основе маршрутизации услуг:
Функции серверного кода инкапсулированы Pebble в понятие «сервис», поэтому масштабируемость сервера также масштабируется в соответствии с целью запроса «сервиса». Проще говоря, «сервисы» Pebble могут работать на нескольких серверах, и увеличение или уменьшение количества этих серверов не влияет на предоставление «сервисов». Основной метод реализации заключается в том, что кластер Pebble направляет запрос на обслуживание: выбирает те узлы кластера (серверы), которые доступны и соответствуют правилам бизнес-бронирования, чтобы ответить на запрос. Этот процесс полностью автоматический, вы можете убить любой служебный процесс в кластере Pebble, и запрос на обслуживание не будет отправлен сбойному процессу; вы можете просто запустить служебный процесс Pebble, и он автоматически присоединится к нужному вам кластеру, и вскоре этому вновь присоединившемуся процессу будут отправлены запросы на обслуживание. Кроме того, при выборе нескольких сервисных узлов, если у бизнес-функции есть какие-то специфические требования, такие как хеширование в соответствии с определенным значением, Pebble также может его поддерживать.Ему нужно только отправить значение, которое необходимо хешировать, когда сервис запрос сделан. Просто введите запрос API. Это значительно упрощает утомительный процесс синхронизации состояния узлов онлайн-сервиса в прошлом, затем расчет конкретных правил бизнес-маршрутизации и, наконец, запрос услуг.

независимые от государства услуги
В кластере серверов самые сложные проблемы с масштабируемостью и аварийным восстановлением возникают на сервисных узлах с отслеживанием состояния. Поскольку данные о состоянии могут быть потеряны во время масштабирования и аварийного восстановления, требуется много кода для синхронизации, посадки и управления кэшем. Эти коды неоднократно разрабатываются в большом количестве сервисных кластеров, что приводит к большому количеству человеческих отходов. Решение Pebble для данных о состоянии службы состоит в том, чтобы «сделать процесс службы как можно более независимым от состояния». Pebble предоставляет стандартный интерфейс хранения состояния для сервисных процессов кластера, позволяя пользователям размещать данные о состоянии в Pebble, так что пользователям не нужно самостоятельно поддерживать сложную достоверность состояния и масштабируемость. Этот интерфейс данных управляемого состояния очень прост в использовании, это интерфейс карты stl, но эта карта является картой распределенного хранилища, она устанавливает кеш памяти (доступную общую память) локально в вызывающем объекте, а затем, когда данные потребуются быть изменены, автоматически приземляться (сохраняться) на устройство хранения при охлаждении и других условиях; когда несколько сервисных узлов совместно используют запись, функция синхронизации данных выполняется автоматически. Pebble может обеспечить настройку данных и переключение между конечной согласованностью, слабой согласованностью и строгой согласованностью, тем самым обеспечивая различные результаты производительности.
Сила поднимающихся облаков

Tencent Cloud: распределенная вычислительная платформа
Pebble — это сервисная платформа, способная создавать облака PaaS. Поэтому мы создали распределенную вычислительную платформу, которая может размещать кластеры Pebble на базе базовой IaaS от Tencent Cloud. Эта платформа может предоставлять такие возможности, как развертывание сервисов, закупка и изоляция ресурсов, статистический мониторинг, автоматическое аварийное восстановление и интеллектуальное масштабирование кластеров Pebble. Проще говоря, вы можете просто загрузить свой сервисный код Pebble, а затем все проектирование емкости, закупка оборудования, развертывание и мониторинг выполняются распределенной вычислительной платформой Tencent Cloud. Почти все операции по технической эксплуатации и обслуживанию, включая расширение и сокращение мощностей, восстановление после сбоев и балансировку нагрузки, не должны выполняться пользователями, но вы по-прежнему можете детально отслеживать эти события и последствия, а также вмешиваться и настроить эти автоматизированные стратегии.

Мониторинг эксплуатации и технического обслуживания WEB-инструменты и службы журналов
Как структура облачных служб, она должна придавать большое значение операциям по эксплуатации и техническому обслуживанию, а также мониторингу состояния. Поскольку Pebble представляет собой инфраструктуру службы, она может собирать очень подробную информацию, включая процент успешных вызовов, задержку, дерево путей зависимостей и т. д. для каждой службы. Он также может предоставить подробные политики аварийных сигналов, основанные на подробной информации из этих динамических статистических данных. Для устранения неполадок в процессе эксплуатации также доступны подробные записи и полевая информация. Все эти операции представлены в облаке Tencent Cloud с красивым веб-интерфейсом; в то же время он также предоставляет богатые интерфейсы управления RESTful, позволяющие пользователям настраивать свои собственные специальные инструменты для работы и обслуживания. В дополнение к мониторингу текущей информации о состоянии, структура журнала, предоставляемая самой Pebble, может быть подключена к платформе статистики распределенных журналов игр Tencent Cloud.Эта платформа статистики может использовать большое количество серверов для параллельных вычислений, чтобы подсчитывать и извлекать все из большого количество журналов для вас информация, которую вы хотите.

Автоматическое эластичное масштабирование
Поскольку это распределенный сервисный кластер, его эксплуатация и техническое обслуживание, как правило, очень сложны. Тысячи серверов работают одновременно, аппаратные и сетевые сбои являются обычным явлением; количество пользователей в бизнесе сильно колеблется, а рабочая нагрузка по добыче и переработке ресурсов также огромна; содержание продукта быстро меняется, версии обновляются, и часто развертываются новые операционные среды — для работы с «Все» требуется профессиональная команда по эксплуатации и техническому обслуживанию. Однако если вы используете платформу Pebble и работаете на распределенной вычислительной платформе Tencent Cloud, вышеуказанные сложные задачи будут выполняться опытными командами Tencent Cloud и автоматизированными программами. Все, что вам нужно сделать, это загрузить свою программу один раз, а затем активировать услугу. Когда объем трафика в бизнесе невелик, платформа распределенных вычислений будет выделять меньше ресурсов для работы, чтобы помочь вам сократить расходы; когда объем трафика в бизнесе быстро растет, платформа автоматически выделяет достаточно ресурсов для удовлетворения новых запросов, это расширение процесс полностью автоматизирован; если объем вашего бизнеса упадет, платформа разумно сократит операционные ресурсы и уменьшит ваши накладные расходы — это возможность автоматизировать эластичное масштабирование облака.

Pebble Framework Отдел исследований и разработок Tencent Interactive Entertainment Group (IEG), обладающий многолетним опытом поддержки игр Tencent, разработал общую структуру разработки игровых серверов. Использование этого фреймворка очень легко освоить, и он может выполнять все основные функции на стороне игрового сервера в среде практически без зависимостей; в то же время он также имеет возможность создать распределенный кластер с большой нагрузкой без изменение кода бизнес-логики, наконец, эта структура также может взаимодействовать с распределенной вычислительной платформой Tencent Cloud для обеспечения автоматической работы и обслуживания, богатого мониторинга операций и обслуживания и статистики журналов, а также интеллектуального эластичного масштабирования ресурсов.

Адрес открытого исходного кода этого проекта:GitHub.com/Tencent/PE доска…

Эта статья взята из публичного аккаунта Han Da WeChat.

Связанное Чтение

Создание распределенного хранилища ключей и значений с помощью Rust

Практика работы с распределенной базой данных Tencent Cloud

Изучение механизма высокой доступности Hadoop

Эта статья была разрешена автором для публикации в сообществе Tencent Cloud Technology Community, укажите это при перепечатке.первоисточник

Исходная ссылка: https://cloud.tencent.com/community/article/614135?utm_source=jueji


Огромный технический практический опыт, все вОблачное сообщество Tencent