[Architektura softwaru] Vzor návrhu potrubí – od nuly k hrdinovi

V tomto článku se budeme zabývat různými způsoby implementace vzoru návrhu potrubí od základů až po složitější řešení.

Vzor potrubí

Vzor potrubí je vzor návrhu softwaru, který poskytuje možnost sestavit a provést posloupnost operací.

https://www.hojjatk.com/2012/11/chain-of-responsibility-pipeline-design.html

Tento vzor je vhodnější používat ve spojení se vzorem zásuvným, aby se při spuštění aplikace dynamicky sestavila pipeline.

Sekvence

Nejzákladnější implementací pipeline by byla jednoduchá sekvence operací.

Pro zpracování dat lze vyvolat rozhraní operace.

Pipeline zpracovává každou operaci postupně. Třída pipeline také implementuje rozhraní IOperation, takže je lze kombinovat.

Operaci lze zapsat do speciální třídy.

Nebo použít wrapper pro automatické vytvoření operace z lambdy.

Operace by měly být zaregistrovány před vyvoláním pipeline.

Přerušovač obvodů

První funkcí, kterou chcete přidat do své pipeline, je přidat přerušovač obvodů.

Každá operace vrátí výsledek : neúspěch nebo úspěch.

Pokud operace selže, provádění pipeline by se mělo zastavit.

Asynchronní

Dalším požadavkem by mohlo být, aby pipeline uměla pracovat s asynchronními operacemi.

Každá operace nyní bude muset volat další operaci v pipeline, až dokončí zpracování dat.

Pipeline je trochu složitější, protože potřebuje nastavit další operaci, když je zaregistrována nová operace. Dalším řešením je použití builderu.

Tato operace je asynchronní a bude probíhat ve vyhrazeném vlákně, po vypršení času vyvolá další operaci, která bude pokračovat v pipeline.

Generickou operaci lze použít jak s jednoduchou akcí, tak použít vestavěný přerušovač, pokud použijete funkci.

Tento jednoduchý příklad využívá několik námi implementovaných funkcí.

Teď už víte, jak vytvořit asynchronní pipeline !

Ještě lepší by bylo, kdyby měl další zpětné volání na předchozí operaci, aby výsledek procházel protiproudem přes pipeline.

Plugin

Hlavním důvodem pro použití patternu pro návrh pipeline je často požadavek, aby bylo možné přidávat pluginy, které buď připojí operace k existující pipeline, nebo zaháknou operaci uprostřed ní.

Pipeline je opravdu základní, ale tentokrát jsou operace vystaveny.

Podívejme se na jednoduchou aplikaci s pipeline, která bude v konzoli zobrazovat pouze 3 kroky. Tato aplikace také podporuje zásuvné moduly pro úpravu pipeline.

První zásuvný modul připojí další operaci do druhého slotu pipeline.

Druhý zásuvný modul připojí novou operaci na konec pipeline.

Aplikaci a zásuvné moduly dáme dohromady, můžeme vyvolat pipeline.

Dávka

Další užitečnou funkcí je možnost zpracovávat dávková data ve stejné pipeline než jednotlivé položky.

Dávková pipeline zabalí pipeline a zavolá každou operaci na každé položce.

Každá položka je zabalena, takže si můžeme zapamatovat výsledek přerušení.

Tato operace zkontroluje, zda má celé číslo požadovaný řád velikosti.

Pipeline zkontroluje řád velikosti dávky celých čísel.

Pipeline vyvolá další operaci pouze pro položky, které neuspěly.

Vysoce výkonná pipeline

Vzor návrhu pipeline může odkazovat také na mnohem konkrétnější a na výkon orientovanou softwarovou architekturu.

Některé projekty používají pipeline k optimalizaci zpracování obrovského množství dat tím, že každá operace pipeline běží ve vyhrazeném vlákně.

Každé vlákno bude spotřebovávat a vytvářet data ze souběžné fronty, která bude fungovat jako vyrovnávací paměť.

Tentokrát použijeme asynchronní operace s přerušovačem.

Pokud je operace úspěšná, měla by se vyvolat další, nebo ukončit v případě neúspěchu.

Pipeline je navržena tak, aby obcházela circuit-breaker. Při úspěchu nebo neúspěchu bude vždy pokračovat v nadřazené sekvenci pipeline a zavolá další operaci.

Scénář je trochu složitý, takže nebudu vysvětlovat všechno. Jde o to, aby příchozí příkazy zpracovávala různá vlákna. Po dokončení zpracování objednávky zkontrolujeme stav objednávky.

Každý zpracovatel objednávky je izolován ve vyhrazeném vlákně, takže můžete optimalizovat způsob ukládání dat a mít přímý přístup do paměti bez použití zámku.

Zpracovatel platebních příkazů je jediné vlákno, které může přistupovat k zůstatkům uživatelů. Může získat nebo aktualizovat libovolný zůstatek bez obav z problémů se souběžností.

Pipeline zpracovává posloupnost operací co nejrychleji.

Závěr

Vzor návrhu potrubí má mnoho velmi různých způsobů implementace, od jednoduchého řetězce příkazů až po složitější pracovní tok.

Může být požadováno mnoho funkcí, jako je například přerušovač obvodů, asynchronní nebo vyrovnávací paměť, ale většinou chcete použít potrubí, když chcete mít zásuvné moduly, které se mohou zapojit do toku provádění potrubí.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.