Publicēšana — abonēšana

“Publicēšana — abonēšana” (angļu: publish–subscribe) programmatūras arhitektūrā ir ziņojumapmaiņas modelis, kas apraksta ziņojumu plūsmu starp lietojumprogrammām, ierīcēm vai pakalpojumiem. Šajā modelī, atšķirībā no citiem ziņojumapmaiņas veidiem, ziņojumi netiek sūtīti tiešā veidā no sūtītāja adresātam, bet ziņojumu saņemšanu no izdevējiem un izsūtīšanu abonentiem koordinē brokeris (starpnieks) jeb serveris. Tas nodrošina visu ziņojumu saņemšanu, filtrēšanu, nosaka klientus, kam jāsaņem ziņojumi, un pārsūta ziņojumus parakstītājiem.
Ziņojumi tiek kategorizēti tēmās (angļu: topic; sauktas arī par klasēm vai kanāliem). Izdevējs ziņojumu nosūta noteiktai tēmai, tieši "nezinot", kuri abonenti to saņems. Savukārt abonents saņem visas ziņas no noteiktas tēmas, tieši "nezinot", kurš izdevējs to publicējis.
Šis modelis parasti ir daļa no lielākas ziņojumapmaiņas starpprogrammatūras sistēmas. Lielākā daļa ziņojumapmaiņas sistēmu atbalsta gan “publicēšana — abonēšana” sistēmas, gan ziņojumu rindas modeļus, piemēram, Java Message Service.
Šis modelis nodrošina lielāku tīkla mērogojamību un dinamiskāku tīkla topoloģiju nekā ziņojumu rindas modelis.
“Publicēšana — abonēšana” modeli plaši izmanto lietu interneta, automatizācijas, tīkla operāciju un izkliedētās mākoņvides sistēmās.
Ziņojumu datu saturs var būt jebkas, sākot no vienas skaitliskas vērtības līdz pat sarežģītiem objektiem, kas attēlo tekstu, sensora datus, audio, video vai citu digitālo saturu.

Vēsture

Viena no agrākajām publiski aprakstītajām “publicēšana — abonēšana” sistēmām bija Isis Toolkit “jaunumu” apakšsistēma, kas aprakstīta 1987. gada Skaitļošanas tehnikas asociācijas Operētājsistēmu principu simpozija konferencē, laikrakstā “Exploiting Virtual Synchrony in Distributed Systems”.

Ziņojumu filtrēšana

“Publicēšana — abonēšana” modelī no visie publicētajiem ziņojumiem abonenti parasti saņem tikai apakškopu. Ziņojumu atlasīšana saņemšanai un apstrādei tiek saukta par filtrēšanu. Filtrēšana parasti notiek pēc tēmas vai satura.
Uz tēmām balstītā sistēmā ziņas tiek publicētas “tēmās” vai nosauktajos loģiskajos kanālos. Abonenti uz tēmām balstītā sistēmā saņems visas ziņas, kas publicētas tēmās, kuras tie abonē, un visi tēmas abonenti saņems vienādas ziņas. Izdevējs ir atbildīgs par to ziņojumu klašu definēšanu, kuras abonenti var abonēt.
Uz saturu bāzētā sistēmā ziņojumi tiek piegādāti abonentam tikai tad, ja šo ziņojumu atribūti vai saturs atbilst abonenta noteiktajiem ierobežojumiem. Abonents ir atbildīgs par ziņu klasificēšanu.
Dažas sistēmas atbalsta šo abu formu hibrīdu; izdevēji izliek ziņojumus tēmā, kamēr abonenti reģistrē uz saturu bāzētas parakstīšanās uz vienu vai vairākām tēmām.

Topoloģija

Daudzās “publicēšana — abonēšana” sistēmās izdevēji sūta ziņojumus brokerim vai notikumu kopnei, un abonenti reģistrē abonementus pie šī brokera, ļaujot brokerim veikt filtrēšanu. Brokeris parasti veic saglabāšanas un pārsūtīšanas funkciju, lai maršrutētu izdevēju ziņojumus abonentiem. Turklāt brokeris var noteikt prioritāti ziņojumiem rindā pirms maršrutēšanas.
Abonenti var reģistrēties noteiktiem ziņojumiem pēc veidošanas laika, inicializācijas laika vai izpildlaika. Grafiskās lietotāja saskarnes sistēmās abonentus var kodēt, lai reaģētu uz lietotāju komandām (piemēram, noklikšķinot uz pogas), kas atbilst veidošanas laika reģistrācijai. Daži ietvari un programmatūras produkti izmanto XML konfigurācijas failus, lai reģistrētu abonentus. Šie konfigurācijas faili tiek nolasīti inicializācijas laikā. Visizsmalcinātākā alternatīva ir iespēja bonentus pievienot vai noņemt izpildlaikā. Šī pēdējā pieeja tiek izmantota, piemēram, datu bāzes trigeros, adresātu sarakstos un RSS.
Datu izplatīšanas pakalpojuma (DDS) starpprogrammatūra neizmanto brokeru vidū. Tā vietā katrs izdevējs un abonents “publicēšana — abonēšana” sistēmā dalās ar metadatiem savā starpā, izmantojot IP multiraides. Izdevējs un abonenti šo informāciju saglabā kešatmiņā lokāli un maršrutē ziņojumus, pamatojoties uz koplietojamā informācijā apzinātajām attiecībām.

Vaļīga sasaiste

Izdevēji ir vaļīgi saistīti ar abonentiem, un nav pat jāzina par to eksistenci. Tēmai esot pamatā, izdevējiem un abonentiem ir ļauts palikt nezinošiem par sistēmas topoloģiju. Katrs var turpināt darboties kā normāli neatkarīgs no otra. Tradicionālajā cieši saistītajā klientu un serveru paradigmā klients nevar sūtīt ziņojumus serverī, kamēr nedarbojas servera process, kā arī serveris nevar saņemt ziņojumus, ja nav palaists klients. Daudzas “publicēšana — abonēšana” sistēmas atsaista ne tikai izdevēju un abonentu atrašanās vietas, bet arī atsaista tās īslaicīgi. Vispārēja stratēģija, ko izmanto starpprogrammatūras analītiķi ar šādām “publicēšana — abonēšana” sistēmām, ir noņemt izdevēju, lai ļautu abonentam darboties, izmantojot neizpildītos pakalpojumus (joslas platuma ierobežošanas veids).

Mērogojamība

“Publicēšana — abonēšana” sniedz iespēju labākai mērogošanai nekā tradicionālais “klients — serveris” modelis, izmantojot paralēlo darbību, ziņojumu kešošanu, uz koka struktūras vai tīkla struktūras bāzētu maršrutēšanu utt.

Trūkumi

Visnopietnākā problēma ar “publicēšana — abonēšana” sistēmu ir to galvenās priekšrocības blakusefekts: izdevēja atsaiste no abonenta.