Your SlideShare is downloading. ×
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
сергей спиридонов
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

3,300

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,300
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Сервер «Аллодов Онлайн».Архитектура и особенности разработки
  • 2. Сервер высоконагруженного приложенияТребования:• Real-time• Работа 24/7• Отказоустойчивость
  • 3. Сервер высоконагруженного приложенияСложности:• Диагностика• Тестирование нагрузки• Проектирование
  • 4. Сервер. Выбор языкаСравнительные параметры:• Производительность• Скорость разработкиТребования:• Memory management• Кроссплатформенность• Удобная IDE
  • 5. Сервер. Выбор языка Java C# Managed + + IDE Idea, Eclipse VS, MonoDevelop Linux IDE Idea, Eclipse MonoDevelopУдобная Linux IDE Idea, Eclipse 
  • 6. Игровой сервер. СтруктураКомпоненты:• Механика• Ядро (сервер)
  • 7. Механика
  • 8. Сервер Игровая механика Система Map-сервис движения Database сервис Поиск пути LoS Сканер Данные Система Репликация карты сообщений Ресурсная система Сеть VFS Логирование
  • 9. Сервер• VFS Игровая механика Система• Логирование Map-сервис движения Database• Сеть Поиск пути LoS Сканер сервис• Ресурсная система Данные Система Репликация карты сообщений Ресурсная система Сеть VFS Логирование
  • 10. Сервер.• Поиск пути Игровая механика Система• LoS Map-сервис движения Database• Сканер сервис Поиск пути LoS Сканер• Репликация Данные Система Репликация• Система сообщений карты сообщений Ресурсная система Сеть• Ресурсная система VFS Логирование
  • 11. Сервер• Map-сервис Игровая механика Система• Database сервис Map-сервис движения Database• Система движения Поиск пути LoS Сканер сервис Данные Система Репликация карты сообщений Ресурсная система Сеть VFS Логирование
  • 12. Взаимодействие с клиентом• Общие данные• Серверные данные: – Репликация – Сообщения (Event, Message)• Клиентские данные: – Команды (Command)
  • 13. Репликация«Репликация – это явление наклиенте божественного сервера.» Тимур Бухараев.
  • 14. Репликацияpublic final class Stat { private float base; private float result;}
  • 15. Репликация@ReplicateClassClient@ReplicateClassServerpublic final class Stat { @ReplicateServer private float base; @ReplicateServer @ReplicateClient @Precision(-1) private float result;}
  • 16. Репликация@ReplicateClassClient class Stat : public Replicated@ReplicateClassServer {public final class Stat { float result; public: @ReplicateServer const float GetResult() private float base; { return result; } @ReplicateServer void SetResult( float r ) @ReplicateClient { result = r; } @Precision(-1) } private float result;}
  • 17. Репликация@ReplicateClassClient /**@ReplicateClassServer * Replication code,public final class Stat { * generated automatically. * Dont change manually! @ReplicateServer * private float base; * @author ReplicatorsGenerator @ReplicateServer */ @ReplicateClient public interface StatReplica { @Precision(-1) float getBase(); private float result; float getResult();} }
  • 18. Система сообщенийpublic class MsgPosition extends Msg{ private float yaw; @NotNull private ConstPoint pos;}
  • 19. Система сообщений@ReplicateOccurencepublic class MsgPosition extends Msg{ @Precision(2) private float yaw; @NotNull private ConstPoint pos;}
  • 20. Система сообщений@ReplicateOccurence class MsgPosition : public Msgpublic class MsgPosition { Vec3 pos; extends Msg{ float yaw; @Precision(2) public: private float yaw; MsgPosition ( @NotNull const Address & _from, private ConstPoint pos; const Vec3 & _pos, float _yaw ):} Msg( _from ), pos( _pos ), yaw( _yaw ) {…} Vec3& GetPos(){ return pos; } float GetYaw(){ return yaw; } };
  • 21. Система сообщений@ReplicateOccurence @ReplicateOccurencepublic class MsgPosition public class MsgPosition …{ extends Msg{ public MsgPosition(… in){ @Precision(2) super.readCpp(in); private float yaw; pos = new MutablePoint(in); yaw = in.readFloat(2); @NotNull } private ConstPoint pos; public void writeCpp(… out){} super.writeCpp(out); pos.writeCpp(out); out.writeFloat(yaw, 2); } }
  • 22. Ресурсная системаpublic class Cell { @NotNull private Zone [] zones; private int weight = 0;}
  • 23. Ресурсная системаpublic class Cell { @NotNullElements (policy = REMOVE) @DenyDefault @NotNull private Zone [] zones; @AllowDefault private int weight = 0;}
  • 24. Ресурсная системаpublic class Cell { <cells> @NotNullElements <Item> <zones> (policy = REMOVE) <Item href="Zone1"/> @DenyDefault </zones> @NotNull <weight>100500</weight> private Zone [] zones; </Item> @AllowDefault <Item> <zones> private int weight = 0; <Item href="Zones2"/>} <Item href="Zones3"/> </zones> </Item> </cells>
  • 25. Проверка клиента• Система арбитров• Проверка на сервере
  • 26. Проверка клиентаСистема арбитров:• Ненадёжная• Дорогая реализация• Дешёвые проверки
  • 27. Проверка клиентаПроверка на сервере:• Совсем ненадёжная• Дешёвая реализация• Дорогие проверки
  • 28. Автоматическое тестирование• Unit-тесты• Функциональные• Нагрузочные (боты)• Performance-тесты• Стресс-тесты• Smoke-тесты
  • 29. Проблемы• Тестирование нагрузки• Масштабирование• Внешние (GC, DB)• Отладка
  • 30. СПАСИБО! Сергей СпиридоновРазработчик сервера Аллодов Онлайн / Allods Team s.spiridonov@corp.mail.ru

×