world of tanks: несколько идей из опыта разработки
TRANSCRIPT
WORLD OF TANKSНЕСКОЛЬКО ИДЕЙ ИЗ ОПЫТА РАЗРАБОТКИ
МАКСИМ МЕЛЬНИКОВ
КТО Я
I Wargaming.netI Order of WarI Order of War: ChallengeI World of Tanks developer
I Linux Mobile hobbyistI OpenmokoI systemdI telepathyI Gentoo
World of Tanks: несколько идей из опыта разработки: Максим Мельников
WORLD OF TANKS СЕГОДНЯ
I 800k одновременно играющих в пикеI 8M сообщений в секундуI 300 серверов для обслуживания игрыI 60M посещений игрового портала в месяцI 5PB (петабайт) на установку и обновления игрового клиента в месяц
World of Tanks: несколько идей из опыта разработки: Максим Мельников
АРХИТЕКТУРА WORLD OF TANKS
I клиент игры — тонкий клиент, плеерI сервер — расчёт игрового мираI кластер — сотни процессов работающих как единое целое (сервер)I игровой мир — пошаговый, шаги очень маленькие
World of Tanks: несколько идей из опыта разработки: Максим Мельников
АРХИТЕКТУРА КЛАСТЕРА
Storage*
I MySQLI MySQL*I RabbitMQ
NodesI BaseAppI CellAppI LoginApp
Managers
I BaseAppMgrI CellAppMgrI DbMgr
World of Tanks: несколько идей из опыта разработки: Максим Мельников
АРХИТЕКТУРА КЛАСТЕРА II
BaseApp
I AccountI ChatChannelI ClanI AdminI SysMessengerI Node
CellApp
I ArenaI AvatarI VehicleI TeamBaseI AreaDestructiblesI Node
World of Tanks: несколько идей из опыта разработки: Максим Мельников
РАЗРАБОТКА СЕРВЕРА
1. обычный Python2. GC выключен3. немного C++4. RPC - на базе сообщений5. UDP-based протокол с гарантией доставки
World of Tanks: несколько идей из опыта разработки: Максим Мельников
ОТКАЗОУСТОЙЧИВОСТЬ
I объекты только в памятиI репликация объектов на случай отказа
World of Tanks: несколько идей из опыта разработки: Максим Мельников
ПРОБЛЕМЫ РОСТА
I совсем не угадали размер аудитории на стартеI постоянный рост аудиторииI недоработки и нехватка оборудованияI постоянный авралI предел масштабирования кластера
World of Tanks: несколько идей из опыта разработки: Максим Мельников
ПЕРЕЕЗДЕЦ
I много кластеровI быстрое перемещение между кластерамиI выделенный кластер для хранения данных
World of Tanks: несколько идей из опыта разработки: Максим Мельников
АРХИТЕКТУРА МЕТАКЛАСТЕРА
Центр
I постоянное хранилищеI аккаунты (proxy)I взаимодействие с web-ом
Периферия RU1, RU2, ...
I временное хранилищеI аккаунтыI бои
World of Tanks: несколько идей из опыта разработки: Максим Мельников
ПРEИМУЩЕСТВА МЕТАКЛАСТЕРА
1. масштабируемость2. гео-распределённость3. отказоустойчивость4. независимость
World of Tanks: несколько идей из опыта разработки: Максим Мельников
ВЕБ
I регистрацияI новостиI статьи и описанияI медиа контентI платёжная формаI обработка платежей
I раздача обновленийI управление пользователямиI профиль игрокаI статистикаI рейтингиI ...
World of Tanks: несколько идей из опыта разработки: Максим Мельников
ИНТЕГРАЦИЯ С ИГРОВЫМ СЕРВЕРОМ
I AMQP — протокол взаимодействия с игровым серверомI XML-RPC обёртка над AMQPI реплика данных игры в реляционном виде
World of Tanks: несколько идей из опыта разработки: Максим Мельников
СЕРВИСНАЯ АРХИТЕКТУРА
I множество различных проектовI протоколы взаимодействия: AMQP, HTTP, SQL, XML-RPC
World of Tanks: несколько идей из опыта разработки: Максим Мельников
СТЭК ТЕХНОЛОГИЙ
LNAMPMRI LinuxI nginxI Apache (mod_wsgi)I MySQLI Python (Django)I memcachedI RabbitMQ
Другое
I uwsgiI TwistedI PhpI RubyI ErlangI PostgreSQLI Redis
World of Tanks: несколько идей из опыта разработки: Максим Мельников
ИДЕИ
I главное — скорость и простота разработкиI не стоит боятся гетерогенной средыI синхронный подход везде где можноI асинхронный — только там, где это необходимоI AMQP — отличный протокол для реализации RPCI работа с объектами в памяти самая быстрая
World of Tanks: несколько идей из опыта разработки: Максим Мельников
СПАСИБО ЗА ВНИМАНИЕ. ВОПРОСЫ
Максим Мельниковmailto:[email protected]://plus.google.com/+MaksimMelnikauhttps://twitter.com/max_posedonhttp://wargaming.com
ОСНОВНАЯ ИГРОВАЯ БАЗА
I размер базы: 300 GBI 384 GB RAMI Percona 5.5 (разогрев кэша — 1GBps)I 40k select-ов, 1k insert-ов, 1k update-ов в секундуI 24 HDD ∗ 600 GB ∗ 0.5 = 6 TB
World of Tanks: несколько идей из опыта разработки: Максим Мельников