Sdílet prostřednictvím


Přehled spolehlivých služeb

Azure Service Fabric zjednodušuje psaní a správu bezstavových a stavových služeb. Toto téma se věnuje:

  • 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:
    • Dotazování systému
    • Hlášení zdravotního stavu entit v clusteru
    • Příjem oznámení o změnách konfigurace a kódu
    • Najděte a komunikujte 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řednastavených možností, které můžete použít, nebo si můžete vytvořit 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 tím, že umisťuje výpočetní prostředky a stav, které jsou nutné pro jeho funkci, na jedno místo.

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 funkční i v nespolehlivých prostředích, 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 selžou. 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 rozděleny (zejména v případě stavového) tak, 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ě atomickým způsobem.

Na této stránce najdete školicí video, ve které se dozvíte o programovacím modelu spolehlivých služeb Service Fabric a o tom, jak se s tímto programovacím modelem .NET může vaše aplikace více integrovat s modulem runtime Service Fabric:

Ž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. Předaný token pro zrušení slouží jako signál, kdy by se měla tato práce 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ě může být atribut RunAsync() (C#) nebo runAsync() (Java) služby prázdný, protože služba nemá žádné úkoly ke zpracování na pozadí. 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ádání žádného interního stavu zjednodušuje tuto ukázkovou 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í od 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.

Spolehlivé stavové 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á. Udržuje svůj stav v externím úložišti 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 obrázek a řadu převodů, které se mají na tomto obrázku provést. Tato služba vrací posluchač komunikace (předpokládejme, že se jedná o WebAPI), který vystavuje API jako ConvertImage(Image i, IList<Conversion> conversions). Když obdrží požadavek, služba ho uloží do IReliableQueuea 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á ve svém RunAsync() smyčku, která vytahuje žádosti z IReliableQueue a provádí požadované převody. Výsledky se uloží do IReliableDictionary, aby klient mohl po návratu získat své převedené obrázky. Aby se zajistilo, že k ztrátě obrazu nedojde, i když dojde k selhání, tato spolehlivá služba vytáhne z fronty, provede převody a celý proces dokončí v rámci jedné 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, pokud se něco pokazí uprostřed, zůstane požadavek ve frontě čekající 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 datového stavu (například objednávky a položky objednávek).
  • Stav vaší aplikace lze přirozeně modelovat 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 podporou volného vláknového režimu.
  • Vaše aplikace musí dynamicky vytvářet nebo nič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 své jednotky stavu.
  • Chcete vyvíjet nebo využívat poskytovatele vlastních stavů vyvinutých třetí stranou.

Další kroky