Расподељено израчунавање

Програми за обраду огромних количина података често расподељују напор међу више рачунара. Дистрибуирана или расподељена рачунарска апликација је она у којој се више међусобно повезаних, али независних рачунара координира како би извршили заједничко израчунавање.

Различити рачунари су независни у смислу да не деле меморију директно. Уместо тога, они међусобно комуницирају путем порука, односно информације се преносе са једног рачунара на други преко мреже.

Поруке

Поруке послате између рачунара су секвенце бајтова. Сврха поруке варира; поруке могу захтевати податке, слати податке или упутити други рачунар да вреднује позив неке процедуре. У свим случајевима, рачунар пошиљалац мора кодирати информације на начин да их рачунар прималац може декодирати и правилно интерпретирати и протумачити. Да би то учинили, рачунари усвајају протокол за поруке који додељује значење секвенцама бајтова.

Протокол за поруке представља скуп правила за кодирање и интерпретацију, то јест тумачење порука. И рачунари који шаљу и који примају морају да се договоре о семантици поруке да би омогућили успешну комуникацију. Многи протоколи за поруке одређују да се порука подудара са одређеним форматом у којем одређени битови на фиксним позицијама указују на фиксне услове. Неки други протоколи користе посебне бајтове или секвенце бајтова да би разграничили делове порука, баш као што заграде разграничавају подизразе у синтакси програмског језика.

Протоколи за поруке нису одређени програми или софтверске библиотеке. Уместо тога, то су правила која могу бити примењена од стране различитих програма, чак и написана на различитим програмским језицима. Као резултат, рачунари са потпуно различитим софтверским системима могу учествовати у истом расподељеном систему, једноставно усклађујући се са протоколима порука који управљају системом.

TCP/IP протокол

На интернету се поруке преносе с једног рачунара на други помоћу интернет протокола који одређује начин преноса пакета података између различитих мрежа како би се омогућила глобална интернет комуникација. Интернет протокол (ИП) је пројектован под претпоставком да су мреже суштински непоуздане у било којој тачки и да су динамичке по својој структури. Штавише, не претпоставља се да постоји било какво централно праћење или надгледање комуникације. Сваки пакет садржи заглавље које садржи одредишну ИП адресу, заједно са осталим информацијама. Сви пакети се прослеђују широм мреже према одредишту користећи једноставна правила рутирања на најбољи начин.

Овакав дизајн намеће ограничења у комуникацији. Пакети пренесени помоћу савремених имплементација интернет протокола (IPv4 и IPv6) имају максималну величину од 65535 бајтова. Веће количине података морају се поделити на више пакета. Интернет протокол не гарантује да ће пакети бити примљени истим редоследом као што су послати. Неки пакети се могу изгубити, а неки пакети могу се пренети више пута.

Трансмисиони контролни протокол је апстракција дефинисана у смислу интернет протокола која пружа поуздан, уређен пренос произвољно великих токова података. Протокол пружа ову гаранцију исправним редоследом преноса пакета путем интернет протокола, уклањањем дупликата и захтевањем поновног преноса изгубљених пакета. Ова побољшана поузданост долази на рачун кашњења, времена потребног за слање поруке од једне тачке до друге.

Трансмисиони контролни протокол (енгл. Transmision Control ProtocolTCP) разбија ток података у TCP сегменте, од којих сваки укључује део података којем претходи заглавље које садржи информације о секвенци и стању за подршку поузданом и уређеном преносу података. Неки TCP сегменти уопште не укључују податке, већ само успостављају или прекидају везу између два рачунара.

Успостављање везе између два рачунара \(X\) и \(Y\) одвија се у три корака:

  1. \(X\) шаље захтев порту \(Y\) за успостављање TCP везе, дајући и број порта на који очекује одговор.

  2. \(Y\) шаље одговор на порт који је одредио \(X\) и чека да његов одговор буде потврђен.

  3. \(X\) шаље одговор на потврду, потврђујући да се подаци могу преносити у оба смера.

Након овог „руковања” у три корака, TCP веза је успостављена и \(X\) и \(Y\) могу међусобно да шаљу податке. Прекид TCP везе одвија се као низ корака у којима и клијент и сервер захтевају и потврђују крај везе.

Клијент/Сервер архитектура

Клијент/сервер архитектура је начин за издавање и пружање услуге из централног извора. Сервер пружа услугу и више клијената комуницира са сервером да би је користило. У овој архитектури клијенти и сервери имају различите улоге. Улога сервера је да одговори на захтеве клијената за услугом, док је улога клијента да издаје захтеве и користи одговор сервера да би извршио неки задатак. Дијаграм у наставку илуструје ову архитектуру.

