Vzory návrhu pro víceklientské aplikace SaaS a Azure AI Search

Víceklientová aplikace je aplikace, která poskytuje stejné služby a možnosti libovolnému počtu tenantů, kteří nevidí nebo sdílejí data žádného jiného tenanta. Tento článek popisuje strategie izolace tenanta pro víceklientské aplikace vytvořené pomocí služby Azure AI Search.

Koncepty služby Azure AI Search

Azure AI Search jako řešení typu vyhledávání jako služba umožňuje vývojářům přidávat do aplikací bohaté možnosti vyhledávání, aniž by museli spravovat infrastrukturu nebo se stát odborníkem na načítání informací. Data se nahrají do služby a pak se uloží do cloudu. Pomocí jednoduchých požadavků na rozhraní API služby Azure AI Search je pak možné data upravit a prohledávat.

Search, indexy, pole a dokumenty

Než začnete diskutovat o vzorech návrhu, je důležité pochopit několik základních konceptů.

Při použití služby Azure AI Search se jedna přihlásí k odběru vyhledávací služby. Když se data nahrají do služby Azure AI Search, ukládají se do indexu ve vyhledávací službě. V rámci jedné služby může existovat několik indexů. Aby bylo možné používat známé koncepty databází, může se vyhledávací služba přirovnat k databázi, zatímco indexy v rámci služby se dají přirovnat k tabulkám v databázi.

Každý index v rámci vyhledávací služby má vlastní schéma, které je definováno několika přizpůsobitelnými poli. Data se přidají do indexu Azure AI Search ve formě jednotlivých dokumentů. Každý dokument musí být nahrán do určitého indexu a musí odpovídat schématu tohoto indexu. Při vyhledávání dat pomocí služby Azure AI Search se na konkrétní index vydávají fulltextové vyhledávací dotazy. Pokud chcete tyto koncepty porovnat s databázemi, dají se pole lajkovat se sloupci v tabulce a dokumenty se dají přirovnat k řádkům.

Škálovatelnost

Jakákoli Search Azure AI v cenové úrovni Standard se může škálovat ve dvou dimenzích: úložiště a dostupnost.

  • Oddíly je možné přidat, aby se zvýšilo úložiště vyhledávací služby.
  • Repliky je možné do služby přidat, aby se zvýšila propustnost požadavků, které může vyhledávací služba zpracovat.

Přidáním a odebráním oddílů a replik umožníte, aby se kapacita vyhledávací služby zvětšila s objemem dat a provozem požadavků aplikace. Aby vyhledávací služba dosáhla smlouvy SLA pro čtení, vyžaduje dvě repliky. Aby služba dosáhla smlouvy SLA pro čtení i zápis, vyžaduje tři repliky.

Ve službě Azure AI Search existuje několik různých cenových úrovní, každá z těchto úrovní má různá omezení a kvóty. Některá z těchto omezení jsou na úrovni služby, některá jsou na úrovni indexu a některá jsou na úrovni oddílu.

S3 s vysokou hustotou

V cenové úrovni Služby Azure AI Search je k dispozici možnost pro režim s vysokou hustotou (HD), který je určený speciálně pro scénáře s více tenanty. V mnoha případech je nutné podporovat velký počet menších tenantů v rámci jedné služby, aby bylo možné dosáhnout výhod jednoduchosti a nákladové efektivity.

S3 HD umožňuje zabalit mnoho malých indexů pod správu jedné vyhledávací služby obchodováním schopnost škálovat indexy pomocí oddílů, aby bylo možné hostovat více indexů v jedné službě.

Služba S3 je navržená k hostování pevného počtu indexů (maximálně 200) a umožňuje horizontálnímu škálování jednotlivých indexů při přidání nových oddílů do služby. Přidání oddílů do služeb S3 HD zvyšuje maximální počet indexů, které může služba hostovat. Ideální maximální velikost pro jednotlivé indexy S3HD je přibližně 50 až 80 GB, i když u každého indexu, který systém ukládá, neexistuje žádný pevný limit velikosti.

Důležité informace o víceklientských aplikacích

