Reaktivní programování: koncepce, školení, funkce a odborné poradenství

Principy reaktivního programování nejsou nové a lze je sledovat od 70. a 80. let v hlavních dílech Jima Graye a Pete Hellanda s tandemovým systémem.

Tito lidé jsou daleko před časem. Pouze v posledních 5-10 letech byl technologický průmysl nucen přehodnotit stávající "osvědčené postupy" pro rozvoj podnikového systému. Naučila se aplikovat znalosti o reaktivních principech dnešního světa vícejaderného a cloud computingu. Základem reaktivního systému je přenos zpráv, který vytváří dočasnou hranici mezi komponentami, umožňuje jejich vyřešení včas, pomocí paralelnosti a prostoru, který rozděluje náklad a zajišťuje mobilitu. Toto propojení je podmínkou úplné izolace mezi komponenty a tvoří základ pro stabilitu i elasticitu systémů.


Základy reaktivního programování

Toto programování je zaměřeno na datové proudy a distribuci datových změn. Při použití programovacích jazyků je snadné přidělit statické a dynamické toky, zatímco základní model automaticky rozšiřuje změny ve všech datových tocích. Jednoduše řečeno, programovací proudy Rx produkované jednou komponentou, stejně jako základní struktura poskytovaná knihovnami Rx, tyto změny rozdělí na jinou součást registrovanou pro přijetí těchto změn. Reaktivní programování Rx se skládá ze tří klíčových bodů.
Hlavní funkce součástí:
  • Pozorování nejsou nic jiného než toky dat. Monitor ukládá data, která mohou být přenášena z jednoho toku do druhého. V podstatě vyrábějí data periodicky nebo pouze jednou v životním cyklu na základě konfigurace. Existují různé operátory, které mohou pozorovateli pomoci poslat některé konkrétní údaje na základě určitých událostí.
  • Pozorovatelé konzumují proud vysílaný pozorovateli. Pozorovatelé se zaregistrují pomocí metody reaktivního programování subscribeOn () pro příjem dat vysílaných pozorovateli. Vždy, když jsou data přenášena, všichni registrovaní pozorovatelé obdrží data ve zpětném volání naNext (). Zde mohou provádět různé operace, například analýzu odpovědi JSON nebo aktualizaci rozhraní. Pokud se vyskytne chyba způsobená pozorováním, pozorovatel ji dostane do příkazu onerror ().
  • Plánovač (Schedule) je součást v Rx, která informuje pozorovatele a pozorovatele o tom, z jakého toku by měli pracovat. Pomocí metody observOn () můžete pozorovatelům říci, jaký proud by měli sledovat. Kromě toho můžete použít schedOn () pro hlášení sledovaného toku, ve kterém by měly být spuštěny.
  • Při programování jet pomocí programu RxJava vytvářejí výchozí hlavní vlákna, například Schedulers.newThread (), nové pozadí. Schedulers.io () bude spouštět kód v I /O toku.


    Výhody a omezení metody

    Hlavními výhodami Rx je zvýšené využitívýpočetní prostředky pro vícejádrové a multiprocesní hardware, zvýšenou produktivitu řezných bodů a zvýšení produktivity snížením serializačních bodů v souladu se zákonem Amdahl a zákonem Universal Gunther Scalability. Druhou výhodou je vysoký výkon pro vývojáře, protože tradiční programovací paradigma se snažila poskytnout jednoduchý a podporovaný přístup jak k asynchronním, tak i neblokujícím výpočtům a IO. Funkční reaktivní programování řeší tyto úkoly, protože obvykle eliminuje potřebu jasné koordinace mezi aktivními součástmi.
    Kde nastane Rx, je vytvořen proces vytváření komponent a pracovního postupu. Aby bylo možné plně využít asynchronní provádění, je zapotřebí zahrnutí protiútoků, aby se předešlo nadměrnému využívání nebo spíše neomezené spotřebě zdrojů. Pro zajištění ustáleného stavu z hlediska datového toku zpětný tlak založený na zatížení posílá poptávku nahoru a přijímá zprávy. Hlavními výhodami systému jsou:
  • Zvýšený výkon - díky schopnosti zpracovávat obrovské množství dat rychle a stabilně.
  • Vylepšená UX - Protože aplikace je uživatelově citlivější.
  • Zjednodušené úpravy a upgrady - díky čitelnému a snadnějšímu predikci kódu.
  • Ale navzdory skutečnosti, že reaktivní programování - velmi užitečná při vytvářenímoderního softwaru, aby systém přemýšlel o vyšší úrovni, potřebujete použít jiný nástroj - reaktivní architekturu pro proces navrhování reaktivních systémů. Kromě toho je důležité si uvědomit, že existuje mnoho programovacích paradigmat a Rx je jen jeden z nich, stejně jako každý nástroj, není určen pro všechny případy použití.

    Stabilita reaktivních systémů

    Stabilita je citlivost v případě selhání a je integrální funkční vlastností systému. Vyžaduje vývoj, ne pouze doplnění do systému v retroaktivní formě. Stabilita reaktivního programování javascript přesahuje toleranci k chybám a to není způsobeno zhoršením, ale v případě selhání se může zcela opravit. To vyžaduje izolaci součástí a selhání kontejnmentu, aby se zabránilo kolizím, které se šíří do sousedních komponent, což může vést k katastrofickým scénářům s kaskádovými pády. Klíčem k vytváření pružných systémů - vlastním zotavením je tedy to, že mohou být popsány jako zprávy zaslané jiným složkám, které působí jako supervizní a jsou spravovány z bezpečného kontextu mimo odmítnutou součást. Zde jsou tyto prostředky řízenými zprávami odkloněny od silně spojených, křehkých, hluboce zakořeněných synchronních řetězců hovorů, které jsou ve většině případů ignorovány. Cílem je oddělit správu selhání zpětného volání, například uvolněním klienta ze zodpovědnosti za zpracování selhání serveru.

    Výkon architektury systému

    Vzhledem k tomu, většina systémů neodmyslitelně komplex, jeden z nejdůležitějších aspektů je zajistit, že architektura systému zajišťuje minimální snížení výkonu jako vývoj a udržování součástí a zároveň snížit náhodnému složitost na minimum. To je důležité proto, že v průběhu celého životního cyklu systému, pokud není správně navržena, bude těžší a těžší udržet výkonnost a bude vyžadovat více času a úsilí, aby pochopili, jak najít a opravit problém. systémy Jet jsou nejproduktivnější Architektura systému v souvislosti s multi-core, oblačnosti a mobilních architektur:
  • stanoví, nesprávné instalaci přepážku mezi složkami, zabraňuje odmítnutí kaskády a omezení množství a stupeň odrazu.
  • Hierarchie dohledu poskytují několik úrovní ochrany v kombinaci s self-healing schopnosti, což eliminuje mnoho dočasné upuštění od veškerých nákladů na údržbu pro vyšetřování.
  • Přeskočení přenosu zpráv a průhlednost umístění umožňuje zakázat a nahrazovat součásti bez ovlivnění práce koncového uživatele. To snižuje náklady na poruchy, jejich relativní význam, stejně jako zdroje potřebné pro diagnostiku a opravu.
  • Replikace snižuje riziko ztráty dat a snižuje dopad selhání na dostupnost vyhledávání a ukládání informací.
  • Elasticita umožňuje ukládat zdroje stejně jakopoužití se liší, což minimalizuje provozní náklady během načítání a riziko selhání nebo naléhavé investice do škálovatelnosti při zvyšování zatížení.
  • cigaret tradiční webové aplikace

    Webové aplikace mohou značně těžit z vývoje stylu Rx, což umožňuje pracovní postupy, aby se požadavků a odpovědí, včetně výzvy větvení služby, těžba asynchronní zdrojů a sestavování odpovědí a další třídění ke klientovi. V poslední době se události push-and-server a webové zásuvky stále více využívaly v praxi, a proto je potřeba efektivní způsob ukládání mnoha otevřených připojení a kde IO neblokuje.
    K dispozici jsou nástroje jako Streams and Futures, které dělají jednoduché neblokování a asynchronní transformace a tlačí je k zákazníkům. Reaktivní programování s přístupem k datům - aktualizace a požaduje je v efektivním zdroji, především pomocí databází SQL nebo NoSQL s asynchronními ovladači. Webové aplikace také těží z vývoje jetového systému pro věci, jako je distribuované ukládání do mezipaměti, konzistence dat a zasílání zpráv pomocí více uzlů. Tradiční webové aplikace obvykle používají uzly. Ale jako programátoři začnou používat Server-Sent-Events (SSE) a protokoly WebSocket - tyto jednotky jsou ovladatelné, protože alespoň podporují stav připojení klienta a push-zprávy odeslané na ně odpovídajícím způsobem. To vyžaduje vývoj reaktivního systému, protožeJedná se o oblast, kde je adresování příjemců důležitým nástrojem pro zasílání zpráv.

    Podstata Java reaktivního programování

    Není nutné používat Rx v proudových systémech. Protože programování Rx a reaktivní systémy nejsou stejné a stejné. Ačkoli často používají vyměnitelné pojmy, nejsou přesnými synonymy a odrážejí různé věci. Systémy představují další úroveň "reaktivity". Tato úroveň zahrnuje specifické řešení návrhu a architektury, které vám umožní vytvářet robustní a flexibilní aplikace. Nicméně velmi dobrý nápad - kombinace metod - přináší ještě více výhod aplikacím, protože je činí ještě propojenějšími, umožňuje efektivnější využívání zdrojů a poskytuje menší zpoždění. Pokud jde o obrovské objemy dat nebo multitasking, často je vyžadováno asynchronní zpracování, aby se systémy rychle a reagovaly. V jazyce Java, zástupce starého objektově orientovaného programování, může být asynchronizace skutečně složitá a ztěžuje její pochopení a podporu. Proto je Rx obzvláště užitečné pro toto čistě objektově orientované prostředí, protože zjednodušuje činnost asynchronních proudů. S jejími nejnovějšími verzemi, počínaje samotnou Javou 8, se Java pokoušela implementovat vestavěnou reaktivitu, ale tyto pokusy dnes nejsou s vývojáři příliš populární. Existují však některé živé a pravidelně aktualizované implementace třetích stran pro Java reaktivní programování, které pomáhají zachránit den a jsou proto zvláště ceněny vývojáři Java.

    Kotlin: Počáteční výkonnostní test

    V typické aplikace pro Android programátory obvykle opakovaně provádět některé operace reaktivní programování pomocí RxJava, takže byste měli porovnat rychlost, využití procesoru a paměti se stejnými úkony, které byly provedeny od soprohrammamy Kotlin, as RxJava. Toto je počáteční test výkonu. Kdykoliv použit nový nástroj, který je široce používán v celém kodexu, je důležité pochopit, zda to bude mít vliv na celkovou výkonnost programu předtím, než učiní rozhodnutí o tom, jak by mělo být používáno. Použití dává stručnou odpověď ve většině případů uživatelé by měli přemýšlet o výměně RxJava spivprohramy na Kotlin, zvláště Android. programování Jet pomocí RxJava mohou být použity v omezeném počtu případů, a v těchto případech je možné mísit RxJava a spivprohramy. Jednoduché příčiny:
  • Poskytují mnohem větší flexibilitu než obvykle Rx.
  • Poskytuje bohatou sadu operátorů ve sbírkách, které vypadají stejně jako u operátorů RxJava.
  • Kotlinovo reaktivní programování může v případě potřeby interagovat s rxjava.
  • Jsou velmi jednoduché a efektivní, vzhledem k tomu, že čím vyšší úroveň využití CPU pro shromažďování všech objektů vytvořených RxJava.
  • Reaktivní rozšíření

    Reaktivní rozšíření (ReactiveX nebo RX) - knihovna, která sleduje zásady Rx, která je asynchronní a montáž na bázi aplikací pomocí událostípozorovanou sekvenci. Tyto knihovny poskytují mnoho rozhraní a metod, které pomáhají vývojářům psát čistý a jednoduchý kód. Reaktivní rozšíření jsou k dispozici v několika jazycích. Programátoři jsou zejména zájem o RxJava a RxAndroid, as android - je zaostřovací pole. Programování Jet pomocí programu RxJava je implementace Java Reactive Extension od společnosti Netflix. Toto je v podstatě knihovna, která je asynchronní a pozoruje vzhled pozorovatele. Můžete vytvářet asynchronní provoz, konvertovat a konzumují jejich pozorovatele v různých datových toků. Knihovna nabízí širokou škálu nádherných operátorů, jako jsou mapy, sdružení a filtrů, které mohou být použity k datovému toku. Když programátor začne používat skutečné příklady kódu, dozví více informací o operátorech a konverzích.

    vícevláknová aplikace v Android

    Android "class =", pokud UUID-2938324 "src =" /misc /i /galerie /73564 /2938324.jpg „/& gt; Android reaktivní programování (RxAndroid) specifické pro platformu Android přidá několik tříd po RxJava přesněji -. projektantům uvedené v RxAndroid (AndroidSchedulers.mainThread ()), která hraje důležitou roli při podpoře koncept multi-threading v aplikacích pro Android Především však odborníci radí, aby používal pouze knihovny RxJava I přes velký počet plánovačů.. , používaný v programování pro Android. Níže je seznam pro projektanty a jejich shrnutí:
  • Schedulers.io () - neyntensyvnыh slouží k provádění operací, jako je internetová volání, čtení disků/soubory, databázové operace a který podporuje soubory nití.
  • AndroidSchedulers.mainThread () - Poskytuje přístup k hlavnímu vláknu Thread /UI. Obvykle jsou operace v tomto podprocesu, například aktualizace rozhraní interakcí uživatele. Odborníci radí uživatelům, že by neměli provádět intenzivní operace na tomto vlákně, protože to může způsobit programový hod nebo dialog ANR.
  • Schedulers.newThread () pomocí tohoto bude vytvořen nový podproces při naplánované naplánované úloze. Obvykle se doporučuje nepoužívat rozvrh pro dlouhou práci. Závity vytvořené pomocí funkce newThread () nebudou znovu použity.
  • Schedulers.computation () - Tento graf může být použit pro provádění intenzivních operací s procesorem, pro zpracování obrovských dat v centru reaktivního programování pro zpracování rastrových obrazů. Počet podprocesů vytvořených pomocí tohoto plánovače závisí výhradně na počtu dostupných jader CPU.
  • Schedulers.single () - tento plánovač provede všechny úkoly v pořadí, které lze použít, když je potřeba provést sekvenční spouštění.
  • Schedulers.immediate () - Tento plánovač provádí okamžitě úlohy, zatímco blokuje hlavní proud.
  • Schedulers.trampoline () - Provede úlohu v režimu First In-First Out. Všechny naplánované úlohy budou prováděny jeden po druhém, čímž se omezí počet pozadích na pozadí.
  • Schedulers.from () - umožňuje vytvářet plánovače od umělce, což omezuje počet vytvořených streamů. Když je bazén proudů zaneprázdněn, bude to úkolvložte do fronty.
  • Základní příklady RxJavy

    Nyní, když existují dobré teoretické znalosti o RxJava a RxAndroid, můžete jít na některé příklady kódu, abyste lépe porozuměli tomuto konceptu. Chcete-li začít, musíte přidat závislost RxJava a RxAndroid na vytvoření a synchronizaci projektu. Hlavní etapy.
    Programování.
    Pozorovatel vás podepíše, aby mohl začít přijímat data dvěma způsoby:
  • SubscriOn (Schedulers.io ()) - vám řekne, abyste spustili úlohu v pozadí.
  • ObservOn (AndroidSchedulers.mainThread ()) - Určuje pozorovatele, aby získal data v proudu uživatelského rozhraní Android.
  • To je všechno, takže programátor bude schopen napsat svůj první program reaktivního programování s RxJava. Podniky a dodavatelé středně pokročilého softwaru začali používat Reactive a v letech 2016 až 2018 došlo k obrovskému růstu zájmu firem o přijetí tohoto paradigmatu. Rx nabízí výkon vývojářům díky efektivitě zdrojů na úrovni komponent pro vnitřní logiku a transformaci datových toků, zatímco reaktivní systémy nabízejí výkon architektům a systémům DevOps díky systémové stabilitě a elasticitě. Používají se k vytváření Cloud Native a dalších rozsáhlých distribuovaných systémů. V praxi jsou knihy o reaktivním programování Java také široce používány s metodami, které umožňují kombinovat principy návrhu reaktivních systémů.

    Související publikace