Сказ о том, как все начиналось (История KTTC.ru)

begin_kttc

Начало

Все началось с того, что мы с начали играть в World of Tanks (в 2013г.), буквально через месяц другой, мы начали интересоваться своей игровой статистикой и искать ресурсы, которые бы нам помогли в этом.
Сначала пользовались одним, потом другим, третьим, но постоянно нас что то не устраивало. И в какой то момент, мы осознали, что ни один из этих ресурсов не может дать нам того, что нужно. И тогда было решено сделать свой.

Название даже придумывать не стали, нашли в закромах купленный заранее домен kttc.ru и решили пусть так и будет.

Что мы хотели от проекта?
Нам была нужна информация о том, как мы играли за последнюю игровую сессию. С отображением изменившихся показателей, их роста или падения.
Решили что будем показывать все существующие на тот момент игровые рейтинги и дополнять их по мере выхода новых.
Больше нам ничего не нужно было, делаем проект для себя.

Дизайн
С дизайном тоже не парились, сделали всё максимально просто, чтобы не отвлекаться на лишние детали.
Ну единственное, для самоудовлетворения, на скорую руку из какого то видео по танкам, был вырезан логотип и размещен. Нужно же было, как то удобно, переходить на главную страницу.

logo_1

На главной была только одна фраза “Как только, так сразу.”

Сервер
Первый сервер, уже и не вспомнится, был самый дешевый, который смогли найти. Т.к. прогнозируемая посещаемость была: 1-2 посетителя в сутки (мы =)), нагрузки сведены к минимуму. В будущее не смотрели, делалось на “и так сойдет”.

Поставили по стандарту: apache, php, mysql и завели.
В качестве framework’а , решили тоже долго не думать, взяли то, с чем работали на тот момент, а именно Zend Framework 1

Наработки
Благо WG предоставляло API и все нужные нам данные были.
Поковырялись, погоняли и сразу же выявили некоторые нюансы, например что если ты закроешь игру используя комбинацию Alt+F4, то новая информация по твоему аккаунту будет доступна в течении часа, а если выйдешь через игровое меню, то статистика появлялась сразу.
Что то еще, но уже и не вспомнишь.

Хранение информации
Было решено хранить максимально полный набор данных аккаунта пользователя. Весь информационный массив был разбит на некоторые смысловые блоки и разнесен по разным таблицам. У каждой таблицы есть свой архив, где хранятся предыдущие состояния.

Использование
Прошло несколько месяцев, мы пользовались и нас все устраивало, но появилось дикое желание, поделиться с другими игроками. Хотелось чужих мнений, оценок и т.д.

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

Пол года
К середине 2014 года, на сайт уже заходило в день несколько тысяч игроков, мы получали большое количество отзывов и хотелок.
Наш сайт добавили как “Официальный фан ресурс World of Tanks”.

Параллельно с этим, мы дорабатывали главную страницу, добавляли новые рейтинги, топ 1000 кланов/игроков, индикатор для игроков занимающихся подставными боями и прикрутили авторизацию через Wargaming API.

И вместе с этим, мы упирались в мощности нашего сервера.
Сайт периодически отваливался, то база зависнет, из за кучи не оптимизированных запросов, то апач обидится и уйдет в себя.

Из за этих падений и из-за того, что мы, естественно, не думали тогда о целостности данных, начались проблемы: криво отображалась статистика у некоторых игроков.
Начали искать причину всех бед и приняли несколько естественных, простейших шагов по оптимизации.

Раскоментили (да именно так) участки кода связанные с транзакционностью.
Кэш, конечно кэш, как мы забыли про него. Раз два и готово.
Базу малость отпустило, апач немного тоже.

Так же, решили, для уменьшения объема бд и для уменьшения времени загрузки страницы со статистикой, прикрутить “скукоживалку” для стат промежутков.
Скукоживака брала устаревшие игровые сессии, объединяла их в одну и пересчитывал игровые рейтинги для получившейся, новой, сессии.

Месяц
Или чуть дольше, нам удавалось справляться с растущими нагрузками, но хотелось больше мощностей, чтобы можно было развернуться. Пора было искать новый сервер и переносить проект.
Изучив цены на Российском рынке, мы поняли, что точно не потянем, пошли смотреть за бугор, кто то подсказал или где-то наткнулись на Hetzner, да отзывы были не ахти, жесткие диски сыпятся и подобное, но посмотрев на цены и на характеристики предлагаемого железа, взяли у них. И как показала практика — не зря.

