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í Reliable Service.
  • Některé scénáře a příklady toho, kdy použít Reliable Services a jak se píšou.

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 najdete v tématu Úvod do Service Fabric Reliable Actors.

Service Fabric spravuje životnost služeb, od zřizování a nasazení přes upgrade a odstranění až po správu aplikací Service Fabric.

Co jsou Reliable Services

Reliable Services nabízí jednoduchý, výkonný programovací model nejvyšší úrovně, který vám pomůže vyjádřit, co je pro vaši aplikaci důležité. Programovací model Reliable Services vám umožňuje:

  • Přístup k rozhraním SERVICE Fabric API. Na rozdíl od služeb Service Fabric modelovaných jako spustitelné soubory hosta můžou Reliable Services používat rozhraní Service Fabric API přímo. 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
    • Hledat a komunikovat s dalšími službami,
    • Použití reliable collections
    • Získejte 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 spuš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 spravovat životní cyklus.
  • Připojitelný komunikační model. Použijte libovolný přenos, například HTTP s webovým rozhraním API, protokoly WebSocket, vlastní protokoly TCP nebo cokoli jiného. Reliable Services nabízí některé skvělé možnosti, které můžete použít, nebo můžete poskytnout vlastní.
  • U stavových služeb programovací model Reliable Services umožňuje konzistentně a spolehlivě ukládat stav přímo ve službě pomocí reliable collections. Reliable Collections představují jednoduchou sadu vysoce dostupných a spolehlivých tříd kolekcí, které bude znát každý, kdo používá kolekce jazyka C#. Služby tradičně potřebovaly externí systémy pro spolehlivou správu stavu. Se službou Reliable Collections můžete uložit stav vedle výpočetních prostředků se stejnou vysokou dostupností a spolehlivostí, jakou očekáváte od vysoce dostupných externích úložišť. Tento model také zlepšuje latenci, protože společně lokalujete výpočetní prostředky a stav, který potřebuje k fungování.

Čím se Reliable Services liší

Reliable Services se liší od služeb, které jste napsali dříve, protože Service Fabric poskytuje:

  • Spolehlivost – vaše služba zůstane v provozu 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 dojde k chybám a selhání nebo selhání samotných služeb. U stavových služeb se váš stav zachová i v případě selhání sítě nebo jiného 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šovat nebo zmenšovat prostřednictvím přidání nebo odebrání hardwaru nebo jiných prostředků. Služby jsou snadno rozdělené na oddíly (zejména ve stavovém případě), aby bylo zajištěno, že služba můž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 podle potřeby sdružovat další instance, například v reakci na požadavky zákazníků. Service Fabric také doporučuje, aby služby byly odlehčené. Service Fabric umožňuje zřízení tisíců služeb v rámci jednoho procesu, místo toho, aby se vyžadovaly nebo vyhrazují celé instance nebo procesy operačního systému pro jednu instanci služby.
  • Konzistence – u všech informací uložených ve službě Reliable Service 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 atomicky.

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 lépe integrovat s modulem runtime Service Fabric:

Životní cyklus služby

Ať už je vaše služba stavová nebo bezstavová, Reliable Services poskytují jednoduchý životní cyklus, který vám umožní rychle zapojit kód a začít. Zprovoznění nové služby vyžaduje implementaci dvou metod:

  • CreateServiceReplicaListeners/CreateServiceInstanceListeners – V této metodě 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 ke službě dostanou). Definuje také způsob interakce zobrazených zpráv se zbytkem kódu služby.
  • RunAsync – tato metoda je místo, kde vaše služba spouští svou obchodní logiku a kde by spustila všechny úlohy na pozadí, které by měly běžet po celou dobu životnosti služby. Poskytnutý token zrušení je signálem, kdy by se měla tato práce zastavit. Pokud například služba potřebuje vytahovat zprávy ze spolehlivé fronty a zpracovávat je, je to místo, kde se tato práce provádí.

Pokud se o spolehlivých službách dozvíte poprvé, čtěte dál. Pokud hledáte podrobný návod k životnímu cyklu spolehlivých služeb, podívejte se na 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é Reliable Services