Figure made with TikZ

Најутицајнија употреба овог модела је савремена светска комуникациона мрежа позната и само као веб. Када интернет прегледач приказује садржај интернет странице, неколико програма који се извршавају на независним рачунарима ступају у интеракцију користећи клијент/сервер архитектуру. Овај одељак описује поступак захтева за интернет страницом како би се илустровале кључне идеје у дистрибуираним, односно расподељеним клијент/сервер системима.

Улоге

Интернет прегледач на рачунару интернет корисника има улогу клијента када захтева одређену интернет страницу. Када захтева садржај од неког интернет домена, као што је www.kg.ac.rs, мора да комуницира са најмање два различита сервера.

Клијент прво захтева интернет протокол (ИП) адресу рачунара који се налази под тим именом од система имена домена познатог и као DNS који пружа услугу повезивања имена домена на ИП адресе, који су нумерички идентификатори рачунара на интернету. Пајтон може упутити један такав захтев директно помоћу socket модула.

>>> from socket import gethostbyname
>>> gethostbyname('www.kg.ac.rs')
'147.91.209.71'

Клијент затим захтева садржај интернет странице од интернет сервера који се налази на тој ИП адреси. Одговор у овом конкретном случају је HTML документ који садржи почетну страну универзитета која даље описује његов историјат, чланице, вести, као и неке изразе који указују на то како интернет прегледач клијента треба тај садржај да постави на екран корисника. Пајтон може да упути два захтева потребна за преузимање овог садржаја користећи се urllib.request модулом.

>>> from urllib.request import urlopen
>>> одговор = urlopen('http://www.bg.ac.rs').read()
>>> одговор[:15]
b'<!DOCTYPE html>'

По пријему овог одговора, интернет прегледач издаје додатне захтеве за слике, видео записе и друге помоћне компоненте странице. Ови захтеви се покрећу јер оригинални HTML документ садржи адресе додатног садржаја и опис њиховог начина уградње на страницу која се приказује.

HTTP захтев

Протокол преноса хипертекста (енгл. Hypertext Transfer Protocol) или скраћено HTTP је протокол имплементиран помоћу TCP-а који управља веб (WWW) комуникацијом. Претпоставља клијент/сервер архитектуру између интернет прегледача и интернет сервера. HTTP наводи формат порука које се размењују између прегледача и сервера. Сви интернет прегледачи користе HTTP формат за захтевање страница од сервера, а сви сервери користе HTTP формат за враћање својих одговора.

Постоји неколико врста HTTP захтева од којих је најчешћи GET захтев за одређену интернет страницу. Захтев GET наводи локацију. На пример, уношењем адресе http://en.wikipedia.org/wiki/University_of_Kragujevac у интернет прегледач, издаје се HTTP GET захтев на порту 80 сервера који се налази на en.wikipedia.org за садржај на локацији /wiki/University_of_Kragujevac.

Сервер враћа HTTP одговор који личи као овај у наставку:

HTTP/1.1 200 OK
Date: Wed, 20 Oct 2010 20:10:20 GMT
Server: Apache/2.4.37 (centos) OpenSSL/1.1.1c
Content-Type: text/html; charset=UTF-8

. . .   садржај интернет странице   . . .

У првом реду, текст 200 OK указује да није било грешака у одговору на захтев. Следећи редови заглавља дају информације о серверу, времену и датуму и типу садржаја који се враћа.

Ако је случајно унешена погрешна интернет адресу можда врло вероватно је дошло до приказа неке од следећих порука:

HTTP 404, 404 Not Found, 404, 404 Error, Page Not Found, File Not Found, или Server Not Found

То значи да је сервер вратио HTTP заглавље које је почиње са:

HTTP/1.1 404 Not Found

Бројеви 200 и 404 су HTTP кодови одговора. Фиксни скуп кодова за одговор је уобичајена одлика протокола за поруке. Пројектанти протокола покушавају да предвиде уобичајене поруке које ће се послати путем протокола и доделе фиксне кодове како би смањили величину преноса и успоставили заједничку семантику порука. У HTTP протоколу, код одговора 200 означава успех, док 404 указује на грешку да ресурс није пронађен. У HTTP 1.1 стандарду постоје и разни други кодови одговора који се такође могу срести.

Модуларност

