Андрей Фролов, ведущий программист, Allods Team
БАЗЫ ДАННЫХ В ИГРАХ: ОТ АЛЛОДОВ ДО SKYFORGE
2
КОРАБЛИ БОРОЗДЯТ…
3
ВНЕЗАПНО!
4
ПАНИКА
5
БЕЗЫСХОДНОСТЬ
6
Базы данных – критическая часть игрового сервера.
Небрежное отношение ведёт к катастрофе
ПРОЕКТИРОВАНИЕ – ДЕЛО НЕ ПРОСТОЕ
• Надёжность• Производительность• Масштабирование• Вопросы оперирования• Сложности в разработке
7
8
ALLODS ONLINE
ALLODS ONLINE
• Шарды• 200 транзакций в секунду• 1 тред• MySQL
9
SKYFORGE
10
SKYFORGE
• Нет шардов• 100.000+ CCU ( до 10^6 )• 1.000 CCU ~ 30-70 tps.• 100.000 CCU ~ 7.000 tps.• Поменьше рисков
11
МНОГО ДАННЫХ
• 10.000.000 пользователей
• 350.000.000 предметов
• 200+ ГБ
12
МНОГО ПРОГРАММИСТОВ
13
FREE 2 PLAY
Предмет = Время = Деньги Þ Транзакции
14
НАШЕ РЕШЕНИЕ
15
АРХИТЕКТУРА
16
Game Mechanics
DB Interface
DATABASE
DB Service
SERVICE ORIENTED ARCHITECTURE
• Всё есть сервис. БД один из них.
• База спрятана за интерфейсом.
• Группировка функций в «паки».
• Один метод - одна транзакция.
17
ВЫЗОВ МЕТОДА
18
КЭШ И СИНХРОНИЗАЦИЯ
19
DB Service
Database
Operation[]
DB InterfaceSpell “Fireball” выучен
ПРЯМОЕ ПОДКЛЮЧЕНИЕ
JDBC
20
OBJECT TO RELATIONAL MAPPING
Hibernate
getSession().save(dataSet)
21
МАСШТАБИРОВАНИЕ
22
ШАРДИНГ
• Шардировать по аккаунтам• Ключ – ID пользователя
23
INNER IDDB ID
VIRTUAL SHARDS
24
Шард
Шард
Шард
Шард
Шард
Шард
Шард
Шард
Шард
Шард
Шард
Шард
РАСПРЕДЕЛЁННЫЕ ТРАНЗАКЦИИ
Свой велосипед на очередях
• Универсально• Быстро• Много кода = много багов• Eventual consistency
25
РАСПРЕДЕЛЁННЫЕ ТРАНЗАКЦИИ
Native
• Мало кода - мало багов• Не все базы поддерживают• Требует дополнительной прослойки• Тормозят
26
МОДЕЛЬ ДАННЫХ
27
МОДЕЛЬ ДАННЫХ
Свой формат
• Читается только кодом
• Сложно конвертировать
• Перезапись только целиком
28
МОДЕЛЬ ДАННЫХ
Реляционная модель
• SQL
• Constraints
• Недостаточная производительность
29
МОДЕЛЬ ДАННЫХ
NoSQL
• Human readable формат (JSON)
• Поддержка типов на уровне базы
• Перезапись целиком
30
МОДЕЛЬ ДАННЫХ
Гибрид
31
ВЫБОР БД
• Bottleneck – диск
• Транзакции
• MongoDB, MySQL, PostgreSQL
32
ВЫБОР БД
PostgreSQL лучше MySQL.
• Native распределённые транзакции• Синхронная реплика• Кастомные типы данных• Намного меньше багов
33
PERFORMANCE
Почему базы тормозят?
34
НОРМАЛЬНЫЕ ЦИФРЫ
Raid 10
• 1 thread => 400 tps
• 10 threads => 2.500 tps
• Latency 2 - 30 ms
35
BOTTLENECK
36
SSDHDDLock Lock Free
Delete Mark
Working Set < Memory
PERFORMANCE VS RELIABILITY
• Модели поведения fsync()• Синхронная репликация
SSD,Синхронная реплика,Interconnect.Быстро и безопасно.
37
ПЕРЕКРЁСТНАЯ РЕПЛИКАЦИЯ
39
DB1
DB2 Replica
Shard 1
DB2
DB1 Replica
Shard 2
ЭВОЛЮЦИЯ АЛЛОДОВ В SKYFORGE
40
ALLODS ONLINE
• Шардинг• JDBC/ Hibernate.• 1 база на 1 шард. • Общие базы: Биллинг, Аккаунт. • Распределённые транзакции вручную.• Нет единого интерфейса.
41
ALLODS ONLINE
• MySQL, Гибридная схема
• Raid.
• fsync асинхронный c паузой в 1 сек.
• 200 tps.1 тред.
42
ОПЕРИРОВАНИЕ ALLODS ONLINE
• Логи в читаемом виде. Возможен grep.
• Админы знают, легко оперировать.
• Проблемы при обновлении схемы.
• Реплика отваливается.
43
SKYFORGE
44
SKYFORGE
• 100.000 CCU• Hibernate• 15+ баз в реалме. • Native распределённые транзакции.• Единый интерфейс к БД.
45
SKYFORGE
• PostgreSQL• SSD• fsync синхронный • Cинхронная реплика• Virtual shards• 1 тред x 15+ раз
46
СУХОЙ ОСТАТОК
• SOA• Virtual Shards• Hibernate• SSD• PostgreSQL + гибридная модель• Backup
47