Programování

Stručný přehled reaktivních systémů

O reaktivních systémech se za posledních pár let hodně povídalo. Spolu s hlášením přichází kolekce relevantních klíčových salátů, jako jsou reaktivní proudy, reaktivní rozšíření, reaktivní programování, funkční reaktivní programování atd. Pokud jste v technologickém průmyslu dostatečně dlouho, viděli jste cyklické vzestupy a pády módních slov a zkratky čas od času. Je to tedy všechno další humbuk, který bude brzy zastaralý?

Slyšel jsem, že softwaroví inženýři odmítají reaktivní systémy jako nic víc než alias pro asynchronní systémy založené na událostech, podobně jako způsob, jakým někteří odmítají mikroslužby jako SOA (architektura orientovaná na služby), méně ESB (sběrnice podnikových služeb). Zatímco se často objevují technologická slova s ​​nově objeveným významem, v reaktivních systémech vidím dost výrazných rysů, abych si myslel, že název není jen dalším aliasem.

Co jsou reaktivní systémy?

Reaktivní manifest popisuje základní charakteristiky reaktivních systémů: citlivé, odolné, elastické a založené na zprávách. To dává obraz na vysoké úrovni a zní to trochu obecně. Zejména citlivost, odolnost, pružnost popsané v manifestu jsou dnes téměř standardními požadavky mnoha aplikací v reálném světě.

Možná je „řízený zprávou“ požadavek, který skutečně odlišuje reaktivní systémy od ostatních. Pod kapotou se reaktivní systém spoléhá na interakce prostřednictvím asynchronního předávání zpráv, které stanoví hranice mezi jednotlivými komponentami. Takový model interakce pomáhá připravit cestu k volnému propojení časově i místně pro souběžnost a distribuovatelnost. Kromě toho umožňuje, aby byl systém integrován s některými neblokujícími mechanismy pro regulaci datových toků (více o tom níže).

Reaktivní proudy

V budování reaktivních systémů se zdá být prominentní přístup, při kterém jsou operace zpracování dat, kdykoli je to možné, formulovány jako toky kompozičního proudu. To není součástí požadavků Reaktivního manifestu, ale mohl by to být inherentní model interakce založený na zprávách v reaktivních systémech, který přirozeně upřednostňuje takový přístup modelování zaměřený na proud.

Reaktivní proudy, které se zjevně ukázaly jako samostatná iniciativa, lze považovat za specifický typ reaktivních systémů, které se soustředí na zpracování proudů a vyjadřují kompoziční proudy jako směrované grafy.

Protitlak

Jedním z výše zmíněných neblokujících regulačních mechanismů je protitlak. Může to být nejvyhledávanější funkce pro systémy, které implementují reaktivní proudy. Je to asynchronní mechanismus zpětné vazby pracující v opačném směru proudu směrem k předřazeným komponentám pro regulaci zátěže.

Díky vestavěnému zpětnému tlaku regulujícímu proudění proudu neblokujícím způsobem je systém schopen pracovat s relativně stabilnějším využitím paměti. Taková funkce eliminuje potenciálně devastující problémy s přetečením zásobníku (např. Způsobené pomalým datovým jímkou), které by obvykle musely být potlačeny mechanismem vytváření vlastních vyrovnávacích dat v rámci toků proudu.

A co reaktivní programování?

Jako paradigma programování pro budování reaktivních systémů zdůrazňuje reaktivní programování formulování logiky asynchronního programování jako datových proudů a automatické šíření změn hodnot korelovaných proměnných v systému. Jazyky používané pro takové paradigma programování by poskytovaly vhodné skládatelné funkce pro provoz na formulovaných proudech.

Podle návrhu reaktivní programování upřednostňuje styl funkčního programování, který vyjadřuje a řeší výpočetní problémy pomocí skládatelných funkcí. Nicméně existence termínu funkční reaktivní programování předchází tomuto reaktivnímu „pohybu“ více než deset let. FRP má výrazně odlišné zaměření a soustředí se na používání funkcí k vyjádření chování v nepřetržitém čase pomocí jednoduché sémantiky denotace. Přesto se nyní často považuje za reaktivní programování s výslovným důrazem na funkční programování.

