редакции Выбор
Сбор игровой сессионной статистики, на примере сайта KTTC.ru (история создания)
Начало
Все началось с того, что мы с другом начали играть в WOT (2013г.), буквально через месяц другой, мы начали интересоваться своей игровой статистикой и искать ресурсы, которые бы нам помогли в этом.
Сначала пользовались одним, потом другим, третьим, но постоянно нас что то не устраивало. И в какой то момент, мы осознали, что ни один из этих ресурсов не может дать нам того, что нужно. И тогда было решено сделать свой.
Название даже придумывать не стали, нашли в закромах купленный заранее домен kttc.ru и решили пусть так и будет.
Что мы хотели от проекта?
Нам была нужна информация о том, как мы играли за последнюю игровую сессию. С отображением изменившихся показателей, их роста или падения.
Решили что будем показывать все существующие на тот момент игровые рейтинги и дополнять их по мере выхода новых.
Больше нам ничего не нужно было, делаем проект для себя.
Дизайн
С дизайном тоже не парились, сделали всё максимально просто, чтобы не отвлекаться на лишние детали.
Ну единственное, для самоудовлетворения, на скорую руку из какого то видео по танкам, был вырезан логотип и размещен. Нужно же было, как то удобно, переходить на главную страницу.
На главной была только одна фраза “Как только, так сразу.”
Сервер
Первый сервер, уже и не вспомнится, был самый дешевый, который смогли найти. Т.к. прогнозируемая посещаемость была: 1-2 посетителя в сутки, нагрузки сведены к минимуму. В будущее не смотрели, делалось на “и так сойдет”.
Поставили по стандарту: apache, php, mysql и завели.
В качестве framework’а , решили тоже долго не думать, взяли то, с чем работали на тот момент, а именно Zend Framework 1
Наработки
Благо WG предоставляло API и все нужные нам данные были.
Поковырялись, погоняли и сразу же выявили некоторые нюансы, например что если ты закроешь игру используя комбинацию Alt+F4, то новая информация по твоему аккаунту будет доступна в течении часа, а если выйдешь через игровое меню, то статистика появлялась сразу.
Что то еще, но уже и не вспомнишь.
Хранение информации
Было решено хранить максимально полный набор данных аккаунта пользователя. Весь информационный массив был разбит на некоторые смысловые блоки и разнесен по разным таблицам. У каждой таблицы есть свой архив, где хранятся предыдущие состояния.
Использование
Прошло несколько месяцев, мы пользовались и нас все устраивало, но появилось дикое желание, поделиться с другими игроками. Хотелось чужих мнений, оценок и т.д.
На офф. форуме игры, создали пост с информацией о нашем проекте и начали ждать. В этом же разделе, уже были темы с другими популярными на тот момент ресурсами, и наша тема не пользовалась популярностью. Но время все меняет, потихоньку, помаленьку, начали появляться первые посетители, первые отзывы, первые ссылки на нас, ну и конечно негатив.
Что то, у кого то, не работало. Что то долго загружалось, что то работало но не так.
И в свободное время, мы начали вносить исправления и дорабатывать проект.
Пол года
К середине 2014 года, на сайт уже заходило в день по 3-4 тысячи уников, мы получали большое количество отзывов и хотелок.
Наш сайт добавили как “Официальный фан ресурс World of Tanks”.
Параллельно с этим, мы дорабатывали главную страницу, добавляли новые рейтинги, топ 1000 кланов/игроков, индикатор для игроков занимающихся подставными боями и прикрутили авторизацию через WG.
И вместе с этим, мы упирались в мощности нашего сервера.
Сайт периодически отваливался, то база зависнет, из за кучи не оптимизированных запросов, то апач обидится и уйдет в себя.
Из за этих падений и из-за того, что мы, естественно, не думали тогда о целостности данных, начались проблемы: криво отображалась статистика у некоторых игроков.
Начали искать причину всех бед и приняли несколько естественных, простейших шагов по оптимизации. (да именно так) участки кода связанные с транзакционностью.
Кэш, конечно кэш, как мы забыли про него. Раз два и готово.Базу малость отпустило, апач немного тоже.
Так же, решили, для уменьшения объема бд и для уменьшения времени загрузки страницы со статистикой, прикрутить “скукоживалку” для стат промежутков.
Скукоживака брала устаревшие игровые сессии, объединяла их в одну и пересчитывал игровые рейтинги для получившейся, новой, сессии.
Прикрутили Google AdSense, авось копеечка перепадет.
Месяц.
Или чуть дольше, нам удавалось справляться с растущими нагрузками, но хотелось больше мощностей, чтобы можно было развернуться. Пора было искать новый сервер и переносить проект.
Изучив цены на Российском рынке, мы поняли, что точно не потянем, пошли смотреть за бугор, кто то подсказал или где-то наткнулись на Hetzner, да отзывы были не ахти, жесткие диски сыпятся и подобное, но посмотрев на цены и на характеристики предлагаемого железа, взяли у них. И как показала практика - не зря.
Новый сервер.
Взяли мы, на сколько помню, 2 терабайта hdd в рейде, 16 гигов оперативной и самый простой процессор.
Сколько он стоил уже не помню, но начислений с AdSense впритык хватало на него.
Попросили хорошего товарища, который разбирается в настройке серверов, поставить все что нужно для нашего проекта. Поставили apache+nginx+mysql на ubuntu.
Развернули бэкапы, перекинули dns и все заработало.
Радости не было предела, мощностей за глаза, все крутится, все вертится.
Пол года на новом сервере.
К началу 2015, количество ежедневных уников, возросло до 10000, тысячи новых аккаунтов, десятки тысяч стат промежутков.
Сайт стал отваливаться…..
Долго не могли понять в чём причина. т.к. железо было хорошим, но после долгих танцев с бубном, выяснили, что было очень плохой идеей, хранить весь файловый кэш в 1 папке (получил кое кто потом по шее):
- Нормализовали типы данных в таблицах. Убрали избыточность.
- Переделали кэширование, добавили вложенность. Часть кэша перенесли в memcache.
- Переписали все мэпперы, почти всё теперь на транзакциях, избавились от тонны лишнего кода.
- Вместе с этим, отказались от Apache и поставили ради эксперимента nginx + php-fpm.
Сайт задышал полной грудью.
Стали добавлять новые сервисы: онлайн по серверам; информация о новых стат промежутках игроков в реальном времени; отзывы; и другое.
Конец 2015.
К концу года, навалилось много основной работы, наш энтузиазм поугас, критичных ошибок не было, сайт работал, и сам себя оплачивал, все устраивало.
Количество уникальных посетителей, возросло до 20000 в день.
Небольшой апгрейд сервера.
Из за возросшего количества посетителей, стало не хватать оперативной памяти, понятно что дыры, утечки и т.д.
Увеличили память до 32 гигов и все работало хорошо.
Устали
Провели конкурс на новый логотип.
И все.
Кому интересно как автор данного логотипа пришел к нему, вот его небольшая презентация, особенно нам нравится брендированная кружка.
https://drive.google.com/file/d/0Bx6Y2owrL48lOGhJbjFHZmo1VEU/view?usp=sharing
Одним нашим хобби, сыт не будешь. Ушли в реал.
После НГ 2016.
Новогодние праздники у нас затянулись, примерно до февраля.
Зайдя как-то на сайт и загрузив новую статистику, мы увидели, что сильно долго все это происходит и что-то нужно менять.
КТТС v2
К февралю, посещаемость приблизилась к 25к уникам. База уже насчитывала около трех миллионов аккаунтов и около 500 миллионов записей суммарно по всем таблицам. Объем всего проекта возрос почти до одного терабайта с учетом кэша и бд. Не так много, но набралась критическая масса недовольства своим проектом. Все нужно переделать с нуля.
Сказано, сделано.
- Оттюнили все служебные процессы, которые выполняются по крону.
- Распараллелили различные служебные процессы. Теперь страница пользователя загружается сразу, а все процессы связанные с актуализацией данных происходит в фоне
- Более-менее актуализировали шаблон сайта.
- Перенесли часть функционала с php на js.
- Оптимизировали кэш.
- Добавили “скукоживание” стат промежутков по годам, месяцам, дням.
- Переделали функционал, отвечающий за пересчет топ 1000 игроков/кланов.
- Добавили интерфейс для мобильных устройств
- Добавили новых сервисов.
Что бы еще сделать?
Статистика, танки. Танки, статистика. Танки, танки, танки...
А не добавить ли нам на кттс, еще какую нибудь игру?
Смотрим, выбираем, ищем API. И натыкаемся на API от Valve.
Как же мы сразу не подумали о Counter-Strike: Global Offensive.
Ковыряемся, пробуем, тестируем. Да получится.
Через пару недель выкатили тестовую версию на закрытый сервер, загрузили игроков, все работает, можно выкатывать в массы.
Грубо говоря, вот так, мы недавно запустили на основу, раздел по сбору игровой статистике CS:GO.
Спустя примерно пол года, данный раздел так и не получил особой популярности у игроков, может быть еще не узнали о нем, может быть потому что пользуются нашим сайтом только танкисты и игроки в CS не знают о нем.
Весна 2016
Пользователи начали просить добавить на сайт, раздел посвященный игре World of Tanks Blitz.
Т.к. основная структура не отличалась от настольной версии, то смогли выпустить сбор статистики по блицу уже через несколько дней.
Лето 2016 (редизайн)
За время существования сайта, а это уже 3 года, дизайн сайта особо не менялся, да он устраивает большинство наших пользователей, но честно сказать, он устарел. Ну и делался он нами, то есть иногда как могли, иногда как хотелось, а порой и так сойдет.
Для определения некоторых моментов, мы запустили голосование, в котором приняло участие порядка 3000 пользователей. Из которого много интересного вынесли для себя. Главное, что пользователи не любят значительных перемен.
Начали поиски дизайнера. Понятно дело, найти толкового дизайнера, будет стоить хороших денег. А где их взять?
Исходя из нашего дохода, мы решили что может выделять по 10000р в месяц, пока не рассчитаемся полностью за дизайн и начали искать.
Оказалось, что даже знакомые дизайнеры, с которыми много лет работаешь, не готовы браться за такой проект или за такую оплату. Но спустя месяц, мы нашли человека нам подходящего и в данный момент работаем с ним над КТТС v3.
Основное что хочется видеть в новом дизайне:
- оставить минимализм но сделать информативнее
- причесать все что можно (это как минимум отступы, цвета, шрифты)
- на главной колонки заменить на квадраты и добавить серыми игры которые мы планируем добавить в будущем
- что то сделать с меню, потому что в том виде в котором оно есть сейчас, оно ужасно
- и конечно добавить современности
Как справится дизайнер с нашим сайтом, пока не знаем, надеюсь что хорошо. Я думаю это будет тема для следующего поста.