You are on page 1of 13

Универзитет у Београду

Електротехнички факултет

ЈАВА ЛИНДА - RMI


Конкурентно и дистрибуирано програмирање

Андрија Д. Ницић 2020/0176


Београд, Јануар 2023.
1. ТЕКСТ ЗАДАТКА 3

2. ПРЕДЛОЖЕНО РЕШЕЊЕ 4

3. UML ДИЈАГРАМИ 5

КЛАСНИ ДИЈАГРАМ 1: КОРИСНИЧКИ ПРОГРАМ 5


КЛАСНИ ДИЈАГРАМ 2: RADNASTANICA 5
КЛАСНИ ДИЈАГРАМ 3: ЦЕНТРАЛНИ СЕРВЕР 6
КЛАСНИ ДИЈАГРАМ 4: ЛИНДА БИБЛИОТЕКА 6
ДИЈАГРАМ ИНТЕРАКЦИЈЕ 1: КОНЕКТОВАЊЕ НА СЕРВЕР 7
ДИЈАГРАМ ИНТЕРАКЦИЈЕ 2: СЛАЊЕ ЗАДАТКА НА СЕРВЕР 7

4. КОРИСНИЧКО УПУТСТВО 8

5. КОРИСНИЧКО УПУТСТВО ЗА НАПРЕДНЕ КОРИСНИКЕ 9

6. ПРИМЕРИ РАДА ПРОГРАМА У РЕГУЛАРНИМ СИТУАЦИЈAМА 10

СЛИКА 1: КОРИСНИЧКА АПЛИКАЦИЈА 10


СЛИКА 2: ЦЕНТРАЛНИ СЕРВЕР 11
СЛИКА 3: РАДНА СТАНИЦА 11

7. ПРИМЕРИ РАДА ПРОГРАМА У ВАНРЕДНИМ СИТУАЦИЈАМА 12

СЛИКА 4: РАДНА СТАНИЦА – НЕУСПЕШНА КОНЕКЦИЈА НА СЕРВЕР 12


СЛИКА 5: КОРИСНИЧКИ ПРОГРАМ – НЕПРАВИЛАН УНОС ПАРАМЕТАРА ЗА ЗАДАТАК 12
СЛИКА 6: КОРИСНИЧКИ ПРОГРАМ – НЕПРАВИЛНО ИЗВРШАВАЊЕ ЗАДАТКА (НАЗИВ КЛАСЕ И ЗАДАТАК СЕ НЕ ПОКЛАПАЈУ)
13
СЛИКА 7: КОРИСНИЧКИ ПРОГРАМ – ОБАВЕШТЕЊЕ О ПРЕКИДУ РАДА ПОСЛА 13