Новый сервер
Взяли мы, на сколько помню, 2 терабайта hdd в рейде, 16 гигов оперативной и самый простой процессор.
Сколько он стоил уже не помню, но впритык хватало на него.

Попросили хорошего товарища, который разбирается в настройке серверов, поставить все что нужно для нашего проекта. Поставили apache+nginx+mysql на ubuntu.
Развернули бэкапы, перекинули dns и все заработало.
Радости не было предела, мощностей за глаза, все крутится, все вертится.

Пол года на новом сервере
К началу 2015, количество пользователей увеличилось в несколько раз, тысячи новых аккаунтов, десятки тысяч статистических промежутков.

Сайт стал отваливаться… (гад =()

Долго не могли понять в чём причина. т.к. железо было хорошим, но после долгих танцев с бубном, выяснили, что было очень плохой идеей, хранить весь файловый кэш в 1 папке (получил кое кто потом по шее):
Нормализовали типы данных в таблицах. Убрали избыточность.
Переделали кэширование, добавили вложенность. Часть кэша перенесли в memcache.
Переписали все мэпперы, почти всё теперь на транзакциях, избавились от тонны лишнего кода.
Вместе с этим, отказались от Apache и поставили ради эксперимента nginx + php-fpm.

Сайт задышал полной грудью.
Стали добавлять новые сервисы: онлайн по серверам; информация о новых стат промежутках игроков в реальном времени; отзывы; и другое.

Конец 2015
К концу года, навалилось много основной работы, наш энтузиазм поугас, критичных ошибок не было, сайт работал, и сам себя оплачивал, все устраивало.
Можно смело уходить в загул =)

Небольшой апгрейд сервера.
Из за возросшего количества посетителей, стало не хватать оперативной памяти, понятно что дыры, утечки и т.д.
Увеличили память до 32 гигов и все работало хорошо.

Устали
Провели конкурс на новый логотип.

256

И все.
Руки опустились, как то стало грустно на душе. Ушли в реал.

После НГ 2016
Новогодние праздники у нас затянулись, примерно до февраля (это еще нормально!).
Зайдя как-то на сайт и загрузив новую статистику, мы увидели, что сильно долго все это происходит и что-то нужно менять.

КТТС v2
К февралю, посещаемость сайта все возрастала. База уже насчитывала около сотни тысяч аккаунтов и миллионы записей суммарно по всем таблицам. Объем всего проекта возрос почти до одного террабайта с учетом кэша и бд. Не так много, но набралась критическая масса недовольства своим проектом. Все нужно переделать с нуля… (опять =))

Сказано, сделано.

  • Оттюнили все служебные процессы, которые выполняются по крону.
  • Распараллелили различные служебные процессы. Теперь страница пользователя загружается сразу, а все процессы связанные с актуализацией данных происходит в фоне
  • Более-менее актуализировали шаблон сайта.
  • Перенесли часть функционала с php на js.
  • Оптимизировали кэш.
  • Добавили “скукоживание” стат промежутков по годам, месяцам, дням.
  • Переделали функционал, отвечающий за пересчет топ 1000 игроков/кланов.
  • Добавили интерфейс для мобильных устройств
  • Добавили новых сервисов.

Что бы еще сделать?
Статистика, танки. Танки, статистика. Танки, танки, танки…
А не добавить ли нам на кттс, еще какую нибудь игру?
Смотрим, выбираем, ищем API. И натыкаемся на API от Valve.

Как же мы сразу не подумали о Counter-Strike: Global Offensive.
Ковыряемся, пробуем, тестируем. Да получится.

Через пару недель выкатили тестовую версию на закрытый сервер, загрузили игроков, все работает, можно выкатывать в массы.

Грубо говоря, вот так, мы недавно запустили на основу, раздел по сбору игровой статистике CS:GO.

Больше игр, богу игр
Нас стали спрашивать: зачем, почему, как так.
Многие хотели проектов от Wargaming.

Посмотрев на World of Warships и World of Tanks Blitz, выбрали вторую, т.к. она требовала минимум телодвижений для запуска.

И буквально за несколько дней добавили на сайт третью игру.
По мобильных танкам, пока собирается база, чтобы сделать например топ 1000 кланов/игроков и другое.
Пока что в ожидании =)