сергей спиридонов
-
Upload
kuchinskaya -
Category
Documents
-
view
3.101 -
download
2
description
Transcript of сергей спиридонов
![Page 1: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/1.jpg)
![Page 2: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/2.jpg)
Сервер «Аллодов Онлайн». Архитектура и особенности
разработки
![Page 3: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/3.jpg)
Требования:• Real-time• Работа 24/7• Отказоустойчивость
Сервер высоконагруженного приложения
![Page 4: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/4.jpg)
Сложности:• Диагностика• Тестирование нагрузки• Проектирование
Сервер высоконагруженного приложения
![Page 5: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/5.jpg)
Сравнительные параметры:• Производительность• Скорость разработкиТребования:• Memory management• Кроссплатформенность• Удобная IDE
Сервер. Выбор языка
![Page 6: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/6.jpg)
Сервер. Выбор языкаJava C#
Managed + +
IDE Idea, Eclipse VS, MonoDevelop
Linux IDE Idea, Eclipse MonoDevelop
Удобная Linux IDE Idea, Eclipse
![Page 7: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/7.jpg)
Компоненты:• Механика• Ядро (сервер)
Игровой сервер. Структура
![Page 8: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/8.jpg)
Механика
![Page 9: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/9.jpg)
СерверИгровая механика
Map-сервис
Система движен
ияПоиск пути
LoS
Сканер
Данные карты
Система сообщени
й
Database
сервисРепликац
ияРесурсная система
СетьVFS Логирование
![Page 10: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/10.jpg)
• VFS• Логирование• Сеть• Ресурсная система
СерверИгровая механика
Map-сервис
Система движен
ияПоиск пути
LoS
Сканер
Данные карты
Система сообщени
й
Database
сервисРепликац
ияРесурсная система
СетьVFS Логирование
![Page 11: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/11.jpg)
• Поиск пути
• LoS• Сканер• Репликация• Система сообщений• Ресурсная система
Сервер.Игровая механика
Map-сервис
Система движен
ияПоиск пути
LoS
Сканер
Данные карты
Система сообщени
й
Database
сервисРепликац
ияРесурсная система
СетьVFS Логирование
![Page 12: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/12.jpg)
• Map-сервис• Database сервис• Система движения
СерверИгровая механика
Map-сервис
Система движен
ияПоиск пути
LoS
Сканер
Данные карты
Система сообщени
й
Database
сервисРепликац
ияРесурсная система
СетьVFS Логирование
![Page 13: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/13.jpg)
• Общие данные• Серверные данные:– Репликация– Сообщения (Event, Message)
• Клиентские данные:– Команды (Command)
Взаимодействие с клиентом
![Page 14: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/14.jpg)
«Репликация – это явление на клиенте божественного сервера.»
Тимур Бухараев.
Репликация
![Page 15: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/15.jpg)
Репликация public final class Stat { private float base; private float result; }
![Page 16: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/16.jpg)
Репликация@ReplicateClassClient @ReplicateClassServer public final class Stat { @ReplicateServer private float base; @ReplicateServer @ReplicateClient @Precision(-1) private float result; }
![Page 17: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/17.jpg)
Репликация@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: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/18.jpg)
Репликация@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: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/19.jpg)
Система сообщений public class MsgPosition extends Msg{ private float yaw; @NotNull private ConstPoint pos; }
![Page 20: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/20.jpg)
Система сообщений@ReplicateOccurence public class MsgPosition extends Msg{ @Precision(2) private float yaw; @NotNull private ConstPoint pos; }
![Page 21: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/21.jpg)
Система сообщений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: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/22.jpg)
Система сообщений@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: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/23.jpg)
Ресурсная системаpublic class Cell { @NotNull private Zone [] zones; private int weight = 0; }
![Page 24: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/24.jpg)
Ресурсная системаpublic class Cell { @NotNullElements (policy = REMOVE) @DenyDefault @NotNull private Zone [] zones; @AllowDefault private int weight = 0; }
![Page 25: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/25.jpg)
Ресурсная система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: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/26.jpg)
Проверка клиента• Система арбитров• Проверка на сервере
![Page 27: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/27.jpg)
Проверка клиентаСистема арбитров:• Ненадёжная• Дорогая реализация• Дешёвые проверки
![Page 28: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/28.jpg)
Проверка клиентаПроверка на сервере:• Совсем ненадёжная• Дешёвая реализация• Дорогие проверки
![Page 29: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/29.jpg)
• Unit-тесты• Функциональные• Нагрузочные (боты)• Performance-тесты• Стресс-тесты• Smoke-тесты
Автоматическое тестирование
![Page 30: сергей спиридонов](https://reader033.fdocuments.net/reader033/viewer/2022061212/5495f0c0b4795956728b4817/html5/thumbnails/30.jpg)
• Тестирование нагрузки• Масштабирование• Внешние (GC, DB)• Отладка
Проблемы