31

сергей спиридонов

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: сергей спиридонов
Page 2: сергей спиридонов

Сервер «Аллодов Онлайн». Архитектура и особенности

разработки

Page 3: сергей спиридонов

Требования:• Real-time• Работа 24/7• Отказоустойчивость

Сервер высоконагруженного приложения

Page 4: сергей спиридонов

Сложности:• Диагностика• Тестирование нагрузки• Проектирование

Сервер высоконагруженного приложения

Page 5: сергей спиридонов

Сравнительные параметры:• Производительность• Скорость разработкиТребования:• Memory management• Кроссплатформенность• Удобная IDE

Сервер. Выбор языка

Page 6: сергей спиридонов

Сервер. Выбор языкаJava C#

Managed + +

IDE Idea, Eclipse VS, MonoDevelop

Linux IDE Idea, Eclipse MonoDevelop

Удобная Linux IDE Idea, Eclipse

Page 7: сергей спиридонов

Компоненты:• Механика• Ядро (сервер)

Игровой сервер. Структура

Page 8: сергей спиридонов

Механика

Page 9: сергей спиридонов

СерверИгровая механика

Map-сервис

Система движен

ияПоиск пути

LoS

Сканер

Данные карты

Система сообщени

й

Database

сервисРепликац

ияРесурсная система

СетьVFS Логирование

Page 10: сергей спиридонов

• VFS• Логирование• Сеть• Ресурсная система

СерверИгровая механика

Map-сервис

Система движен

ияПоиск пути

LoS

Сканер

Данные карты

Система сообщени

й

Database

сервисРепликац

ияРесурсная система

СетьVFS Логирование

Page 11: сергей спиридонов

• Поиск пути

• LoS• Сканер• Репликация• Система сообщений• Ресурсная система

Сервер.Игровая механика

Map-сервис

Система движен

ияПоиск пути

LoS

Сканер

Данные карты

Система сообщени

й

Database

сервисРепликац

ияРесурсная система

СетьVFS Логирование

Page 12: сергей спиридонов

• Map-сервис• Database сервис• Система движения

СерверИгровая механика

Map-сервис

Система движен

ияПоиск пути

LoS

Сканер

Данные карты

Система сообщени

й

Database

сервисРепликац

ияРесурсная система

СетьVFS Логирование

Page 13: сергей спиридонов

• Общие данные• Серверные данные:– Репликация– Сообщения (Event, Message)

• Клиентские данные:– Команды (Command)

Взаимодействие с клиентом

Page 14: сергей спиридонов

«Репликация – это явление на клиенте божественного сервера.»

Тимур Бухараев.

Репликация

Page 15: сергей спиридонов

Репликация public final class Stat { private float base; private float result; }

Page 16: сергей спиридонов

Репликация@ReplicateClassClient @ReplicateClassServer public final class Stat { @ReplicateServer private float base; @ReplicateServer @ReplicateClient @Precision(-1) private float result; }

Page 17: сергей спиридонов

Репликация@ReplicateClassClient @ReplicateClassServer public final class Stat { @ReplicateServer private float base; @ReplicateServer @ReplicateClient @Precision(-1) private float result; }

class Stat : public Replicated { float result; public: const float GetResult() { return result; } void SetResult( float r ) { result = r; } }

Page 18: сергей спиридонов

Репликация@ReplicateClassClient @ReplicateClassServer public final class Stat { @ReplicateServer private float base; @ReplicateServer @ReplicateClient @Precision(-1) private float result; }

/** * Replication code, * generated automatically. * Don't change manually! * * @author ReplicatorsGenerator */ public interface StatReplica { float getBase(); float getResult(); }

Page 19: сергей спиридонов

Система сообщений public class MsgPosition extends Msg{ private float yaw; @NotNull private ConstPoint pos; }

Page 20: сергей спиридонов

Система сообщений@ReplicateOccurence public class MsgPosition extends Msg{ @Precision(2) private float yaw; @NotNull private ConstPoint pos; }

Page 21: сергей спиридонов

Система сообщенийclass MsgPosition : public Msg { Vec3 pos; float yaw; public: MsgPosition ( const Address & _from,

const Vec3 & _pos, float _yaw ): Msg( _from ),

pos( _pos ), yaw( _yaw ) {…} Vec3& GetPos(){ return pos; } float GetYaw(){ return yaw; } };

@ReplicateOccurence public class MsgPosition extends Msg{ @Precision(2) private float yaw; @NotNull private ConstPoint pos; }

Page 22: сергей спиридонов

Система сообщений@ReplicateOccurence public class MsgPosition extends Msg{ @Precision(2) private float yaw; @NotNull private ConstPoint pos; }

@ReplicateOccurence public class MsgPosition …{ public MsgPosition(… in){ super.readCpp(in); pos = new MutablePoint(in); yaw = in.readFloat(2); } public void writeCpp(… out){ super.writeCpp(out); pos.writeCpp(out); out.writeFloat(yaw, 2); } }

Page 23: сергей спиридонов

Ресурсная системаpublic class Cell { @NotNull private Zone [] zones; private int weight = 0; }

Page 24: сергей спиридонов

Ресурсная системаpublic class Cell { @NotNullElements (policy = REMOVE) @DenyDefault @NotNull private Zone [] zones; @AllowDefault private int weight = 0; }

Page 25: сергей спиридонов

Ресурсная системаpublic class Cell { @NotNullElements (policy = REMOVE) @DenyDefault @NotNull private Zone [] zones; @AllowDefault private int weight = 0; }

<cells> <Item> <zones> <Item href="Zone1"/> </zones> <weight>100500</weight> </Item> <Item> <zones> <Item href="Zones2"/> <Item href="Zones3"/> </zones> </Item> </cells>

Page 26: сергей спиридонов

Проверка клиента• Система арбитров• Проверка на сервере

Page 27: сергей спиридонов

Проверка клиентаСистема арбитров:• Ненадёжная• Дорогая реализация• Дешёвые проверки

Page 28: сергей спиридонов

Проверка клиентаПроверка на сервере:• Совсем ненадёжная• Дешёвая реализация• Дорогие проверки

Page 29: сергей спиридонов

• Unit-тесты• Функциональные• Нагрузочные (боты)• Performance-тесты• Стресс-тесты• Smoke-тесты

Автоматическое тестирование

Page 30: сергей спиридонов

• Тестирование нагрузки• Масштабирование• Внешние (GC, DB)• Отладка

Проблемы

Page 31: сергей спиридонов

Сергей СпиридоновРазработчик сервера Аллодов Онлайн

/ Allods [email protected]

СПАСИБО!