Reaktívne programovanie: koncepcie, školenia, funkcie a odborné poradenstvo

reaktívne princípy programovania nie sú nové a možno vysledovať z 70. a 80. rokov v tejto práci James Gray a Pat Helland tandemového systému.

Títo ľudia sú ďaleko pred časom. Len v posledných 5-10 rokoch bol technologický priemysel nútený prehodnotiť existujúce "osvedčené postupy" pre rozvoj podnikového systému. Naučila sa aplikovať poznatky o reaktívnych princípoch súčasného sveta viacjadrových a cloud computingov. Základom pre systém reaguje messaging, ktorý vytvorí dočasnú hranicu medzi komponentmi, ktoré im umožnia vyrovnať v čase a priestore pomocou paralelizmu, ktorý distribuuje záťaž a zabezpečiť mobilitu. Toto prepojenie je požiadavkou úplnej izolácie medzi komponentmi a tvorí základ pre stabilitu a pružnosť systémov.


Základy programovania jet

Toto programovanie je zameraná na tok informácií a šírenie zmien dát. Pri použití programovacích jazykov ľahko rozlíšiť statické a dynamické prúdy, pričom základný model zmení automaticky rozšíri do všetkých dátových tokov. Jednoducho povedané, programovanie tok dát Rx, produkoval jednu zložku ako základnú štruktúru poskytovaných knižnicami Rx, budú distribuovať tieto zmeny ostatných zložiek registrovaných týchto zmien. Reaktívne programovanie Rx sa skladá z troch kľúčových bodov.
Hlavné funkcie komponentov:
  • Pripomienky nie sú nič iné ako toky údajov. Monitor ukladá dáta, ktoré je možné prenášať z jedného toku do druhého. V podstate produkujú údaje periodicky alebo iba raz v ich životnom cykle na základe konfigurácií. Existujú viacerí operátori, ktorí môžu pozorovateľovi pomôcť poslať určité konkrétne údaje na základe určitých udalostí.
  • Pozorovatelia konzumujú prúd vysielaný pozorovateľmi. Pozorovatelia sa zaregistrujú pomocou reaktívnej programovacej metódy subscribeOn () na prijímanie údajov prenášaných pozorovateľmi. Vždy, keď sa prenášajú dáta, všetci registrovaní pozorovatelia dostanú dáta vo forme spätného volania naNext (). Tu môžu vykonávať rôzne operácie, ako je analýza odpovede JSON alebo aktualizácia rozhrania. Ak sa vyskytne chyba spôsobená pozorovaním, pozorovateľ ju získa v okne ().
  • Plánovač (Schedule) je komponent v Rx, ktorý informuje pozorovateľov a pozorovateľov o tom, z ktorého toku by mali pracovať. Môžete použiť metódu observOn (), aby ste pozorovateľom povedali, aký tok by mali sledovať. Okrem toho môžete použiť schedOn () na hlásenie sledovaného toku, v ktorom by mali byť spustené.
  • Pri programovaní jet pomocou RxJava vytvoria predvolené hlavné vlákna, napríklad Schedulers.newThread (), nové pozadie. Schedulers.io () vykoná kód v I /O toku.


    Výhody a obmedzenia metódy

    Hlavnými výhodami Rx je zvýšené využívanievýpočtové prostriedky na viacjadrové a viac procesory hardware, zvýšenie produktivity znížením body a zvýšiť produktivitu znížením serializácie bodov, podľa Amdahlův zákon a univerzálny zákon škálovateľnosti Gunther. Druhou výhodou - vysoká produktivita pre vývojárov, pretože tradičné programovacie paradigmy sa snažil poskytnúť jednoduchý a podporovaný prístup k práci s asynchrónnym a neblokyruyuschymy výpočtovej techniky a IO. Funkčné reakčné programovanie rieši tieto úlohy, pretože zvyčajne eliminuje potrebu jasnej koordinácie medzi aktívnymi komponentmi.
    Kde sa vyskytuje Rx, vytvorí sa proces vytvárania komponentov a pracovného toku. Aby bolo možné plne využiť asynchrónny výkon, je nevyhnutné zahrnúť protiúdery, aby sa zabránilo nadmernému využívaniu alebo skôr neobmedzenému využívaniu zdrojov. Na zabezpečenie ustáleného stavu z hľadiska toku údajov odosiela spätný tlak založený na záťaži dopyt smerom nahor a prijíma správy. Preto sú hlavnými výhodami systému:
  • Vylepšený výkon - vďaka schopnosti rýchlo a stabilne spracovávať obrovské množstvo dát.
  • Vylepšený UX - pretože aplikácia je používateľovi citlivejšia.
  • Zjednodušené úpravy a aktualizácie - vďaka čitateľnej a jednoduchšej predikcii kódu.
  • Napriek skutočnosti, že reakcia pri programovaní je veľmi užitočná pri vytváranímoderný softvér, aby systém premýšľal na vyššej úrovni, musíte použiť iný nástroj - Reactive Architecture pre proces navrhovania reaktívnych systémov. Okrem toho je dôležité mať na pamäti, že existuje veľa programovacích paradigiem a Rx je len jedným z nich, rovnako ako každý nástroj, nie je určený pre všetky prípady použitia.

    Stabilita reaktívnych systémov

    Stabilita je citlivosť v prípade zlyhania a je integrálnou funkčnou vlastnosťou systému. Vyžaduje to vývoj, nie iba doplnenie do systému v retroaktívnej forme. Stabilita reaktívneho programovania javascript presahuje toleranciu k chybám a to nie je spôsobené degradáciou, ale v prípade zlyhania sa môže úplne opraviť. To si vyžaduje izoláciu komponentov a zlyhanie kontajnmentu, aby sa predišlo kolíziám, ktoré sa šíria do susedných komponentov, čo môže viesť k katastrofickým situáciám s kaskádovými pádmi. Kľúčom k vytvoreniu pružných systémov - seba-zotavenie, je teda to, že je možné ich opísať ako správy odoslané iným komponentom, ktoré pôsobia ako dozorcovia a sú spravované z bezpečného kontextu mimo odmietnutého komponentu. Tu sú riadené správy tieto finančné prostriedky preč od silne prepojených, krehkých, hlboko zakorenených synchrónnych reťazcov hovorov, ktoré sú vo väčšine prípadov ignorované. Cieľom je oddeliť riadenie zlyhaní spätného volania, napríklad uvoľnením klienta zo zodpovednosti za spracovanie porúch serverov.

    Výkon architektúry systému

    Vzhľadom k tomu, väčšina systémov neodmysliteľne komplex, jeden z najdôležitejších aspektov je zabezpečiť, že architektúra systému zabezpečuje minimálne zníženie výkonu ako vývoj a udržiavanie súčastí a zároveň znížiť náhodnému zložitosť na minimum. To je dôležité preto, že v priebehu celého životného cyklu systému, ak nie je správne navrhnutá, bude ťažšie a ťažšie udržať výkonnosť a bude vyžadovať viac času a úsilia, aby pochopili, ako nájsť a opraviť problém. systémy Jet sú najproduktívnejší Architektúra systému v súvislosti s multi-core, oblačnosti a mobilných architektúr:
  • stanovuje, nesprávnej inštalácii prepážku medzi zložkami, zabraňuje odmietnutie kaskády a obmedzenia množstva a stupeň odrazu.
  • Hierarchia orgánov dohľadu ponúka niekoľko úrovní ochrany v kombinácii s vlastnými liečebnými schopnosťami, čím sa eliminuje mnoho dočasných zrušení akýchkoľvek prevádzkových nákladov na vyšetrovanie.
  • Prekročenie prenosu správ a priehľadnosť polohy umožňujú zakázať a nahradiť komponenty bez ovplyvnenia práce koncového používateľa. Tým sa znižujú náklady na zlyhania, ich relatívny význam, ako aj zdroje potrebné na diagnostiku a korekciu.
  • Replikácia znižuje riziko straty údajov a znižuje vplyv zlyhania na dostupnosť vyhľadávania a ukladania informácií.
  • Elasticita vám umožňuje ukladať zdroje rovnako akoPoužitie kolíše, minimalizáciu prevádzkových nákladov pri nakladaní a riziko zlyhania alebo naliehavé investície do škálovateľnosti s rastúcim zaťažením.
  • Vzťah k tradičným webovým aplikáciám

    Webové aplikácie môžu značne ťažiť z vývoja štýlu Rx, čo umožňuje pracovné postupy, aby sa požiadaviek a odpovedí, vrátane výzvy vetvenia služby, ťažba asynchrónne zdrojov a zostavovanie odpovedí a ďalšie triedenie ku klientovi. Viac nedávno, push-to-server akcie a webové zásuvky sú stále viac využívané v praxi, a za týmto požadovaného rozsahu efektívny spôsob ukladania veľa otvorených spojení a kde blokuje IO.
    Existujú nástroje, napríklad Streams a budúcnosti, ktoré tvorí jednoduchý neblokyruyuschye a asynchrónne konverziu, a nabáda ich, aby zákazníkom. Jet c programovanie prístup dát na úrovni - aktualizácie a žiada ich, aby účinne zdrojov, najlepšie s využitím databázou SQL alebo asynchrónne ovládače NoSQL. Webové aplikácie tiež profitujú z vývoja jetového systému pre veci ako distribuované ukladanie do vyrovnávacej pamäte, konzistencia dát a zasielanie správ s viacerými uzlami. Tradičné webové aplikácie obvykle používajú uzly. Ale ako programátori začnú používať Server-Sent-Events (SSE) a protokoly WebSocket - tieto jednotky sú ovládateľné, pretože aspoň podporujú stav pripojenia klienta a push-správy odoslané na ne zodpovedajúcim spôsobom. To si vyžaduje vývoj reaktívneho systému, pretožeToto je oblasť, kde adresovanie príjemcov je dôležité prostredníctvom správ.

    Podstata Java reaktivneho programovania

    Nie je nutné používať Rx v jetových systémoch. Pretože Rx programovanie a reaktívne systémy nie sú jedno a to isté. Hoci často používajú vymeniteľné pojmy, nie sú presné synonymá a odrážajú rôzne veci. Systémy predstavujú ďalšiu úroveň "reaktivity". Táto úroveň zahŕňa špecifické riešenia dizajnu a architektúry, ktoré vám umožňujú vytvárať robustné a flexibilné aplikácie. Napriek tomu veľmi dobrý nápad - kombinácia metód - prináša aplikáciám ešte väčší prínos, pretože ich ešte viac prepája, umožňuje efektívnejšie využívanie zdrojov a poskytuje menej oneskorenia. Pokiaľ ide o obrovské objemy dát alebo multitasking, často sa vyžaduje asynchrónne spracovanie, aby sa systémy rýchlo a rýchlo reagovali. V Java, zástupca starého objektovo-orientovaného programovania, asynchrónia sa môže stať skutočne zložitým a skomplikovať pochopenie a podporu kódu. Preto je Rx obzvlášť užitočné pre toto čisto objektovo orientované prostredie, pretože zjednodušuje činnosť asynchrónnych tokov. S jej najnovšími verziami, od samotnej Java 8, sa Java pokúsila implementovať zabudovanú reaktivitu, ale tieto pokusy dnes nie sú veľmi obľúbené u vývojárov. Existujú však určité živé a pravidelne aktualizované implementácie tretích strán pre Java reaktívne programovanie, ktoré pomáhajú zachrániť deň, a preto ich vývojári Java zvlášť oceňujú.

    Kotlin: Počiatočný výkonový test

    V typickej aplikácie pre Android programátorov obvykle opakovane vykonávať niektoré operácie reaktívne programovanie pomocou RxJava, takže by ste mali porovnať rýchlosť, využitie procesora a pamäte s rovnakými úkony, ktoré boli vykonané od soprohrammamy Kotlin, as RxJava. Toto je počiatočný test výkonnosti. Kedykoľvek použitý nový nástroj, ktorý je široko používaný v celom kódexe, je dôležité pochopiť, či to bude mať vplyv na celkovú výkonnosť programu predtým, ako prijme rozhodnutie o tom, ako by malo byť používané. Použitie praxe dáva stručnú odpoveď: vo väčšine prípadov by používatelia mali zvážiť nahradiť RxJava s Kotlinom, najmä na Android. RxJava programovanie nevyžiadanej pošty sa môže použiť v obmedzenom počte prípadov a v takýchto prípadoch môžete kombinovať RxJava a ko-programy. Jednoduché príčiny:
  • Poskytujú oveľa väčšiu flexibilitu ako obvykle Rx.
  • Poskytuje bohatú sadu operátorov v zbierkach, ktoré vyzerajú rovnako ako u operátorov RxJava.
  • Kotlinovo reaktívne programovanie môže v prípade potreby interagovať s rxjava.
  • Sú veľmi jednoduché a efektívne, vzhľadom k tomu, že čím vyššiu úroveň využitia CPU pre zhromažďovanie všetkých objektov vytvorených RxJava.
  • Reaktívne rozšírenia

    Reaktívne rozšírenia (ReactiveX alebo RX) - knižnica, ktorá sleduje zásady Rx, ktorá je asynchrónny a montáž na báze aplikácií pomocou udalostípozorovanej sekvencie. Tieto knižnice poskytujú mnoho rozhraní a metód, ktoré pomáhajú vývojárom písať čistý a jednoduchý kód. Reaktívne rozšírenia sú k dispozícii v niekoľkých jazykoch. Programátori sú najmä záujem o RxJava a RxAndroid, as android - je zaostrovacie polia. Programovanie Jet pomocou RxJava - implementácia Java reaktívne rozšírenie Netflix. Ide v podstate o knižnicu, ktorá je asynchrónna a pozoruje vzor pozorovateľa. Môžete vytvárať asynchrónne prevádzku, konvertovať a konzumujú ich pozorovateľov v rôznych dátových tokov. Knižnica ponúka širokú škálu nádherných operátorov, ako sú mapy, združenia a filtrov, ktoré môžu byť použité k dátovému toku. Keď programátor začne používať skutočné príklady kódu, dozvie sa viac o operátoroch a konverziách.

    viacvláknové aplikácie v Android

    Android "class =", ak UUID-2938324 "src =" /misc /i /galéria /73564 /2938324.jpg "/& gt; Android reaktívne programovanie (RxAndroid) špecifické pre platformu Android pridá niekoľko tried po RxJava presnejšie -. projektantom uvedené v RxAndroid (AndroidSchedulers.mainThread ()), ktorá hrá dôležitú úlohu pri podpore koncept multi-threading v aplikáciách pre Android Predovšetkým však odborníci radia, aby používal iba knižnice RxJava Aj cez veľký počet plánovačov .. , používaný v programovaní pre Android. Nižšie je uvedený zoznam pre projektantov a ich zhrnutie:
  • Schedulers.io () - neyntensyvnыh slúži na vykonávanie operácií, ako je internetové hovory, čítanie diskov/súbory, databázové operácie a ktoré podporujú združené súbory.
  • AndroidSchedulers.mainThread () - Poskytuje prístup k hlavnému vláknu Thread /UI. Operácie v tomto vlákne, ako napríklad aktualizácia rozhrania používateľských interakcií. Odborníci odporúčajú používateľom, aby na tomto vlákne nevykonávali žiadne intenzívne operácie, pretože to môže spôsobiť rozvrh programu alebo dialóg ANR.
  • Schedulers.newThread () pomocou tohto bude vytvorená nová vlákno vždy, keď bude naplánovaná naplánovaná úloha. Zvyčajne sa odporúča nepoužívať rozvrh na dlhú prácu. Témy vytvorené pomocou funkcie newThread () sa nebudú opakovane používať.
  • Schedulers.computation () - Tento graf môže byť použitý na vykonávanie intenzívnych operácií s procesorom, spracovanie obrovských dát centra reaktívneho programovania, spracovanie rastrových obrázkov. Počet vlákien vytvorených pomocou tohto plánovača závisí úplne od počtu dostupných jadier CPU.
  • Schedulers.single () - Tento plánovač bude plniť všetky úlohy v poradí, ktoré môžete použiť, keď budete potrebovať stálu výkonnosť.
  • Schedulers.immediate () - Tento plánovač vykonáva okamžite úlohy, pričom blokuje hlavný prúd.
  • Schedulers.trampoline () - Vykoná úlohu v režime First In First Out. Všetky naplánované úlohy sa vykonajú jeden po druhom a obmedzujú sa počet prúdov na pozadí.
  • Schedulers.from () - vám umožňuje vytvoriť plánovač od umelca, ktorý obmedzuje počet vytvorených prúdov. Ak je bazén prúdov zaneprázdnený, úloha budevložiť do frontu.
  • Základné príklady RxJavy

    Teraz, keď existujú dobré teoretické vedomosti o RxJava a RxAndroid, môžete prejsť na niektoré príklady kódu, aby ste lepšie pochopili koncept. Ak chcete začať, musíte pridať závislosť RxJava a RxAndroid na vytvorenie a synchronizáciu projektu. Hlavné etapy.
    Programovanie.
    Pozorovateľ vás podpíše tak, aby mohol začať prijímať dáta dvoma spôsobmi:
  • SubscriOn (Schedulers.io ()) - vám povie spustiť úlohu v pozadí.
  • ObservOn (AndroidSchedulers.mainThread ()) - Určuje pozorovateľa na získanie údajov v streame používateľského rozhrania pre Android.
  • To je všetko, takže programátor bude môcť napísať svoj prvý program reaktívneho programovania s RxJava. Podniky a dodávatelia stredne pokročilého softvéru začali používať Reactive a v rokoch 2016 až 2018 došlo k obrovskému nárastu záujmu spoločnosti o prijatie tejto paradigmy. Rx ponúka výkon vývojárov prostredníctvom efektívnosti zdrojov na úrovni komponentov pre internú logiku a transformáciu dátového toku, zatiaľ čo reaktívne systémy ponúkajú výkon architektom a systémom DevOps kvôli stabilite a elasticite na úrovni systému. Používajú sa na vytváranie Cloud Native a iných rozsiahlych distribuovaných systémov. V praxi sa knihy o reaktívnom programovaní jazyka Java používajú aj s metódami, ktoré umožňujú kombinovať princípy návrhu reaktívnych systémov.

    Súvisiace publikácie