Кіріспе
Жіберушілер мен қабылдаушылар тікелей байланыспайтын хабарламалар үлгісі. Бағдарламалық архитектурада, жариялау-абоненттік қатысы (publish–subscribe) – жариялаушылар хабарламаларды абоненттерге жіберілетін санаттарға бөлетін хабарламалар үлгісі. Бұл жариялаушылар хабарламаларды тікелей абоненттерге жіберетін дәстүрлі хабарламалар үлгісінен өзгеше. Сәйкесінше, абоненттер бір немесе бірнеше санатқа қызығушылық танытады және тек оларға қажетті хабарламаларды ғана алады, қандай жариялаушылар бар екенін білмейді. Жариялау-абоненттік қатысы – хабар кезегі үлгісімен туыс, және әдетте үлкен хабарға бағытталған делдалдық жүйенің бір бөлігі болып табылады. Көптеген хабарламалар жүйелері өздерінің API-ларында жариялау-абоненттік қатысы және хабар кезегі үлгілерін қолдайды; мысалы, Java Message Service (JMS). Бұл үлгі желінің кеңейтілу мүмкіндігін арттырады және желі топологиясын динамикалық етеді, нәтижесінде жариялаушыны және жарияланған деректердің құрылымын өзгертуге икемділік азаяды.
In software architecture, publish–subscribe is a messaging pattern where publishers categorize messages into classes that are received by subscribers. This is contrasted to the typical messaging pattern model where publishers send messages directly to subscribers. Similarly, subscribers express interest in one or more classes and only receive messages that are of interest, without knowledge of which publishers, if any, there are. Publish–subscribe is a sibling of the message queue paradigm, and is typically one part of a larger message oriented middleware system. Most messaging systems support both the pub/sub and message queue models in their API; e. g., Java Message Service (JMS). This pattern provides greater network scalability and a more dynamic network topology, with a resulting decreased flexibility to modify the publisher and the structure of the published data.
Хабарларды сүзгілеу
Жариялау-жазылу үлгісінде жазылушылар әдетте жарияланған хабарлардың тек бір бөлігін ғана алады. Хабарларды қабылдау және өңдеу үшін таңдау процесі сүзгілеу деп аталады. Сүзгілеудің екі негізгі түрі бар: тақырыпқа негізделген және мазмұнына негізделген. Тақырыпқа негізделген жүйеде хабарламалар "тақырыптарға" немесе атаулы логикалық каналдарға жарияланады. Тақырыпқа негізделген жүйедегі жазылушылар өздері жазылған тақырыптарға жарияланған барлық хабарламаларды алады. Жариялаушы жазылушылардың қандай тақырыптарға жазыла алатынын анықтайды. Мазмұнына негізделген жүйеде хабарламалар жазылушыға тек егер хабарламалардың атрибуттары немесе мазмұны жазылушы белгілеген талаптарға сәйкес келсе ғана жіберіледі. Хабарламаларды жіктеу жазылушының міндеті. Кейбір жүйелер екеуінің аралас түрін қолдайды: жариялаушылар хабарламаларды тақырыпқа жариялайды, ал жазылушылар бір немесе бірнеше тақырыптарға мазмұнына негізделген жазылуды тіркейді.
Топологиялар
Көптеген жариялау-қосу жүйелерінде жариялаушылар хабарламаларды аралық хабарлау брокеріне немесе оқиға автобусына жібереді, ал жазылушылар осы брокерде жазылуды тіркейді, соның арқасында брокер сүзгілеуді орындай алады. Брокер әдетте жариялаушылардан жазылушыларға хабарларды бағыттау үшін сақтау және жіберу функциясын атқарады. Сонымен қатар, брокер маршруттандыру алдында кезекте тұрған хабарламаларға басымдық бере алады. Жазылушылар белгілі бір хабарламаларды құрастыру кезінде, инициализациялау кезінде немесе орындау кезінде тіркеле алады. GUI жүйелерінде жазылушылар пайдаланушы командаларын (мысалы, батырманы басу) өңдеу үшін кодталуы мүмкін, бұл құрастыру кезінде тіркелуге сәйкес келеді. Кейбір фреймворктер мен бағдарламалық өнімдер жазылушыларды тіркеу үшін XML конфигурациялық файлдарды пайдаланады. Бұл конфигурациялық файлдар инициализациялау кезінде оқылады. Ең күрделі нұсқасы – жазылушыларды қосу немесе алып тастау мүмкіндігі орындалу кезінде болады. Осы тәсіл, мысалы, деректер қорының триггерлерінде, пошта тізімдерінде және RSS-те қолданылады. Деректерді тарату қызметі (DDS) орталық брокерді пайдаланбайды. Оның орнына, pub/sub жүйесіндегі әрбір жариялаушы мен жазылушы IP-мультикаст арқылы бір-бірі туралы метадеректермен бөліседі. Жариялаушылар мен жазылушылар бұл ақпаратты жергілікті жадта сақтап, ортақ түсінік негізінде хабарламаларды бір-бірін табу арқылы бағыттайды. Шындығында, брокерсіз архитектуралар жариялаушылардан жазылушыларға тиімді орталықтандырылмаған маршруттауды қамтамасыз ететін жапсырмалы желі құру үшін жариялау/қосу жүйесін қажет етеді. Джон Клейнберг тиімді орталықтандырылмаған маршруттау үшін Кеме қатынасы кіші әлем топологиясы қажет екенін көрсетті. Мұндай кіші әлем топологиялары әдетте орталықтандырылмаған немесе федерацияланған жариялау/қосу жүйелерімен іске асырылады. Жергіліктілікке бейім жариялау/қосу жүйелері кіші әлем топологияларын құрастырады, олар жазылуларды қысқа қашықтықтағы және төмен құнмен байланыс арқылы бағыттайды, соның арқасында жазылуларды жеткізу уақытын қысқартады.
Тарих
Ең алғашқы көпке жарияланған pub/sub жүйелерінің бірі – 1987 жылы Association for Computing Machinery (ACM) Symposium on Operating Systems Principles конференциясында (SOSP '87) "Таралған жүйелерде виртуалды синхрондылықты пайдалану" атты мақаласында сипатталған Isis Toolkit-тің "жаңалықтар" кіші жүйесі болды. 123–138 беттер.
Қоспаның босауы
Баспагерлер жазылушылармен еркін байланыста болады, тіпті олардың бар екенін білуінің қажеті де жоқ. Тақырыпқа басты назар берілетіндіктен, баспагерлер мен жазылушылар жүйе топологиясы туралы білмей қалуға құқылы. Олардың әрқайсысы бір-бірінен тәуелсіз, әдеттегідей жұмыс істеуін жалғастыра береді. Дәстүрлі, тығыз байланысқан клиент-сервер үлгісінде клиент сервер процесі жұмыс істемей тұрса, серверге хабарлама жібермейді, ал сервер клиент жұмыс істемей тұрса хабарлама қабылдай алмайды. Көптеген жариялау/жазылу жүйелері баспагерлер мен жазылушылардың орналасқан жерін ғана емес, сонымен қатар уақыт бойынша да байланыстырылмайды. Мұндай жариялау/жазылу жүйелерімен жұмыс істейтін орталық бағдарламалық қамтамасыз ету сарапшыларының жиі қолданатын стратегиясы – жазылушыға жинақталған хабарларды өңдеуге мүмкіндік беру үшін баспагерді тоқтату (жолақтың өткізу қабілетін шектеу тәсілі).
Өлшегіштігі
Pub/sub қатарлы жұмыс істеу, хабарламаларды кэштеу, ағаш негізіндегі немесе желі негізіндегі маршруттау сияқты артықшылықтар арқасында дәстүрлі клиент-сервер моделінен гөрі жақсырақ масштабталу мүмкіндігін ұсынады. Дегенмен, өте тығыз байланысты, жоғары көлемді кәсіпорындарда, жүйелер pub/sub инфрақұрылымын бөлісетін мыңдаған серверлерге дейін өскенде, қазіргі жеткізушілердің жүйелері көбінесе бұл артықшылықты жоғалтады; осы жағдайларда жоғары жүктеме кезінде pub/sub өнімдерін масштабтау мәселесі ғылыми зерттеу нысаны болып табылады. Кәсіпорын ортасынан тыс, pub/sub парадигмасы бір дерек орталығының көлемінен асып түсетін көлемдерде масштабталуға қабілетті екенін көрсетті, RSS және Atom сияқты веб-синдикация протоколдары арқылы бүкіл интернетке таратылған хабарламаларды қамтамасыз етеді. Бұл синдикация протоколдары миллиондаған жеке абоненттерге хабарлама тарату мүмкіндігі үшін, тіпті қарапайым веб-сервердің де жоғары жайлылықты (latency) және жеткізілім кепілдігінің болмауын қабылдауына мүмкіндік береді.
Кемшіліктер
Жариялаушы-жазылушы жүйелеріндегі ең маңызды мәселелер олардың басты артықшылығының қосымша салдары болып табылады: жариялаушының жазылушыдан тәуелсіздігі.