2
1. ТЕКСТ ЗАДАТКА
Пројектовати дистрибуирани рачунарски систем који Након слања захтева за обраду кориснички програм
треба да омогући дистрибуирану обраду и међусобну може да раскине везу са централним сервером. Веза
удаљену синхронизацију временски захтевних може бити раскинута гашењем програма или
послова. Ова синхронизација треба да се обави по затварањем комуникационог канала. Када се следећи
угледу на виртуелни заједнички простор торки пут повеже, кориснички програм може да тражи
заједнички за све послове унутар скупа послова који резултате претходно задате обраде. Треба обезбедити
постоји код библиотеке C-Linda. да централни сервер може да у паралели да прима
већи број послова које је потребно обрадити.
Програм треба да ради у систему који се састоји од
Кориснички програм може од централног сервера да
више рачунара повезаних у LAN (Local Area Network)
тражи информације о статусу посла, а може да тражи
или WAN (Wide Area Network).
и резултате. Одмах по стартовању, радне станице
У систему постоји три типа програма: шаљу централном серверу информацију о томе да су
стартоване и број послова које могу у паралели да
1. Централни сервер који служи за праћење
обрађују.
рада извршавања дистрибуиране обраде, чување
информација о доступним чворовима у мрежи и Параметри посла које клијент задаје су: команда која
могућност поновног стартовања појединих послова. се задаје Јава виртуелној машини да би покренуо
архиву, датотеке које са клијентског рачунара треба
2. Радна станица која од централног сервера
пребацити на радну станицу да би команде могле да
добија послове које треба одрадити.
се изврше (не више од 6), датотеке које са радне
3. Кориснички програм, који задаје посао станице треба пребацити на клијентски рачунар да
који треба урадити и његове параметре. које представљају резултате (не више од 6). Ови
параметри могу да се задају или путем корисничког
Процес започиње тако што кориснички програм интерфејса или путем текстуалне датотеке.
задаје посао који је потребно обрадити. Овај посао
представља програм писан у програмском језику Јава Централни сервер у лог уписује време када је
запакован у jar архиву. Након тога кориснички пристигао сваки посао, број под којим је посао
програм контактира централни сервер коме сачуван, име рачунара коме је посао прослеђен, време
прослеђује тај посао и параметре потребне за његову када је посао завршен и његов тренутни статус.
обраду. Када централни сервер прими посао и његове Статус посла може да буде: Ready – приспео на
параметре, он га прослеђује једној радној станици, сервер, али није никоме прослеђен, Scheduled –
чека резултат обраде и враћа комплетан резултат тренутно се прослеђује радној станици, Running –
клијенту. извршавање је у току, Done – посао се успешно
извршио, Failed – посао није могао да се изврши,
Када радна станица прими посао започиње са Aborted – корисник је одустао од извршавања посла.
његовим извршавањем, на основу примљених
параметара. Посао се извршава на радној станици Проблем решити искључиво користећи Јава RMI
тако што радна станица покреће посао који је дат као мрежну комуникацију. Решење треба да буде
jar архива којој прослеђује параметре које је клијент независно од посла који се обавља. За сваки од ова
задао. Као посебан параметар поставља путању до jar три типа рачунара треба да постоји одговарајући
архиве у којој се налази библиотека за удаљену графички кориснички интерфејс (GUI треба да буде
синхронизацију. Та библиотека је реализована по развијен користећи Java SWING компоненте). Радна
угледу на библиотеку C-Linda која се користи за станица треба да има могућност покретања и без
синхронизацију. Интерфејс који је потребно за корисничког интерфејса.
задовољи је дат у прилогу овог документа.
Пошто се у датом корисничком послу може
покренути више послова (метода eval(...)), они треба
да буду распоређени на слободне радне станице. Када
се заврши извршавање програма, радна станица
прикупљене излазне токове података прослеђује
серверу, као и резултате извршавања. Да би се
обезбедило прикупљање информација о активним
радним станицама централни сервер на сваких x
секунди проверава да ли је нека радна станица
исправна. Уколико није исправна, обавештава
корисника који је посао престао да се извршава.
Након тога корисник треба да одлучи да ли посао
прекинути или да се прекинути део проследи некој
слободној радној станици. Уколико корисник није
доступан, прекида се извршавање целог посла.
3
2. ПРЕДЛОЖЕНО РЕШЕЊЕ
Централни сервер нам служи за координацију између процеса и као виртуелни простор на коме се налазе
приспелих задтака и слободних радних станица. Због сами параметри задтака док не стигну на сервер или
тога морамо на серверу да памтимо које све радне радну станицу.
станице су доступне и да ли оне тренутно извршавају
Уколико радна станица стане са радом приликом
неки задатак.
извршавања неког задатка, она ако може треба да
Што се тиче задатака који су приспели на сервер проследи те информације серверу и онда он
(њихов статус је Ready), они ће напустити сервер кад обавештава корисника који је послао одређени
се деси једна од ствари: задатак о томе. У случају да то не успе, ми немамо
како да обавестимо корисника да је задатак није могао
1. Корисник који је послао тај задатак
да се изврши до краја.Због тога сервер такође мора да
одлучи да га прекине (Aborted)
прати на свим станицама, који је последњи задатак
2. Слободна радна станица га преузме
које су оне извршавале (ако јесу), да би корисник
(Scheduled)
могао бити обавештен.
Сада, потребно је дефинисати шта ће тачно сваки од
Сличну ситуацију имамо и код сервера, он ако може,
програма да ради.
обавештава све клијенте да је престао са радом. Свим
Централни сервер има опције да се покрене и да се корисницима ,који су у датом моменту били повезани,
заустави. Кад се он заустави, сви клијенти који су шаље негативе резултате задатака тј, обавештава их
повезани на њега остају и даље повезани, само сада да нису успели да се изврше. На самом крају
они не могу да размењују податке. Уколико неки од сервер ,,рестартује“ све клијенте.
клијената раскине везу или неки од задатака заврше
И за сам крај потребно је написати једноставне
са радом док је сервер угашен, он ће то приметити и
задатке за извршавање који користе нашу Linda
ажурирати податке тек кад се упали поново. Такође,
библиотеку за синхронозацију процеса.
потребно је да сервер констано проверава да ли су сви
повезани клијенти исправни, јер ако се неко од њих
угаси а систем то не детектује иницијално, сервер
мора некако да га избаци.
Радна станица има само једну опцију, а то је да се
повеже на сервер и чека задатке. Сваки пут када се
повеже на сервер или заврши са извршавањен задатка,
она проверава да ли има задатака који чекају на
серверу. Сада, исто као и код сервера, станица мора
константно да проверава да ли је сервер исправан, јер
уколико није, она мора да се дисконектује са њега да
би могла било шта да ради после. Радна станица се
сматра слободном само ако је она повезана на сервер
и не извршава ни један задатак.
Корисничка апликација има већ има доста опција али
пре свега, да би било шта могло да се ради, корисник
мора да се повеже на сервер. Након повезивања,
доступне су следеће опције:
1. Слање задатака на сервер
2. Обустављање рада активног задатка
3. Гашење комуникационог канла
(Dissconect) – и након тога могућност да
се добију резултати задатака који су
завршили са радом док нисмо били
повезани на сервер. За то нам је потребно
да на серверу чувамо резултате задатака
корисника који више нису повезани
4. Могућност провере статуса и резултата
послатих (завршених) задатака – за ово
нам је потребно да на серверу чувамо
историју свих задатака
Следећа ствар коју је потребно имплементирати је
интерфејс Linda који је дат уз сам текст пројекта и
који ће нам служити за саму синронизацију свих
4
3. UML ДИЈАГРАМИ

