КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge"....

47
Андрей Фролов, ведущий программист, Allods Team БАЗЫ ДАННЫХ В ИГРАХ: ОТ АЛЛОДОВ ДО SKYFORGE
  • Upload

    -
  • Category

    Education

  • view

    112.049
  • download

    1

description

Конференция разработчиков игры. 2013 год. Андрей Фролов. Mail.Ru Games. "Базы данных в онлайн играх. От Аллодов до Skyforge" Created using YouTube Video

Transcript of КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge"....

Page 1: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

Андрей Фролов, ведущий программист, Allods Team

БАЗЫ ДАННЫХ В ИГРАХ: ОТ АЛЛОДОВ ДО SKYFORGE

Page 2: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

2

КОРАБЛИ БОРОЗДЯТ…

Page 3: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

3

ВНЕЗАПНО!

Page 4: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

4

ПАНИКА

Page 5: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

5

БЕЗЫСХОДНОСТЬ

Page 6: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

6

Базы данных – критическая часть игрового сервера.

Небрежное отношение ведёт к катастрофе

Page 7: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ПРОЕКТИРОВАНИЕ – ДЕЛО НЕ ПРОСТОЕ

• Надёжность• Производительность• Масштабирование• Вопросы оперирования• Сложности в разработке

7

Page 8: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

8

ALLODS ONLINE

Page 9: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ALLODS ONLINE

• Шарды• 200 транзакций в секунду• 1 тред• MySQL

9

Page 10: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

SKYFORGE

10

Page 11: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

SKYFORGE

• Нет шардов• 100.000+ CCU ( до 10^6 )• 1.000 CCU ~ 30-70 tps.• 100.000 CCU ~ 7.000 tps.• Поменьше рисков

11

Page 12: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

МНОГО ДАННЫХ

• 10.000.000 пользователей

• 350.000.000 предметов

• 200+ ГБ

12

Page 13: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

МНОГО ПРОГРАММИСТОВ

13

Page 14: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

FREE 2 PLAY

Предмет = Время = Деньги Þ Транзакции

14

Page 15: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

НАШЕ РЕШЕНИЕ

15

Page 16: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

АРХИТЕКТУРА

16

Game Mechanics

DB Interface

DATABASE

DB Service

Page 17: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

SERVICE ORIENTED ARCHITECTURE

• Всё есть сервис. БД один из них.

• База спрятана за интерфейсом.

• Группировка функций в «паки».

• Один метод - одна транзакция.

17

Page 18: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ВЫЗОВ МЕТОДА

18

Page 19: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

КЭШ И СИНХРОНИЗАЦИЯ

19

DB Service

Database

Operation[]

DB InterfaceSpell “Fireball” выучен

Page 20: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ПРЯМОЕ ПОДКЛЮЧЕНИЕ

JDBC

20

Page 21: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

OBJECT TO RELATIONAL MAPPING

Hibernate

getSession().save(dataSet)

21

Page 22: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

МАСШТАБИРОВАНИЕ

22

Page 23: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ШАРДИНГ

• Шардировать по аккаунтам• Ключ – ID пользователя

23

INNER IDDB ID

Page 24: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

VIRTUAL SHARDS

24

Шард

Шард

Шард

Шард

Шард

Шард

Шард

Шард

Шард

Шард

Шард

Шард

Page 25: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

РАСПРЕДЕЛЁННЫЕ ТРАНЗАКЦИИ

Свой велосипед на очередях

• Универсально• Быстро• Много кода = много багов• Eventual consistency

25

Page 26: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

РАСПРЕДЕЛЁННЫЕ ТРАНЗАКЦИИ

Native

• Мало кода - мало багов• Не все базы поддерживают• Требует дополнительной прослойки• Тормозят

26

Page 27: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

МОДЕЛЬ ДАННЫХ

27

Page 28: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

МОДЕЛЬ ДАННЫХ

Свой формат

• Читается только кодом

• Сложно конвертировать

• Перезапись только целиком

28

Page 29: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

МОДЕЛЬ ДАННЫХ

Реляционная модель

• SQL

• Constraints

• Недостаточная производительность

29

Page 30: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

МОДЕЛЬ ДАННЫХ

NoSQL

• Human readable формат (JSON)

• Поддержка типов на уровне базы

• Перезапись целиком

30

Page 31: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

МОДЕЛЬ ДАННЫХ

Гибрид

31

Page 32: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ВЫБОР БД

• Bottleneck – диск

• Транзакции

• MongoDB, MySQL, PostgreSQL

32

Page 33: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ВЫБОР БД

PostgreSQL лучше MySQL.

• Native распределённые транзакции• Синхронная реплика• Кастомные типы данных• Намного меньше багов

33

Page 34: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

PERFORMANCE

Почему базы тормозят?

34

Page 35: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

НОРМАЛЬНЫЕ ЦИФРЫ

Raid 10

• 1 thread => 400 tps

• 10 threads => 2.500 tps

• Latency 2 - 30 ms

35

Page 36: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

BOTTLENECK

36

SSDHDDLock Lock Free

Delete Mark

Working Set < Memory

Page 37: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

PERFORMANCE VS RELIABILITY

• Модели поведения fsync()• Синхронная репликация

SSD,Синхронная реплика,Interconnect.Быстро и безопасно.

37

Page 38: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ПЕРЕКРЁСТНАЯ РЕПЛИКАЦИЯ

39

DB1

DB2 Replica

Shard 1

DB2

DB1 Replica

Shard 2

Page 39: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ЭВОЛЮЦИЯ АЛЛОДОВ В SKYFORGE

40

Page 40: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ALLODS ONLINE

• Шардинг• JDBC/ Hibernate.• 1 база на 1 шард. • Общие базы: Биллинг, Аккаунт. • Распределённые транзакции вручную.• Нет единого интерфейса.

41

Page 41: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ALLODS ONLINE

• MySQL, Гибридная схема

• Raid.

• fsync асинхронный c паузой в 1 сек.

• 200 tps.1 тред.

42

Page 42: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ОПЕРИРОВАНИЕ ALLODS ONLINE

• Логи в читаемом виде. Возможен grep.

• Админы знают, легко оперировать.

• Проблемы при обновлении схемы.

• Реплика отваливается.

43

Page 43: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

SKYFORGE

44

Page 44: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

SKYFORGE

• 100.000 CCU• Hibernate• 15+ баз в реалме. • Native распределённые транзакции.• Единый интерфейс к БД.

45

Page 45: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

SKYFORGE

• PostgreSQL• SSD• fsync синхронный • Cинхронная реплика• Virtual shards• 1 тред x 15+ раз

46

Page 46: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

СУХОЙ ОСТАТОК

• SOA• Virtual Shards• Hibernate• SSD• PostgreSQL + гибридная модель• Backup

47

Page 47: КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов

ВОПРОСЫ

48

Андрей ФроловВедущий программист[email protected]