Pokud ilustrace s kódem funguje lépe, doporučuji přečíst si tutoriál příspěvku Andreho Staltze, který prochází podstatou reaktivního programování v JavaScriptu pomocí RxJS.

ReactiveX

ReactiveX, neboli Reaktivní rozšíření, je knihovna API, která umožňuje použití kompozičních operací ke zpracování proudů asynchronních událostí. Díky pozorovatelům a pozorovatelům (kteří jsou předplatiteli pozorovatelů), které vycházejí ze vzoru pozorovatele, tvoří klíčové složky v knihovně soubor skladatelných operátorů pro filtrování, transformaci, agregaci atd. RxJS a RxJava jsou dvě z nejpopulárnějších implementací ReactiveX v JavaScriptu a Java.

Akka herci

Akka je knihovna založená na hercích zaměřená na vytváření škálovatelných souběžných a distribuovaných aplikací na JVM (Java Virtual Machine). V jeho jádru jsou výpočetní primitivy nazývané herci, kteří udržují stav a chování a komunikují mezi sebou prostřednictvím asynchronního předávání zpráv.

Herci Akka, napsaní ve Scale, jsou od přírody lehcí a volně vázaní. To spolu s robustními funkcemi Akka pro směrování, dělení a pub-sub pro škálovatelné distribuované systémy, jako je IoT, z nich činí skvělou platformu pro budování reaktivních systémů.

Akka proudy

Průkopníkem (a zakládajícím členem) iniciativy reaktivních proudů je Akka Streams. Je postaven na vrcholu aktérů Akka a poskytuje rozsáhlou sadu API pro vytváření topologií streamů a zpracování streamů vysoce kompozičním způsobem. Nedávný blogový příspěvek o důlních centrech kolem toků Akka a o tom, jak jej lze použít k provedení některé základní těžby textu.

Zdá se, že Akka proudí jako reaktivní iniciativa, která se v dnešní době snaží. Ovladače založené na Akka-Streams, jako jsou Reactive Rabbit a ReactiveMongo pro RabbitMQ a MongoDB, začaly v technologickém průmyslu naberat na síle. Kromě toho je Akka HTTP, která je další generací sady nástrojů Spray REST / HTTP, také vytvořena tak, aby umožňovala streamování s akka proudy jako základním motorem.

Všechny streamy orientované - nějakým způsobem

S neustále rostoucím tempem přijímání iniciativy reaktivních systémů zjevně překonal fázi, kdy byl pouhým humbukem. Je to také zjevně více než nově objevené módní slovo asynchronních systémů založených na událostech. Z hlediska technických zásluh nevidím důvod, proč se nestane výraznějším. I iniciativy v oblasti open-source technologií jsou však jako komerční produkty - dobré načasování může v počáteční fázi rychle přilákat pozornost a vhodný marketing může pomoci získat pokračující dynamiku nezbytnou k popularizaci širší uživatelské základny.

Časově je funkční programování na vzestupu, takže bych řekl, že je to skvělé načasování, protože programovací styl je příznivě přijat při budování reaktivních systémů. Pokud jde o marketing, domnívám se, že intuitivnější a zjevnější pojmenování této iniciativy by se lépe prodalo technologickému průmyslu. Při prvním pojmu „reaktivní systémy“ by člověk těžko uchopil cokoli smysluplného. Ačkoli termín „reaktivní“ se týká některých aspektů přijímaného šíření změn v takových systémech, nevyskakuje na publikum jako charakteristická charakteristika.

S reaktivními systémy, reaktivními proudy a reaktivním programováním převážně orientovaným kolem proudů si myslím, že termín „stream“ je zjevnějším klíčovým slovem než „reaktivní“. Při obchodování s obecností s jednoduchostí a intuicí bych spojil reaktivní systémy a reaktivní proudy jako jednu iniciativu a nahradil „reaktivní“ něčím, co se soustředí kolem „proudu“.