Víceklientní aplikace musí efektivně distribuovat prostředky mezi tenanty a současně zachovat určitou úroveň ochrany osobních údajů mezi různými tenanty. Při návrhu architektury pro takovou aplikaci je potřeba vzít v úvahu několik aspektů:

  • Izolace tenanta: Vývojáři aplikací musí přijmout vhodná opatření, aby se zajistilo, že žádní tenanti nemají neoprávněný nebo nežádoucí přístup k datům jiných tenantů. Kromě pohledu ochrany osobních údajů vyžadují strategie izolace tenantů efektivní správu sdílených prostředků a ochranu před hlučnostmi sousedy.

  • Náklady na cloudové prostředky: Stejně jako u jakékoli jiné aplikace musí softwarová řešení zůstat nákladově konkurenceschopná jako součást víceklientských aplikací.

  • Snadné operace: Při vývoji víceklientské architektury je důležitým aspektem dopad na provoz a složitost aplikace. Azure AI Search má smlouvu SLA o 99,9 %.

  • Globální nároky: Víceklientských aplikací často musí sloužit tenantům distribuovaným po celém světě.

  • Škálovatelnost: Vývojáři aplikací musí zvážit, jak se shodují mezi zachováním dostatečně nízké úrovně složitosti aplikace a návrhem aplikace tak, aby se škálovat s počtem tenantů a velikostí dat a úloh tenantů.

Azure AI Search nabízí několik hranic, které je možné použít k izolaci dat a úloh tenantů.

V případě scénáře s více tenanty vývojář aplikace využívá jednu nebo více vyhledávacích služeb a rozděluje tenanty mezi služby, indexy nebo obojí. Azure AI Search má několik běžných vzorů při modelování scénáře s více tenanty:

  • Jeden index na tenanta: Každý tenant má svůj vlastní index ve vyhledávací službě, která je sdílená s ostatními tenanty.

  • Jedna služba na tenanta: Každý tenant má vlastní vyhrazenou službu Azure AI Search, která nabízí nejvyšší úroveň dat a oddělení úloh.

  • Kombinace obou: Větší a aktivnější tenanti se přiřazují vyhrazené služby, zatímco menší tenanti mají přiřazené jednotlivé indexy ve sdílených službách.

Model 1: Jeden index na tenanta

Znázornění modelu indexu na tenanta

V modelu indexu na tenanta zabírá více tenantů jednu Search Azure AI, kde má každý tenant vlastní index.

Tenanti dosahuje izolace dat, protože všechny požadavky na vyhledávání a operace s dokumentem se vydávají na úrovni indexu ve službě Azure AI Search. V aplikační vrstvě je potřeba mít povědomí o směrování provozu různých tenantů na správné indexy a zároveň spravovat prostředky na úrovni služby napříč všemi tenanty.

Klíčovým atributem modelu index-per-tenant je schopnost vývojáře aplikací přepsat kapacitu vyhledávací služby mezi tenanty aplikace. Pokud mají tenanti nerovnoměrnou distribuci úloh, je možné optimální kombinaci tenantů distribuovat napříč indexy vyhledávací služby, aby vyhovovala řadě vysoce aktivních tenantů náročných na prostředky a současně obsluhoval dlouhý konec méně aktivních tenantů. Kompromisem je nemožnost modelu zvládnout situace, kdy je každý tenant současně vysoce aktivní.

Model indexu na tenanta poskytuje základ pro model proměnných nákladů, kde se předem koupí celá Search Azure AI a následně vyplní tenanty. To umožňuje určit nevyužitou kapacitu pro zkušební verze a bezplatné účty.

U aplikací s globálními nároky nemusí být model indexu na tenanta nejúčinnější. Pokud se tenanti aplikace distribuují po celém světě, může být pro každou oblast potřeba samostatná služba, která duplikuje náklady napříč jednotlivými oblastmi.

Azure AI Search umožňuje škálovat jak jednotlivé indexy, tak celkový počet indexů, které se mají zvětšit. Pokud zvolíte odpovídající cenovou úroveň, oddíly a repliky se dají přidat do celé vyhledávací služby, když se jednotlivé indexy v rámci služby z hlediska úložiště nebo provozu příliš rozrůstá.

