Софтуерна архитектура на ForexTrader – клиент-сървър приложение за извършване на търговия с forex-и



страница2/5
Дата14.02.2017
Размер0.52 Mb.
#14916
1   2   3   4   5

Market observer – този подмодул следи за промени в състоянието на пазара – например промяна на валутни курсове, промяна на позициите на останалите участници в пазара и уведомява Queries analyser-a за настъпилите промени в пазара. За целта той постоянно проверява новите данни постъпили от сървъра чрез поискване от MDP модула.

  • Queries engine –подмодулът отговаря за генерирането на заявки към сървъра за изпълнение на експертен анализатор. Той получава съобщение от Query analyzer , че е удовлетворено условието на някой от експертнит анализатори и започва процеса на изпълнението му. При получаването на съобщение за успешно приключване на изпълнението на експертнят анализатор се подготвя информация, която да бъде изпратена към потребителя под формата на e-mail с данни за реализираната отложена поръчка.

  • Query analyzer - подмодулът получава информация от Market observer-а и проверява дали след настъпилите промени на пазара е изпълнено условието за изпълнение на някой от дефинираните от потребителя експертни анализатори.

  • E-mail notifications – отговаря за изпращането на e-mail към потребителя за успешното изпълнение на експертния му анализатор с данните получени от Queries Engine-a.

    • Technical analysis – Подмодулът позволява добавянето на user-defined индикатори за технически анализ чрез въвеждане на формули за пресмятането им или чрез вградените математически, статистически и други функции от Mathematics/Statistics Lib. Той комуникира с Graphics модула при получаване на заявки за създаване на нови индикатори и изпращането на вече дефинирания индикатор за изчертаване.




        1. Inquiries processor – Този модул отговаря за генерирането на справки за състоянието на сметката на клиента и др.




    • Inquiry generator – извършва генерирането на предефинирани справки за състоянието на сметката, позициите, отворени от клиента и пр. Дава възможност за конфигуриране на параметрите на справките и преглеждането на готовата справка.

    • Inquiry encoder – получава готовата справка от Inquiry generator-а и я кодира и записва в зададения от потребителя формат и на указаното от него място във файловата система на РС-то му.




        1. Graphics – Този модул отговаря за генерирането и изчертаването на различни видове графики за движението на валутните курсове по зададени от потребителя параметри – валутна двойка, времеви интервал, тип на графиката.




    • Graphics data engine – прочита данните, нужни за графиката от Data Storage и History Data Storage, и ги подготвя за изчетртаване. Подмодулът подава данните за графиката на Graphics view за изчертаване.

    • Graphics view – изчертава графика от указания тип за данните получени от Graphics data engine като поддържа и опции за показване на час и дата, скалиране на графиката, съобразно мин и макс валутен курс, добавяне на маркер, линия или индикатор. При поискване на изчертаване на графика за обема на търговията извиква Graphics data engine, който да събере нужните данни, и я изчертава до първата графика. Модулът дава и възможност за премахване на всички добавени индикатори, линии и маркери. За целта на добавянето на индикатор към графиката модула получава заявки от Technical Analysis подмодула на Analysis с данните за дефинирания от потребителя индикатор. Също така и модулът подава заявки за създаване на нов индикатор. При получаване на заявка за изчертаване на индикатор се указва графиката, на която да се изчертае (основна или графика за обема на търговията), и позицията му в графиката.




        1. News – отговаря за управлението на получените от сървъра новини. Модулът поддържа възможности за четене, получаване, изтриване, маркиране като важни, местене на новини между папките, реорганизация на новините.




        1. Mathematics/Statistics Library - съдържа вградените в системата математически, статистически и други функции, които могат да се използват при определянето на експертни и технически анализатори.




        1. Security & Authentication отговаря за изчисляването на МАС-овете на съобщенията и работи съвместно с Message Gateway модула за изграждането на защитена връзка, както и отговаря за регистриране на потребителя, логването му в системата и обработката от клиентската страна на процедурата по генериране на нова парола за потребителя.




        1. Configuration – отговаря за настройките на клиентския терминал като валутните двойки, чиито курсове да се показват, данните за потребителя, параметрите за осъществяване на връзка със сървъра и пр.




    • Shown Rates Configurationуправлява информацията за настройките на валутите, за курсовете на които потребителят желае да получава информация от сървъра.

    • User Configurationуправлява настройките на потребителя като данни за него – име, e-mail и пр.

    • Communication Configurationуправлява комуникационните параметри нужни за установяване на връзка със сървъра – като IP адрес на сървъра, номер на порт и пр.




        1. Configuration Dataсъдържа данните за настройките на клиентския терминал и параметрите за връзка със сървъра.




      • Shown Rates Fileсъдържа списъка с валутни двойки, за чиито курсове се е абонирал потребителя на клиентския терминал.

      • Communication Configuration File - съдържа парамерите за връзка със сървъра.




        1. GUI отговаря за графичното представяне на услугите и данните на клиента. Отделянето на този модул като презентационен слой спомага за по-лесното модифициране на изгледа на продукта, без да е нужно да се променя кардинално бизнес логиката заложена в него.

    Самият модул предоставя графични интерфейси (изгледи) за обменните курсове, сметките на потребителя, данни за позиций, новини, конфигуриране на клиентския терминал, справки, експертни анализатори, технически анализатори и други.


    1. Използвани тактики




      1. Availability tactics

    Поради спецификата на приложната област, в която следва да оперира разработваната система, е необходимо да на е на разположение 24/7 и да е възможен отговора на всяка заявка за време от максимум 1 секунда. За тази цел сървърната част трябва да поддържа възстановяване след грешка за минимално време – в рамките на милисекунди и този времеви интервал не бива да се надвишава при никакви положения. Всички възникнали грешки трябва да бъдат установявани мигновено и да се премине към повторно изпълнение на обработваната заявка, като времето за целия процес до връщането на отговор до съответната страна не трябва да надвишава 1 секунда. С оглед на тези нефункционални изисквания в архитектурата на ForexTrader са заложени следните тактики за постигане на висока надеждност са описани по-долу.




        1. Тактики за fault detection

    За целите на fault detection е избрана тактиката за използване на exception. Т.е. при възникването на проблем в някой от модулите на сървъра се вдига exception и се взима резултатът от някой от другите инстанции на модула, които обработват заявките. Също така се записва и лог с информация за настъпилия проблем с цел последващия му анализ от администраторите на системата.




        1. Тактики за fault recovery

    Избраната тактика за възстановяване след грешка е т.нар. Active redundancy (hot restart), т.е. поддържат се няколко инстанции на един и същ модул, които обработват постъпващите заявки паралелно и се взима резултата от точно една от тях. Това позволява възстановяването след настъпил fault на системата да бъде сведено до милисекунди, което ще спомогне за обработката на постъпилата от клиентския терминал или бекофис системата на брокера заявка в рамките на времевия интервал от една секунда.




        1. Tактики за fault prevention

    За целите на предодвратяването на настъпили грешки всички взаимно свързани операции (като например отваряне на позиция, задължаване на сметка) ще бъдат изпълнявани под формата на транзакции, т.е. ако дори една от тях не завърши коректно, се счита че транзакцията не е завършила успешно и системата се връща в първоначалното състояние.




      1. Modifiability tactics

    В процеса на декомпизиция на модулите на системата са ясно разграничени отговорностите на всеки от модулите и подмодулите. Те имат ясни отговорности, интерфейси и са капсулирани, което предразполага високо ниво на кохезия и значително намаляване на зависимостите помежду им (Loose coupling). В този процес са използвани тактиките за поддържане на семантична свързаност и са предвидени възможните промени, които биха последвали след пускането на системата в production. Също така за целите на конфигурирането на системата за работа със съответната бекофис система на брокера и за различните параметри на потребителя на клиентския терминал (като показваните валути) е създаден отделен модул Configuration, който използва конфигурационни файлове, съдържащи съответните параметри и съответните UI за редакцията им.




      1. Security tactics

    Съгласно изискванията на закона за финансовите институции и сделките с финансови инструменти комуникацията с клиентските терминали и бекофис системата на брокера трябва да е 100% защитена с цел запазването на банковата тайна и превенцията на извършването на разпорежданията от чуждо име. Всички съобщения, които се разменят между сървърната част и клиентския терминал, и сървърната част и бекофис системата на брокера са криптирани. Комуникацията с клиентския терминал се извършва чрез използването на SSL, а тази с бекофис системата също е защитена със SSL и се осъществява чрез VPN. Също така е предвиден модул за user authentication, който ще позволява използването на системата единствено от регистрирани в системата потребители, както и са заложени различни категории потребители с различни права на достъп и за извършване на определени операции. За постигането на високо ниво на сигурност е включено и използването на firewall, който ограничава комуникацията със сървъра единствоно до регистрирани IP адреси. За целите на превенция и прихващането на атаки в архитектурата е включена и т.нар. Intrusion detection system, която следи мрежовия трафик и го сравнява с различни модели на атаки, запазва моделите на успешни външни атаки и при засечен опит за атака срещу системата уведомява администраторите й, които да предприемат съответните действия по отстраняването на възникналия проблем.




      1. Communication tactics


    Модулите, комуникиращи по между си, имат метод за получаване на грешка при изпълнение на дадена команда от друг модул. По този начин ако даден модул преустанови нормалната си работа и влезе в авариен режим той може да уведоми модулите, с които има контакт или тези които очакват отговор от него. В следствие на това потребителя бива уведомен своевремено и останалите модули изчакват възстановяването или рестартирането на проблемната система.


    1. Интерфейси на модулите

      1. Интерфейси на модулите на сървъра

        1. Security

    • Firewall

    • Boolean CheckIncommingConnection(Socket s) – проверява дали IP адреса, който желае да се свърже със сървъра е в листата с позволени адреси и дали е блокиран временно

    • BlockTemporaryIp(Ip ip) – блокира даден адрес за определено време

    • UnblockIp(Ip ip) – отблокира даден адрес

    • ScanNetworkTraffic(List s) – сканира мрежовия трафик, като следи дали шаблони на предишни атаки съвпадат с текущия трафик

    • AdminNotificationMails(List adminMails) – записва списък от мейл адреси на отговорните за този модул администратори (за да бъдат известени при проблем касаещ тяхната намеса)

    • BuildPattern(AttackData d) – създава нов шаблон въз основа на събрани данни за атаката и го записва в базата данни

    • LogAttackData(AttackData d, Message m) – записва данните събрани за атаката в лог файловете

    • AdjustParameter(String name, String value) – променя настройките на системата

    • Cryptography

    • SecureKey GeneratePublicSecureKey(Integer bitslength) – генерира публичен ключ

    • SecureKey GeneratePrivateSecureKey(Integer bitslength) – генерира частен ключ

    • Boolean CheckPublicSecureKey(SecureKey sk) – проверява дали публичният ключ е валиден и отговаря на този потребител

    • Boolean CheckPrivateSecureKey(SecureKey sk) – проверява дали частният ключ е валиден и отговаря на този потребител

    • Buffer Encrypt/DecryptData(Buffer b, SecureKey s) – криптира и декриптира данни

    • Secure Connection

    • SSLSocket EstablishSecureConnection(Socket s, SecureKey sk) – създава нова подсигурена връзка чрез SSL

    • CloseSecureConnection(SSLSocket ss) – прекратява подсигурената връзка

        1. Communicator

    • Transaction Gateway

    • DataChannel CreateSecureDataTransferChannel(SSLSocket ss) – създава защитен комуникационен канал чрез Security модула

    • CloseSecureDataTransferChannel(DataChannel dc) – затваря защитен комуникационен канал чрез Security модула

    • RepairDataTransferChannel(DataChannel dc) – поправя комуникационните канали при проблем със свързаността

    • LogDataTransferChannelProblem(DataChannel dc, Message m) – записва данните свързани с проблеми в комуникационните канали (за да се проучат от администраторите в случай, че проблема по трасето е от страна на сървъра)

    • Datagram GetIncommingMessage() – взема поредно съобщение от опашката на новодошлите съобщения

    • SendOutgoingMessage(Datagram d) – изпраща съобщение към клиентски терминал

    • SendWrongFormatErrorMessage(Datagram d) – изпраща към клиента съобщение за неправилно форматирана заявка

    • LogMessageFormatProblem(Datagram d, Message m) – записва в логовете данните свързани с неправилно форматирано съобщение

    • AssignErrorMessage(Error e) – приема ново съобщение за грешка възникнала в някой външен модул, която има отношение към този модул

    • Message Protocol Processor

    • Datagram ReadMessage() – прочита съобщения от опашката на новопостъпилите съобщения на Transaction Gateway

    • WriteMessage(Datagram d) – записва съобщения в опашката на заминаващите съобщения на Transaction Gateway

    • List
      BuildProcessors()
      – създава набор от процесори, които да обработват определени команди и да комуникират с другите модули. Процесорите изпращат команди до другите модули и получават отговор от тях, който чрез GenerateMessage свеждат до съобшение, което предават към клиента

    • Processor ExecuteCommand(Command c) – определя кой процесор е отговорен за изпълнението на Команда и предава командата за изпълнение към него

    • Datagram GenerateMessage(Result r) – генерира съобщение на база върнати данни от изпълнение на команда

    • Command MessageToCommand(Datagram d) – създава обекти от тип Команда, като ползва данните получени от съобщението

    • LogErrors(Error e, Message m) – записва в логовете данни за възникналите грешки

    • Error GenerateError() – генерира съобщение за грешка в случай, че таква възникне преди Командата да е достигнала отговорните модули или в случай че грешката върната от отговорните модули не е достатъчно изчерпателна

    • AssignErrorMessage(Error e) – приема ново съобщение за грешка възникнала в някой външен модул, която има отношение към този модул

        1. User Authentication

    • User LoginUser(Ip ip, String email, String passkey) – проверява дали клиента е подал правилно име и парола и дали се свързва към системата от позволено IP

    • LogoutUser(User u) – прекратява сесията на потребителя

    • User RegisterUser(String name, String passkey, String email) – създава нов потребител на системата

    • ProcessLostPassword(String email) – грижи се за изпълнението на всички стъпки за възвръщане/създаване на нова парола

    • LockUser(User u, Integer seconds) – заключва потребителския акаунт в случай, че потребителят не е успял да влезе в системата повече от N брой пъти (ако си е сбъркал паролата определен брой пъти) за определено време (известява Security модула да не позволява връзка от това IP)

    • BlockUser(User u) – блокира (деактивира) потребителя за неопределен срок време, но не забранява IP адреса му (би трябвало да се ползва от администраторите предимно, когато искат да деактивират потребител, който злоупотребява или акаунта е откраднат)

    • UnBlockUser(User u) – отблокира потребител

    • LogError(Error e) – записва грешка в логовете

    • AssignErrorMessage(Error e) – приема ново съобщение за грешка възникнала в някой външен модул, която има отношение към този модул

        1. Main Data Processor

    • Possition Manager

    • Position CreateShortPosition(List
      params)
      – създава къса позиция с определени параметри (stop loss, take profit)

    • Position CreateLongPosition(List
      params)
      – създава дълга позиция с определени параметри (stop loss, take profit)

    • Open/CloseShortPosition(Position p) – отваря/затваря къса позиция

    • Open/CloseLongPosition(Position p) – отваря/затваря дълга позиция

    • VerifyDataAccuracy(Account a) – проверява верността на данните (паричното състояние на сметките на потребителя)

    • Currency ProfitRate(Position p) – изчислява печалбата (загубата) от дадена позиция

    • UpdatePossitions() – обновява данните на позициите – печалба/загуба, продажби/покупки

    • PositionDetails GetPossitionData(Position p) – създава обект с подходящ интерфейс от данните за определена позиция, от който да се генерира съобщение

    • LogError(Error e, PositionDetails pd) – записва съобщението за грешка в логовете

    • AssignErrorMessage(Error e) – приема ново съобщение за грешка възникнала в някой външен модул, която има отношение към този модул

    • Account Manager

    • Account CreateAccount(User u, IBAN iban) – добавяне на нова сметка в системата

    • CloseAccount(Account a) – затваряне на сметка

    • AccountDetails GetAccountData(Account a) – създава обект с подходящ интерфейс от данните за сметката, от който да се генерира съобщение

    • SuspendAccount(Account a) – временно замразяване на сметка

    • UpdateAccountSettings(Account a, String parameter, String value) – промяна на настройките на сметката

    • UpdateAccountData(Account a) – актуализиране на данните (паричните ресурси) по сметката

    • Error GenerateAccountError(AccountDetails ad) – генерира съобщение за грешка

    • LogAccountError(Error e, Message m) – записва съобщението за грешка в логовете

    • AssignErrorMessage(Error e) – приема ново съобщение за грешка възникнала в някой външен модул, която има отношение към този модул

    • AddCurrency(Currency c) – добавя нова валута в системата

    • RemoveCurrency(Currency c) – премахва валута от системата

    • UpdateRatesData(List) – обновява списъка с валутни курсове

    • List GetRatesData() – връща списък данните за валутните курсове

    • Error GenerateCurrencyError(Currency c, Message m) – генерира съобщение за грешка

    • LogError(Error e) – записва съобщението за грешка в логовете

    • AssignErrorMessage(Error e) – приема ново съобщение за грешка възникнала в някой външен модул, която има отношение към този модул

    • News and Statistics

    • AddNews(News n) – добавяне на новина

    • RemoveNews(News n) – премахване на новина

    • List GetNews() – създава списък на актуалните новини

    • LogError(Error e) – записва съобщението за грешка в логовете

    • AssignErrorMessage(Error e) – приема ново съобщение за грешка възникнала в някой външен модул, която има отношение към този модул

    • Security Data Manager

    • List GetAllowedIps() – връща списък с всички разрешени IP адреси за достъп към системата

    • AddAllowedIp(Ip ip) – добавя IP адрес към списъка с разрешени адреси за достъп към системата

    • List
      GetAttackPatterns()
      – връща списък с всички шаблони на атаки

    • AddAttackPattern(Pattern p) – добавя шаблон на атака към списъка от шаблони

        1. Data Storage

    Всички подмодули трябва да имплементират следните методи:

    T зависи от модула, върху който се извършват операцийте



    • List<T> GetAll() – взема списък с всички елементи от дадения подмодул

    • Remove(T item) – премахва елемент от дадения подмодул

    • Add(T item) – добавя нов елемент в дадения подмодул

    • T Update(T item, Т newItem) – опреснява съществуващия елемент item в подмодула с данните от newItem

    • LogError(Error e) – записва грешка в логовете

    • AssignErrorMessage(Error e) – приема ново съобщение за грешка възникнала в някой външен модул, която има отношение към този модул



        1. Сподели с приятели:
  • 1   2   3   4   5




    ©obuch.info 2024
    отнасят до администрацията

        Начална страница