Přehled Reliable Services
Azure Service Fabric zjednodušuje psaní a správu bezstavových a stavových služeb. Toto téma obsahuje:
- Programovací model Reliable Services pro bezstavové a stavové služby.
- Volby, které musíte provést při psaní spolehlivé služby.
- Některé scénáře a příklady použití Reliable Services a způsobu jejich zápisu.
Reliable Services je jedním z programovacích modelů dostupných v Service Fabric. Dalším je programovací model Reliable Actor , který poskytuje aplikační architekturu virtuálního objektu actor nad modelem Reliable Services. Další informace o Reliable Actors naleznete v tématu Úvod do Service Fabric Reliable Actors.
Service Fabric spravuje životnost služeb od zřizování a nasazení prostřednictvím upgradu a odstranění prostřednictvím správy aplikací Service Fabric.
Co jsou Reliable Services
Reliable Services poskytuje jednoduchý, výkonný programovací model nejvyšší úrovně, který vám pomůže vyjádřit, co je pro vaši aplikaci důležité. S programovacím modelem Reliable Services získáte:
- Přístup k rozhraním API Service Fabric Na rozdíl od služeb Service Fabric modelovaných jako spustitelné soubory hosta můžou Reliable Services používat přímo rozhraní API Service Fabric. To umožňuje službám:
- Dotaz na systém
- Hlášení stavu entit v clusteru
- Příjem oznámení o změnách konfigurace a kódu
- Hledání a komunikace s dalšími službami,
- Použití spolehlivých kolekcí
- Přístup k mnoha dalším funkcím, a to vše z prvotřídního programovacího modelu v několika programovacích jazycích.
- Jednoduchý model pro spouštění vlastního kódu, který se podobá jiným známým programovacím modelům. Váš kód má dobře definovaný vstupní bod a snadno spravovaný životní cyklus.
- Připojitelný komunikační model. Použijte přenos podle svého výběru, jako je HTTP s webovým rozhraním API, webSockety, vlastní protokoly TCP nebo cokoli jiného. Reliable Services nabízí několik skvělých předefinovaných možností, které můžete použít, nebo můžete poskytnout své vlastní.
- Pro stavové služby umožňuje programovací model Reliable Services konzistentně a spolehlivě ukládat stav přímo do vaší služby pomocí Reliable Collections. Spolehlivé kolekce jsou jednoduchá sada vysoce dostupných a spolehlivých tříd kolekcí, které budou známé všem uživatelům, kteří používali kolekce jazyka C#. Tradičně služby potřebovaly externí systémy pro spolehlivou správu stavu. Díky spolehlivým kolekcím můžete svůj stav uložit vedle výpočetních prostředků se stejnou vysokou dostupností a spolehlivostí, kterou jste očekávali od vysoce dostupných externích úložišť. Tento model také zlepšuje latenci, protože výpočetní prostředky společně lokalujete a uvádíte, že potřebuje fungovat.
Co dělá Reliable Services jinak
Reliable Services se liší od služeb, které jste možná napsali dříve, protože Service Fabric poskytuje:
- Spolehlivost – Vaše služba zůstane v nespolehlivém prostředí, kde vaše počítače selžou nebo dojde k problémům se sítí, nebo v případech, kdy samotné služby narazí na chyby a chyby nebo selhání. U stavových služeb se váš stav zachová i v případě selhání sítě nebo jiných selhání.
- Dostupnost – Vaše služba je dostupná a responzivní. Service Fabric udržuje požadovaný počet spuštěných kopií.
- Škálovatelnost – Služby jsou oddělené od konkrétního hardwaru a můžou se podle potřeby zvětšit nebo zmenšit přidáním nebo odebráním hardwaru nebo jiných prostředků. Služby jsou snadno dělené (zejména ve stavovém případě), aby se zajistilo, že služba dokáže škálovat a zpracovávat částečné selhání. Služby je možné vytvářet a odstraňovat dynamicky prostřednictvím kódu, což umožňuje, aby se v případě potřeby roztáhly další instance, například v reakci na žádosti zákazníků. Service Fabric navíc podporuje odlehčené služby. Service Fabric umožňuje zřízení tisíců služeb v rámci jednoho procesu, nikoli vyžadování nebo vyhrazování celých instancí operačního systému nebo procesů na jednu instanci služby.
- Konzistence – U všech informací uložených ve spolehlivé službě je možné zaručit, že budou konzistentní. To platí i pro více spolehlivých kolekcí v rámci služby. Změny napříč kolekcemi v rámci služby je možné provádět transakčním způsobem.
Životní cyklus služby
Bez ohledu na to, jestli je vaše služba stavová nebo bezstavová, poskytuje Reliable Services jednoduchý životní cyklus, který vám umožní rychle připojit kód a začít. Zahájení a zprovoznění nové služby vyžaduje, abyste implementovali dvě metody:
- CreateServiceReplicaListeners/CreateServiceInstanceListeners – tato metoda je místem, kde služba definuje komunikační zásobníky, které chce použít. Komunikační zásobník, například webové rozhraní API, definuje koncový bod naslouchání nebo koncové body pro službu (jak se klienti dostanou ke službě). Definuje také způsob interakce zpráv se zbytkem kódu služby.
- RunAsync – tato metoda je místem, kde vaše služba spouští svou obchodní logiku a kde by spustila všechny úlohy na pozadí, které by se měly spouštět po celou dobu životnosti služby. Poskytnutý token zrušení je signálem, kdy by se tato práce měla zastavit. Pokud například služba potřebuje vytáhnout zprávy ze spolehlivé fronty a zpracovat je, je to místo, kde k této práci dochází.
Pokud se poprvé učíte o spolehlivých službách, přečtěte si další informace. Pokud hledáte podrobný návod na životní cyklus spolehlivých služeb, projděte si přehled životního cyklu Reliable Services.
Ukázkové služby
Pojďme se podrobněji podívat, jak model Reliable Services funguje s bezstavovými i stavovými službami.
Bezstavové spolehlivé služby
Bezstavová služba je ta, ve které není ve službě udržován žádný stav napříč voláními. Jakýkoli stav, který je k dispozici, je zcela uvolnitelný a nevyžaduje synchronizaci, replikaci, trvalost ani vysokou dostupnost.
Představte si například kalkulačku, která nemá paměť a přijímá všechny termíny a operace, které se mají provést najednou.
V tomto případě RunAsync()
může být služba (C#) nebo runAsync()
(Java) prázdná, protože neexistuje žádné zpracování úloh na pozadí, které služba potřebuje. Při vytvoření služby kalkulačky vrátí ICommunicationListener
(C#) nebo CommunicationListener
(Java) (například webové rozhraní API), které otevře koncový bod naslouchání na určitém portu. Tento koncový bod naslouchá různým metodám výpočtů (příklad: Add(n1, n2)), které definují veřejné rozhraní API kalkulačky.
Při volání z klienta se vyvolá příslušná metoda a služba kalkulačky provede operace s poskytnutými daty a vrátí výsledek. Neukládá žádný stav.
Neukládat žádný interní stav usnadňuje tuto ukázkové kalkulačku. Ale většina služeb není skutečně bezstavová. Místo toho externalizují svůj stav do jiného úložiště. (Například jakákoli webová aplikace, která spoléhá na udržování stavu relace v záložním úložišti nebo mezipaměti, není bezstavová.)
Běžným příkladem použití bezstavových služeb v Service Fabric je front-end, který zveřejňuje veřejné rozhraní API pro webovou aplikaci. Front-endová služba pak komunikuje se stavovými službami a dokončí žádost uživatele. V takovém případě jsou volání z klientů směrována na známý port, například 80, kde bezstavová služba naslouchá. Tato bezstavová služba přijme volání a určí, jestli je volání od důvěryhodné strany a pro kterou službu je určená. Bezstavová služba pak přesměruje volání na správný oddíl stavové služby a čeká na odpověď. Když bezstavová služba obdrží odpověď, odpoví původnímu klientovi. Příkladem takové služby je ukázka Začínáme Service Fabric (C# / Java) mimo jiné ukázky Service Fabric v tomto úložišti.
Stavové spolehlivé služby
Stavová služba je ta, která musí mít určitou část stavu konzistentní a přítomnou, aby služba fungovala. Vezměte v úvahu službu, která neustále počítá průběžný průměr určité hodnoty na základě aktualizací, které přijímá. K tomu musí mít aktuální sadu příchozích požadavků, které musí zpracovat, a aktuální průměr. Každá služba, která načítá, zpracovává a ukládá informace v externím úložišti (jako je například objekt blob Azure nebo úložiště tabulek dnes), je stavová. Jen udržuje svůj stav v úložišti externích stavů.
Většina služeb dnes ukládá svůj stav externě, protože externí úložiště zajišťuje spolehlivost, dostupnost, škálovatelnost a konzistenci tohoto stavu. Ve službě Service Fabric nejsou služby nutné k externímu ukládání jejich stavu. Service Fabric se postará o tyto požadavky na kód služby i stav služby.
Řekněme, že chceme napsat službu, která zpracovává obrázky. Za tímto účelem služba převezme image a řadu převodů, které se mají na této imagi provést. Tato služba vrací naslouchací proces komunikace (předpokládejme, že se jedná o webAPI), který zveřejňuje rozhraní API, jako ConvertImage(Image i, IList<Conversion> conversions)
je . Když obdrží požadavek, služba ho uloží do IReliableQueue
a vrátí klientovi nějaké ID, aby mohl požadavek sledovat.
V této službě RunAsync()
může být složitější. Služba má uvnitř RunAsync()
smyčky, která vyžádá žádosti a IReliableQueue
provádí požadované převody. Výsledky se uloží do tak IReliableDictionary
, aby když se klient vrátí, mohl získat převedené image. Aby se zajistilo, že i když dojde ke ztrátě image, tato spolehlivá služba vytáhne z fronty, provede převody a uloží výsledek do jediné transakce. V tomto případě se zpráva odebere z fronty a výsledky se uloží do slovníku výsledků pouze v případě, že jsou převody dokončeny. Případně může služba stáhnout image z fronty a okamžitě ji uložit do vzdáleného úložiště. Tím se snižuje množství stavu, který služba musí spravovat, ale zvyšuje složitost, protože služba musí udržovat potřebná metadata pro správu vzdáleného úložiště. V obou případech platí, že pokud se v prostřední části požadavku něco nepovedlo, zůstane ve frontě, která čeká na zpracování.
I když tato služba zní jako typická služba .NET, rozdíl spočívá v tom, že service Fabric poskytuje datové struktury (IReliableQueue
a IReliableDictionary
) a jsou vysoce spolehlivé, dostupné a konzistentní.
Kdy použít rozhraní API Reliable Services
Zvažte rozhraní API Reliable Services v následujících případech:
- Chcete, aby kód vaší služby (a volitelně i stav) byl vysoce dostupný a spolehlivý.
- Potřebujete transakční záruky napříč několika jednotkami stavu (například objednávky a položky řádku objednávky).
- Stav vaší aplikace může být přirozeně modelován jako spolehlivé slovníky a fronty.
- Kód nebo stav aplikací musí být vysoce dostupný s nízkou latencí čtení a zápisů.
- Vaše aplikace musí řídit souběžnost nebo členitost transakcí napříč jednou nebo více spolehlivými kolekcemi.
- Chcete spravovat komunikaci nebo řídit schéma dělení pro vaši službu.
- Váš kód potřebuje prostředí modulu runtime s volným vláknem.
- Vaše aplikace musí dynamicky vytvářet nebo zničit spolehlivé slovníky, fronty nebo celé služby za běhu.
- Potřebujete programově řídit funkce zálohování a obnovení poskytované Service Fabric pro stav vaší služby.
- Vaše aplikace musí udržovat historii změn pro její jednotky stavu.
- Chcete vyvíjet nebo využívat poskytovatele vlastních stavů vyvinutých třetí stranou.