Pokud se celkový počet indexů pro jednu službu příliš rozrůstá, musí být zřízena jiná služba, aby vyhovovala novým tenantům. Pokud je potřeba přesouvat indexy mezi vyhledávacími službami při přidání nových služeb, je nutné data z indexu ručně zkopírovat z jednoho indexu do druhého, protože Azure AI Search neumožňuje přesun indexu.

Model 2: Jedna služba na tenanta

Znázornění modelu služby na tenanta

V architektuře služby na tenanta má každý tenant vlastní vyhledávací službu.

V tomto modelu aplikace dosáhne maximální úrovně izolace pro své tenanty. Každá služba má vyhrazené úložiště a propustnost pro zpracování žádostí o vyhledávání. Každý tenant má individuální vlastnictví klíčů rozhraní API.

U aplikací, ve kterých má každý tenant velké nároky nebo má málo proměnlivosti mezi tenanty, je model služby na tenanta efektivní volbou, protože prostředky se nesdílejí napříč různými úlohami tenantů.

Služba na model tenanta také nabízí výhodu předvídatelného modelu s pevnými náklady. Neexistuje žádná počáteční investice do celé vyhledávací služby, dokud není tenant, který by ho vyplnil, ale náklady na tenanta jsou vyšší než model indexu na tenanta.

Model služby na tenanta je efektivní volbou pro aplikace s globálními nároky. U geograficky distribuovaných tenantů je snadné mít službu každého tenanta v příslušné oblasti.

Problémy při škálování tohoto modelu vznikají, když jednotliví tenanti přerostou svou službu. Azure AI Search v současné době nepodporuje upgrade cenové úrovně vyhledávací služby, takže všechna data by se musela ručně zkopírovat do nové služby.

Model 3: Hybridní

Dalším vzorem modelování víceklientské architektury je kombinování strategií indexů na tenanta i služby na tenanta.

Kombinací těchto dvou vzorů můžou největší tenanti aplikace zabírat vyhrazené služby, zatímco dlouhý konec méně aktivních, menší tenanti můžou zabírat indexy ve sdílené službě. Tento model zajišťuje, že největší tenanti mají konzistentně vysoký výkon ze služby a zároveň pomáhají chránit menší tenanty před všemi hlučné sousedy.

Implementace této strategie ale spoléhá na předpovědí, kteří tenanti budou vyžadovat vyhrazenou službu a index ve sdílené službě. Složitost aplikace se zvyšuje s nutností spravovat oba tyto víceklientské modely.

Dosažení rovnoměrné členitosti

Výše uvedené vzory návrhu pro modelování scénářů s více tenanty ve službě Azure AI Search předpokládají jednotný rozsah, ve kterém je každý tenant celou instancí aplikace. Aplikace ale můžou někdy zpracovávat mnoho menších oborů.

Pokud modely service-per-tenant a index-per-tenant nejsou dostatečně malé rozsahy, je možné modelovat index, aby se dosáhlo ještě jemněji členitosti.

Pokud chcete, aby se jeden index pro různé koncové body klienta choval odlišně, může být pole přidáno do indexu, které určuje určitou hodnotu pro každého možného klienta. Pokaždé, když klient zavolá Azure AI Search k dotazování nebo úpravě indexu, kód z klientské aplikace určuje odpovídající hodnotu pro toto pole pomocí funkce filtru Azure AI Search v době dotazu.

Tuto metodu lze použít k dosažení funkčnosti samostatných uživatelských účtů, samostatných úrovní oprávnění a dokonce i zcela samostatných aplikací.

Poznámka:

Použití výše popsaného přístupu ke konfiguraci jednoho indexu pro obsluhu více tenantů ovlivňuje význam výsledků hledání. Skóre relevance vyhledávání se vypočítávají v oboru na úrovni indexu, ne v oboru na úrovni tenanta, takže všechna data tenantů se začlení do podkladových statistik skóre relevance, jako je frekvence termínů.

Další kroky

Azure AI Search je přesvědčivou volbou pro mnoho aplikací. Při vyhodnocování různých vzorů návrhu pro víceklientské aplikace zvažte různé cenové úrovně a příslušné limity služeb, které nejlépe přizpůsobí azure AI Search tak, aby vyhovovaly aplikačním úlohám a architekturám všech velikostí.