Класни дијаграм 1: Кориснички програм

Класни дијаграм 2: RadnaStanica

5
Класни дијаграм 3: Централни Сервер

Класни дијаграм 4: Линда библиотека

6
Дијаграм интеракције 1: конектовање на сервер

Дијаграм интеракције 2: слање задатка на сервер

7
4. КОРИСНИЧКО УПУТСТВО
Централни сервер 4. Product – рачуна производ
функције cos(x)/ex на интервалу
Апликација централног сервера има две опције:
(min, max)
покретање (Start Server) и заустављање (Stop Server).
На њој се прате сва дешавања на серверу, као и број Следећа два параметра су поља min и max. Потребно
слобондних станица, задатака који се извршавају и је унети целобројне вредности да би задатак могао да
чекају да их станица узме. Све промене које су се се пошаље.
догодиле док је сервер био заустављен, ажурираће се
Наредни параметар је путања до наше Линда
на поновном покретању.
библиотеке (LindaImpl) запаковане у jar фајл. Да би се
Пре него што почнемо са било каквим радом на уопште послао задатак потребно је да путања води до
другим апликацијама, неопходно је покренути сервер. постојећег jar фајла, а да би се задатак могао
исправно извршити, неопходно је да тај фајл буде
Линда библиотека.
Радна Станица
Последња два параметра су нам назив функције и пун
Радна станица након паљења има једну опцију, а то је назив класе. За назив се уноси вредност ,,main”, док
повезивање на сервер (Connect), са параметрима које за пун назив класе уносимо ,,stuff.paket.testovi.(Назив
треба унети – Host и Port. За порт се уноси вредност задатка)”. Да би се задатак исправно извршио назив
4001, док за хост имамо две ситуације: задатка мора да се поклапа са изабраним задатком из
падајућег менија.
1. Уколико је станица на истом
рачунару као и сервер уносимо Следећа опција је прекидање активног задатка
вредност ,,localhost” (Cancel active job). Задатак је активан уколико он има
2. Уколико није, потребно је статус Ready тј. налази се на централном серверу.
отворити Command prompt Биће прекинут задатак који се најдуже налази на
апликацију на рачунару на ком серверу. Ако се не налази ни један наш задатак на
се налази сервер. Након тога серверу, акција ће бити без ефекта. Није могуће
куцамо команду ipconfig и прекинути задатак који се тренутно извршава.
вредност коју треба да унесемо
Опција Disconnect служи за затварање
се налази под редом означеним
комуникационог канала. Тада се одјављујемо са
са IPv4
сервера, и нова опција нам постаје доступа – Get lost
results. Пре него што можемо да је искористимо
потребно је да се опет повежемо на исти сервер. Када
Корисничка апликација
је искористимо, стижу нам резултати свих наших
Корисничка апликација као и радна станица има задатака који су завршили са радом ток је канал био
опцију за повезивање на сервер и за параметре које угашен. Тада опција постаје недоступна.
уносимо важи све исто као и за станицу. Поред те
Опције Results/ Status, нам за редни број задатка који
опције имамо још доста других опција али да би оне
унесемо (уколико постоји) враћа његове резултате
биле доступне потребно је прво да се повежемо на
(уколико је задатак завршен)/ тренутни статус.
сервер.
Уколико се радна станца угаси приликом извршавања
Прва опција је за слање задатка на сервер (Start job),
задатка који смо ми послали, искочиће нам нови
да би могла да се изврши тек након што се унесу сви
прозор који нас обавештава о томе и поставља нам
параметри везани за задатак. Први параметар је
питање, да ли желимо да поново пошаљемо исти
падајући мени и он нам служи за избор задатка.
задатак. Ако се притисне да, задатак се опет шаље на
Понуђене су 4 опције:
сервер и чека да га узме слобона станица. Ако се
1. Test – враћа нам унете min и max притисне не, сматра се да се задатак није успео
параметре успешно извршити (Failed).
2. Integral – рачуна интеграл ex/x на
интервалу (min, max)
3. Sum – рачуна суму низа 1/(1+x2)
на интервалу (min, max)

