Здравствуйте.
Я являюсь одним из основателей JMaNGOS — Open Source проекта, который в принципе бесполезен как продукт (исключая варианты его не правомерного использования), но полезен как проект для самостоятельного (и не только) образования во всех сферах IT, которые так или иначе связаны с Java. Потому, продуктом данного проекта я предлагаю считать знания, которые из него можно получить. И сегодня я хотел бы поделиться с вами частью накопленного опыта.
Agenda:
- History back view
- Why Java?
- Goals
- Infrastructure
Небольшая историческая сноска
Проект был основан под влиянием двух эмуляторов MMORPG сервера World of Warcraft — MaNGOS и TrinityCore. Второй является форком первого, оба — С++. Когда-то давно я поочередно был вовлечен в оба проекта. С тех пор прошло более двух лет и играми я более не увлекаюсь. Но ностальгия, дух былого времени все еще жив во мне. Потому, когда я решил основать проект-песочницу, в котором можно было бы свободно включить поток фантазии и творить без ограничений в том направлении, которое в данный момент интересно — выбор был очевиден. Я хотел создать нечто под лицензией GNU/GPL, где люди могли бы делиться знаниями друг с другом, где методом проб и ошибок можно учиться на своем и чужом опыте. Название проекта родилось из названия MaNGOS — Massive Network Game Object Server, только впереди буква J как-бы намекает на Java. Но мы вовсе не переписываем C++ код MaNGOS на Java, как многие решили после нашего появления. Все-же, вернемся к истории. Первым делом я пошел на любимое русскоязычное комьюнити MaNGOS, надеясь найти единомышленников. К сожалеию обнаружил, что за годы моего отсутствия комьюнити заметно опустело. Какого же было мое удивление и радость, когда в дебрях форума я обнаружил, что в одном из топиков целых два человека уже начали заниматься тем, что я задумал! Правда, у них были разные проекты, они работали параллельно, просто общаясь друг с другом. Первый проект назывался StormCore, второй назывался… JMaNGOS. В принципе — не удивительно, что два человека независимо друг от друга и не зная друг друга придумали это название — оно так и напрашивалось. Мне удалось объеденить нас троих в один проект, и теперь мы занимаемся одним делом.
Прежде всего отвечу на немой вопрос: почему-же Java?
Не для кого не секрет, что Java — один из самых популярных выборов таких корпораций, как HP. Преимущества скорости разработки, скорости развертывания, большого количества готовых решений, и кросс-платформенности очевидны. Не буду убеждать вас в том, что Java — это действительно круто, и что легенды тормознутости JVM — лишь легенды, что server-side это один из основных профилей Java, все это к сути топика это не имеет ни малейшего отношения, потому в контексте эта фраза — лишь мое личное мнение. Просто факт есть факт — программисты Java одни из самых востребованных на рынке труда, потому мы с вами хотим учится именно в этом направлении, потому мир JMaNGOS будет вращаться именно вокруг Java. Но затрагиваться будут не только темы написания кода на Java, но и более абстрактные вещи, которые могут быть использованы и за пределами Java. Например: менеджмент проекта в стиле энтерпрайз, CI, английский, тестирование (QA) и многое другое.
Цели
Как у любого проекта, у нас есть цели, долгосрочные и на ближайшее время. Для начала то, что мы хотим сделать по-другому, анализируя опыт MaNGOS и TrinityCore:
- Реализовать распределенную архитектуру, ориентированную на облака
- Максимально упростить систему сборки, развертывания и обновления сервера
- Разработать новую модель хранения данных (кто в курсе — база мира должна быть лишь статическим ресурсом)
- Всякого рода тестирование — JUnit, автоматическое, нагрузочное
- Использование CI и анализаторов кода
- Придумать систему, которая будет запрещать использовать эмулятор для неправомерных действий не только на словах (разумеется, код открыт, и любой сможет удалить эти проверки и пересобрать бинарники — но это уже точно не наши проблемы, код изменен)
А так-же:
- Централизованная система управления сервером через веб-интерфейс
- Инсталлер, умеющий воссоздать необходимую конфигурацию
- Максимальная открытость и прозрачность процесса разработки
- Постоянный обмен опытом
- Свобода, как в Valve: каждый сам выбирает, чем он хочет заняться
- Развитие не только как программиста — менеджмент, дизайн, коммуникативные скиллы
Инфтраструктура
Теперь, самое вкусное. Разумеется целью поста не является пиар проекта. Мне потом еще оплачивать траффик после хабра-эффекта ;) Посты о нас на хабре я считаю одним из важнейших пунктов в чеклисте, который реализует ту самую максимальную открытость и прозрачность процесса разработки. Разумеется, если хабр нас примет. В цикле статей должно быть много айтишных мыслей и идей, которые должны быть интересны хабрачитателям.
После того, как у меня уже есть идея, и я нашел единомышленников — нам нужна была платформа для разработки.
Я решил максимально вынести в SaaS все, что только возможно, что бы не тратить время на лишнюю инфраструктуру. Потому, в качестве хранения исходного кода, issue трекера и вики был выбран GitHub. Но нам все-же нужен сервер для всего остального, чего в SaaS пока нет. В данный момент мы пользуемся облаком Selectel — одна виртуалка с автоматическим регулированием RAM от 1Gb до 2Gb, жестким диском на 10Gb и Debian Wheezy на борту в среднем кушает 20 российских рублей в сутки. На ней крутится HTTP-сервер Apache, СУБД MySQL, контейнер сервлетов Tomcat от Apache — на базе этого была создана вся остальная инфраструктура.
На заглавной html странице, написанной в nano долго останавливаться не буду. Как, впрочем, и на форуме phpBB — свободных аналогов лучше я не знаю. По старой привычке так-же был установлен Webmin — веб интерфейс для управления сервером, но как правило, им я уже не пользуюсь. С помощью этого инструмента удобно настраивать iptables. Для слежения за показателями сервера был установлен Munin.
Отдельно стоит сказать о резервном копировании — в свете многих жалоб на Scalaxy, Selectel и других. Этим занимаются несколько скриптов на bash, которые раз в сутки в 3 часа ночи архивируют важные данные и копируют в отдельную особую дерикторию. Инкрементальных бэкапов пока нет — не так много данных. Скрипт умеет удалять старые бэкапы, оставляя только два последних. Чем же эта директория такая особенная? Я зарегистрировал dropbox аккаунт специально для бэкапа, и установил консольный dropbox клиент на сервер. Себя самого я заинвайтил в папку, где лежат бэкапы, так что они всегда есть на всех моих ноутах. Конечно, таким образом у нас ограничен размер бэкапов двумя гигабайтами, но пока я об этом не думаю.
Теперь о более тематическом. Прежде всего, Tomcat закрыт для общего доступа в целях безопасности, доступ лишь куда надо открыт через проксирование с веб-сервера. В контейнере работают Jenkins и Nexus. Jenkins в данный момент выступает в роли CI system, но в будущем я планирую использовать систему для многих автоматических задач. Очень удобный многофункциональный шедулер с веб-интерфейсом, разграничением прав, логированием операций и нотификациями на почту. Здесь же будут крутиться интеграционные тесты, автоматическое тестирование, создание релизных билдов, инсталлятора и многое другое. Nexus — репозиторий для хранения бинарников. О его юз кейсах позднее.
В качестве системы сборки (и не только) используется Maven. Это позволяет сохранять нам процесс сборки платформо-независимым, оставляет обширный выбор IDE разработчикам, при этом не мусорит в SCM. Об остальных преимуществах повторяться не буду — их есть в интернетах. Тут нам на помощь и приходит Nexus — он не только хранит наши бинарники, но и проксирует большинство популярных и общедоступных репозиториев (apache, jboss, codehaus). Это позволяет увеличить скорость CI сборок. Так-же не все бнарники, которые мы используем, есть в публичных репозиториях — они были залиты к нам руками. Таким образом, если у вас есть maven и интернет, вы с легкостью соберете исходники проекта в бинарники буквально одной командой.
Инсталлер фрэймворк — IzPack, открытый и кроссплатформенный.
Не могу много рассказать о методологии нашей разработки, так как мы еще в процессе размышлений. Известно только, что у нас будет использоваться Scrum с двухнедельными спринтами, и слегка измененными правилами, учитывая Open Source свободный график участников. Почему Scrum, если мы хотим быть свободны, как в Valve? По той же причине, по которой мы используем Java — Agile-образные методологии популярны в больших корпорациях, потому мы хотим получать опыт именно с ними.
Довершает картину повсеместное использование английского, что бы получать как можно больше коммуникативного опыта.
Summary
Спасибо за внимание. В комментариях я постараюсь понять, интересна ли тематика хабру, хотите ли вы продолжения цикла статей с углублением в каждый аспект нашей системы, с приведением кода, конфигов и прочих вкусностей.
Простите за мой английский русский, и до новых встреч :)
Автор: LLIbIcpEP