Технический стек станции Тау

Люди спрашивали о нашем технологическом стеке, поэтому этот пост будет немного «технологичным». Кроме того, он будет увереннасыщенным технологиями. Вас предупредили!
Когда я запускал Tau Station, я знал, что мне в первую очередь нужна надежная веб-инфраструктура, гибкий ORM (объектно-реляционный преобразователь) и надежная база данных. Из-за того, что я активно занимался открытым исходным кодом в течение многих лет, рассматривались только продукты с открытым исходным кодом.

Бэкэнд

Что касается языка программирования, то я с самого начала был уверен, что это будет Perl 5. Я программировал на нескольких языках, и, честно говоря, у меня возник соблазн запустить Tau Station на другом языке только для того, чтобы веселье. Однако я знал, что хочу, чтобы Tau Station была успешной, а не просто экспериментом, поэтому я решил использовать Perl и все мощные и потрясающие инструменты, которые с ним поставляются. В настоящее время мы ориентируемся на Perl 5 версии 24, которая была выпущена в мае 2016 года. Каждые 12–13 месяцев выпускаются новые версии Perl 5, и мы с нетерпением ожидаем некоторых новых функций, поэтому мы ожидаем обновления. вскоре.

Я выбрал Catalyst из-за мощного веб-фреймворка, основанного на паттерне MVC (модель-представление-контроллер). Template Toolkit был выбран для управления шаблонами HTML, а DBIx::Class — для ORM (объектно-реляционного отображения), которое мы будем использовать в нашей модели. Эта комбинация позволяет невероятно быстро развиваться. Если нам нужно изменить базу данных, мы просто запускаем DBIX::Class::Schema::Loader, и он перестраивает для нас большую часть кода нашей модели вместо утомительного и подверженного ошибкам ручного обновления ORM для соответствия модель данных. На самом деле, загрузчик схемы настолько мощный, что выявляет для нас недостатки проектирования базы данных.

Помимо великолепных библиотек, доступных в Perl, большинство из которых доступны на CPAN, Perl существует достаточно долго, чтобы иметь фантастическое сообщество. Мы рады, что привлекли отличную команду очень талантливых разработчиков с разным опытом и огромным опытом. В результате миссии Tau Station разнообразны, геймплей продуман, а сам код доставляет удовольствие.

И если говорить о коде, то все это было без упоминания самого языка Perl. Еще в 1990-х годах он был настолько популярен, что его называли изоляционной лентой Интернета. Это отличный язык, очень гибкий и достаточно мощный, чтобы сделать простые вещи простыми, а сложные возможными. Мне нравится называть Perl проверенным в бою. Как сказал нам один из наших клиентов All Around The World, когда они попросили нас построить новую систему на Perl, мы устали от ажиотажа. Perl — сильная рабочая лошадка, которая продолжает работать без каких-либо жалоб. Он не такой яркий, как JavaScript-фреймворк недели, но мы считаем это одной из его сильных сторон.

База данных

Что касается базы данных, то в первую очередь речь шла о сравнении MySQL с PostgreSQL, и, честно говоря, когда у вас есть серьезные потребности в базе данных, PostgreSQL превосходит MySQL безоговорочно. В хорошую базу данных по-прежнему легко вставлять неправильные данные (например, имя с ошибкой), но очень трудно вставлять неверные данные (например, элемент с отрицательным масса). В PostgreSQL у нас есть настраиваемые типы данных, полезные ограничения проверки и исправные триггеры — все то, чего в MySQL не хватало годами. Кроме того, как часть нашей работы по разработке базы данных, нам нужен DDL (язык определения данных) для отката в случае сбоя транзакций, чего MySQL не предлагает (любопытно, что Oracle тоже не предлагает). На самом деле, PostgreSQL предлагает множество вещей, которых нет в MySQL. Компромисс заключается в том, что PostgreSQL сложнее администрировать, но мы считаем, что целостность данных того стоит.

Передняя часть

Это та часть, которая удивит несколько «современных» типов. Мы используем немного jQuery и немного пользовательского JavaScript, но это все. На самом деле, хотя существует множество современных веб-фреймворков, которые могли бы дать нам некоторые инструменты, которые мы искали, все они так или иначе потерпели неудачу.

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

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

Большинство современных фреймворков JavaScript либо игнорируют специальные возможности, либо предлагают ограниченную поддержку. Мы действительно пытались использовать фреймворк JavaScript на раннем этапе, но потратили так много времени на устранение его отсутствия доступности или поддержки прогрессивного улучшения, что это было больше проблем, чем пользы. Так что разработка внешнего интерфейса занимает немного больше времени, но мы считаем, что это правильно.

Разное

Есть, конечно, множество других технологий. Мы пытались обеспечить, чтобы программное обеспечение можно было запускать практически в любой операционной системе, но Microsoft Windows не поддерживает модель fork-exec запуска подпроцессов, поэтому, как мы ни старались, наш единственный разработчик, работавший над Windows, обнаружил что он не мог заставить его работать. К счастью, игра работает в веб-браузере, так что это внутренняя проблема, которую игроки никогда не заметят.

Мы используем Redis для кэширования, потому что Redis чертовски быстр и просто великолепен. По тем же причинам для веб-сервера был выбран Nginx. Fluentd — это наш уровень ведения журнала из-за его невероятной гибкости и того факта, что у нас очень большие потребности в ведении журнала (это обычная проблема с MMORPG: вы должны знать, что делают ваши игроки). Большинство наших потребностей в переносе базы данных обрабатывается sqitch, но нам пришлось выполнить некоторые специальные действия, потому что, как и многие инструменты миграции баз данных, sqitch лучше работает с DDL, чем с DML, и у нас есть большие объемы игровых данных. . Мы также используем Markdown для форматирования сообщений игроков и блогов, Plack в качестве прекрасного промежуточного слоя между приложением и веб-сервером и множество других инструментов.

Последнее слово

Таков наш технический стек, более или менее. Меня спрашивали «почему бы не C++» или какой-нибудь другой, более быстрый язык. Многие MMORPG написаны на C++ с использованием Python или Lua в качестве языка сценариев. Однако причина, по которой они используют C++, обычно заключается в том, что это графические MMORPG. Нам не нужно что-то вроде Unreal Engine или Unity. На самом деле причина, по которой динамические языки, такие как Perl, так популярны для веб-сайтов, заключается в том, что узкими местами в производительности веб-сайтов часто являются ввод-вывод (база данных) или задержка в сети. В тех случаях, когда мы обнаруживаем, что привязаны к процессору, мы подключаем к проблеме больше серверов.

На самом деле, наша основная проблема с Tau Station заключается в том, что игра «тяжело записывает» в базу данных. Это менее характерно для веб-сайтов, поэтому мы ожидаем, что большая часть проблем с производительностью будет связана с базой данных. Учитывая, что многие веб-сайты с очень высокой посещаемостью работают на Perl, мы не беспокоимся о его производительности. C++ просто замедлил бы время разработки без явного выигрыша.

Первоначально опубликовано на taustation.space 26 августа 2016 г.