8
5. КОРИСНИЧКО УПУТСТВО ЗА НАПРЕДНЕ КОРИСНИКЕ
Све три апликације нису дизајниране да напредни не пошаље исправна линдина
корисници могу нешто другачије или више да раде, па библиотека као параметар (тј.
се корисничко упутсво јако мало разли кује од може било шта да се унесе).
предходног. У сваком случају, битно је напоменути 6. Као параметар назив функције у
неколико ствари: корисничкој апликацији, није
нужно да она буде main метода,
1. Уколико дође до насилног или
али сва 4 задатка коју су
неочекиваног гашења било које
понуђена – њихов посао се
од ове три апликације, треба
одвија у њој, па самим тим не би
сачекати око 2 секунде да систем
радило ништа другпо.
примети да се неко одвезао, и у
том периоду не би требали
диарати ниједну од осталих
упаљених апликација.
2. Када дође до насилног гашења
сервера, након што се сви
клијенти рестартују, те
клијентске апликације могу да се
повежу само на сервер на ком су
биле иницијално и то тек када се
сервер опет оспособи. Исто важи
и у ситуацији када угасимо
комуниациони канал између
корисничке апликације и
централног сервера.
3. Кад се централни сервер угаси,
сви подаци који су били на њему
дотад се губе.
4. Радне станице добијају пинг од
сервера само ако су оне
слободне.
5. Апликација Test не садрћи позиве
линде тј. она је само један обичан
Hello world! програм који нам
враћа унете параметре, па је
могуће да се она изврши и ако се

9
6. ПРИМЕРИ РАДА ПРОГРАМА У РЕГУЛАРНИМ СИТУАЦИЈAМА

Слика 1: Корисничка апликација

10
Слика 2: Централни Сервер

Слика 3: Радна Станица

11
7. ПРИМЕРИ РАДА ПРОГРАМА У ВАНРЕДНИМ СИТУАЦИЈАМА

Слика 4: Радна станица – неуспешна конекција на сервер

Слика 5: Кориснички програм – неправилан унос параметара за задатак

12
Слика 6: Кориснички програм – неправилно извршавање задатка (назив класе и задатак се не поклапају)

Слика 7: Кориснички програм – обавештење о прекиду рада посла

13

You might also like