Bezstavová služba je služba, ve které se v rámci služby napříč voláními neudržuje žádný stav. Jakýkoli stav, který je k dispozici, je zcela jednorázový a nevyžaduje synchronizaci, replikaci, trvalost ani vysokou dostupnost.

Představte si například kalkulačku, která nemá žádnou 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 (C#) nebo runAsync() (Java) služby prázdné, protože služba nemusí provádět žádné zpracování úloh na pozadí. Při vytvoření služby kalkulačky se vrátí ICommunicationListener (C#) nebo CommunicationListener (Java) (například webové rozhraní API), které na některém portu otevřou naslouchací koncový bod. Tento naslouchací koncový bod se připojí k různým metodám výpočtu (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á se v něm žádný stav.

Neukládání žádného interního stavu usnadňuje tuto ukázku kalkulačky. Většina služeb ale není ve skutečnosti bezstavová. Místo toho svůj stav externalizují do jiného úložiště. (Například žádná webová aplikace, která spoléhá na zachová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ý zpřístupňuje veřejné rozhraní API pro webovou aplikaci. Front-endová služba pak komunikuje se stavovými službami, aby dokončila žádost uživatele. V tomto 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 ke které službě je určeno. Pak bezstavová služba přesměruje volání do správného oddílu 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 service fabric Začínáme (C# / Java) a další ukázky Service Fabric v tomto úložišti.

Stavové spolehlivé služby

Stavová služba je služba, která musí mít určitou část stavu udržována konzistentní a přítomnou, aby služba fungovala. Představte si službu, která neustále počítá klouzavý průměr určité hodnoty na základě aktualizací, které obdrží. K tomu musí mít aktuální sadu příchozích požadavků, které potřebuje 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 (například v dnešním úložišti objektů blob Azure nebo v úložišti tabulek), je stavová. Pouze uchovává 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 pro daný stav. Ve službě Service Fabric není nutné, aby služby ukládaly svůj stav externě. 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 u tohoto obrázku mají provést. Tato služba vrátí naslouchací proces komunikace (předpokládejme, že se jedná o WebAPI), který zveřejňuje rozhraní API jako ConvertImage(Image i, IList<Conversion> conversions). Když služba obdrží požadavek, uloží ho do IReliableQueuea vrátí klientovi id, aby mohl žádost sledovat.

V této službě RunAsync() může být složitější. Služba má uvnitř RunAsync() smyčku, která načítá požadavky z IReliableQueue a provádí požadované převody. Výsledky se uloží do IReliableDictionary , takže když se klient vrátí, může získat převedené obrázky. Aby se zajistilo, že i když něco selže, neztratí se tato spolehlivá služba z fronty, provede převody a uloží výsledek v jediné transakci. V takovém případě se zpráva odebere z fronty a výsledky se uloží do slovníku výsledků pouze po dokončení převodů. Případně může služba vytá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 se složitost, protože služba musí uchovávat metadata potřebná ke správě vzdáleného úložiště. U obou přístupů zůstane požadavek ve frontě a pokud něco selže uprostřed, čeká na zpracování.

I když tato služba vypadá jako typická služba .NET, rozdíl spočívá v tom, že používané datové struktury (IReliableQueue a IReliableDictionary) jsou poskytovány službou Service Fabric a jsou vysoce spolehlivé, dostupné a konzistentní.

Kdy použít rozhraní API služby 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 řádkové položky objednávek).
  • Stav vaší aplikace lze přirozeně modelovat jako spolehlivé slovníky a fronty.
  • Kód nebo stav vaší aplikace musí být vysoce dostupný s nízkou latencí čtení a zápisu.
  • Vaše aplikace musí řídit souběžnost nebo členitost transakčních operací v jedné nebo více Reliable Collections.
  • Chcete spravovat komunikaci nebo řídit schéma dělení vaší služby.
  • Váš kód potřebuje běhové prostředí s volnými vlákny.
  • Vaše aplikace musí za běhu dynamicky vytvářet nebo ničit spolehlivé slovníky, fronty nebo celé služby.
  • 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 vlastní poskytovatele stavu vyvinuté třetí stranou.

Další kroky