Концепти клијента и сервера су моћне апстракције. Сервер пружа услугу, могуће истовремено за више клијената, а клијент је користи. Клијенти не морају да знају појединости о начину пружања услуге или како се подаци које добијају чувају или израчунавају, а сервер не мора да зна како ће се њихови одговори користити.

На мрежи, о клијентима и серверима се размишља као о физички различитим рачунарима, али чак и системи на једном рачунару могу имати клијент/сервер архитектуру. На пример, сигнали са улазних уређаја на рачунару морају или би макар требало да буду опште доступни програмима који се извршавају на рачунару. Програми су клијенти који примају улазне податке из миша и тастатуре. Управљачки програми уређаја оперативног система су сервери, који примају физичке сигнале и служе им као корисни улаз. Поред тога, централна процесорска јединица и специјализовани графички процесор често учествују у клијент/сервер архитектури са централном процесорском јединицом као клијентом и графичким процесором као сервером за слике и видео записе.

Недостатак клијент/сервер система је тај што је сервер једна тачка отказа. То је једина компонента која има могућност давања, односно пружања услуге. Може бити било који број клијената који су заменљиви и могу долазити и одлазити по потреби.

Још један недостатак клијент/сервер система је тај што рачунарски ресурси постају оскудни ако има превише клијената. Клијенти повећавају потражњу за системом без давања било каквих својих рачунарских ресурса.

Системи истог ранга

Модел клијент/сервер је погодан за ситуације оријентисане на услуге. Међутим, постоје и други рачунски циљеви за које је равноправнија подела рада далеко бољи избор. Термин једнорангна или децентрализована, још и P2P (од енгл. peer-to-peer) мрежа користи се за описивање дистрибуираних, то јест расподељених система у којима је рад подељен између свих компоненти система. Сви рачунари шаљу и примају податке и сви доприносе неком својом процесорском снагом и меморијом. Како се расподељени систем повећава по величини, повећава се и његов капацитет рачунарских ресурса. У једнорангном систему, све компоненте система доприносе одређену процесорску снагу и меморију расподељеном израчунавању.

Подела рада међу свим учесницима је препознатљива карактеристика једнорангних или децентрализованих система. То значи да чворови у мрежи морају бити у могућности да поуздано комуницирају једни с другима. Да би се осигурало да поруке стигну на одредишта, децентрализовани системи једнаког ранга морају имати организовану мрежну структуру. Компоненте у овим системима сарађују како би одржавале довољно информација о локацијама других компонената за слање порука на предвиђена одредишта.

У неким децентрализованим системима с једнаким рангом посао одржавања исправности мреже преузима скуп специјализованих компоненти. Такви системи нису чисти једнорангни системи, јер имају различите врсте компонената које служе различитим функцијама. Компоненте које подржавају децентрализовану мрежу делују попут скела: помажу мрежи да остане повезана, одржавају информације о локацијама различитих рачунара и помажу новопридошлицама да заузму место у њиховом суседству.

Најчешћа примена децентрализованих једнорангних система су пренос података и складиштење података. За пренос података, сваки рачунар у систему доприноси слању података преко мреже. Уколико се одредишни рачунар налази у окружењу одређеног рачунара, тај рачунар помаже у слању података. За складиштење података, скуп података може бити превелик да би могао да стане на било који појединачни рачунар или сувише вредан да би се чувао на само једном рачунару. Сваки рачунар чува мали део података и може бити више копија истих података распоређених на различитим рачунарима. Када се неки од рачунара поквари или из другог разлога закаже, подаци који су били на њему се могу повратити из других копија и прекопирати назад по пристизању његове замене.

Скајп, програм за пружање аудио и видео разговора и ћаскања, пример је апликације за пренос података са децентрализованом једнорангном архитектуром. Када двоје људи на различитим рачунарима разговарају преко Скајпа, њихова комуникација се преноси путем децентрализоване једнорангне мреже. Ова мрежа се састоји од других рачунара (или паметних телефона) који користе Скајп апликацију. Сваки рачунар зна где се налази неколико других рачунара у његовом суседству. Рачунар помаже у слању пакета на одредиште тако што га прослеђује суседу, који га прослеђује неком другом суседу, и тако даље, све док пакет не стигне на предвиђено одредиште. Скајп није чисти децентрализовани једнорангни систем. Мрежа скела суперчворова одговорна је за пријављивање и одјављивање корисника, одржавање информација о локацијама њихових рачунара и модификовање мрежне структуре када корисници улазе и излазе у њу.