Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/reactivemanifesto/reactivemanifesto

The Reactive Manifesto
https://github.com/reactivemanifesto/reactivemanifesto

asynchronous distributed-systems manifesto reactive reactive-programming resilience scalability

Last synced: about 1 month ago
JSON representation

The Reactive Manifesto

Awesome Lists containing this project

README

        

Reaktivní Manifest
------------------

Organizace pracující napříč různými odvětvími vývoje software objevují nezávisle stále stejné vzory v návrhu a implementaci softwarových systémů. Takové systémy jsou pak robustnější, odolnější, pružnější a nabízejí řešení více odpovídající moderním požadavkům.

V poslední době dochází k těmto proměnám na základě rapidních změn požadavků na softwarová řešení. Před pouhými pár lety měla rozsáhlá aplikace jen deset serverů, odezvu v sekundách, hodiny offline provozu kvůli údržbě a gigabyty dat. Dnešní aplikace běží na všem od mobilních telefonů po cloudové clustery s tisíci multi-core procesory. Uživatelé očekávají odezvu v rámci milisekund a 100% dostupnost; data měříme v petabytech. Dnešní požadavky nelze zkrátka uspokojit včerejšími strukturami.

Věříme, že je třeba uceleného přístupu k návrhu systémů, a že všechny nezbytné aspekty byly již rozpoznány: systém musí být responzivní, odolný, pružný a řízený zprávami. Takový systém potom nazýváme reaktivní.

Systémy navržené jako reaktivní jsou pružnější, volně provázané a [škálovatelné](/glossary#Scalability). Díky tomu je jejich vývoj snazší a změny jednodušší. Takové systémy jsou tolerantnější k [výpadkům](/glossary#Failure), které řeší elegantnějším způsobem, než kolapsem celého systému; mají vysokou odezvu a nabízejí [uživateli](/glossary#User) interaktivní zpětnou vazbu.

*Reaktivní systém je:*

* **Responzivní**: [Systém](/glossary#System) odpoví v požadovaném čase, pokud je nějaká odpověď vůbec možná. Rychlá odezva je nejen předpoklad funkčnosti a použitelnosti, ale umožňuje také rychlou a efektivní detekci problémů. Responzivní systémy poskytují rapidní konzistentní časovou odezvu zajišťující spolehlivost služby. Tato konzistence usnadňuje zpracování chyb a zvyšuje důvěru v kvalitu služby, což podporuje nové iterace vývoje.
* **Odolný**: Systém zůstává responzivní i v případě [výpadku](/glossary#Failure). Toto neplatí pouze pro kritické systémy s garantovanou vysokou dostupností - každý neodolný systém je po výpadku nedostupný. Odolnost je dosažena [replikací](/glossary#Replication), zamezením šíření výpadku, [izolací](/glossary#Isolation) a [delegací](/glossary#Delegation) zpracování chyb. K výpadku může dojít u každé z [komponent](/glossary#Component) systému; izolací komponent lze dosáhnout stavu, kdy dojde v různých částech systému k výpadku, aniž by došlo k výpadku systému jako celku. Zotavení každé z komponent je delegováno na jinou (externí) komponentu a dostupnost je zajištěna replikací tam, kde je to nezbytné. Uživatel dané komponenty tak není zatížen nutností zpracovat její případné poruchy přímo.
* **Pružný**: Systém zůstává responzivní i při proměnlivé zátěži. Reaktivní systém umí reagovat na změny zátěže v podobě proměnlivé frekvence požadavků pomocí zvyšování či snižování [zdrojů](/glossary#Resource) přidělených dané službě. Pružný systém nemá žádné úzké hrdlo a umožňuje distribuci požadavků mezi komponentami pomocí sdílení nebo replikace. Reaktivní systémy podporují prediktivní škálovací algoritmy zohledňující míru zátěže v reálném čase. [Pružnost](/glossary#Elasticity) je takto dosažitelná i na běžných nenákladných zařízeních a platformách.
* **Zprávami-řízený**: Jasné oddělení komponent v reaktivním systému je založeno na [asynchronním](/glossary#Asynchronous) [zasílání zpráv](/glossary#Message-Driven), což zajišťuje volnou provázanost, izolaci a [transparentnost polohy](/glossary#Location-Transparency). Toto oddělení také umožňuje reprezentaci a delegaci zpracovaní [výpadků](/glossary#Failure) ve formě zpráv. Řízení zprávami dále umožňuje i správu zátěže, pružnost a řízení toku dat pomocí správy a monitorování front zpráv a aplikací [back-pressure](/glossary#Back-Pressure) tam, kde třeba. Transparentnost polohy zpráv umožňuje komunikaci s komponentami pro kontrolu či správu výpadků bez nutnosti změny kódu nebo sémantiky programu nezávisle na tom, zda se komponenta nachází ve vzdáleném clusteru nebo na stejném stroji. [Neblokující](/glossary#Non-Blocking) komunikace umožňuje efektnívní využití [zdroje](/glossary#Resource), protože komponenta zůstává aktivní i v době mezi příjmem zpráv, což vede k nižším režijním nákladům.

Rozsáhlé systémy se skládají z menších a závisí tedy na reaktivních vlastnostech svých komponent. To znamená, že reaktivní principy musí být aplikovány na všech úrovních abstrakce. Ty nejrozsáhlejší systémy na světě obsluhující miliardy uživatelů denně jsou na těchto principech postaveny. Je na čase aplikovat je vědomě hned od začátku vývoje namísto jejich objevování znovu a znovu.

[Podepsat manifest](http://www.reactivemanifesto.org/#sign-button)