Designmönster för SaaS-program med flera klienter och Azure AI Search

Ett program med flera klienter är ett program som tillhandahåller samma tjänster och funktioner till valfritt antal klienter som inte kan se eller dela data från någon annan klientorganisation. I den här artikeln beskrivs strategier för klientisolering för program med flera klienter som skapats med Azure AI Search.

Azure AI Search-begrepp

Som en sök-som-en-tjänst-lösning gör Azure AI Search det möjligt för utvecklare att lägga till omfattande sökupplevelser i program utan att hantera någon infrastruktur eller bli expert på informationshämtning. Data laddas upp till tjänsten och lagras sedan i molnet. Med hjälp av enkla begäranden till Azure AI Search-API:et kan data sedan ändras och sökas igenom.

tjänsten Search, index, fält och dokument

Innan du diskuterar designmönster är det viktigt att förstå några grundläggande begrepp.

När du använder Azure AI Search prenumererar man på en söktjänst. När data laddas upp till Azure AI Search lagras de i ett index i söktjänsten. Det kan finnas ett antal index i en enda tjänst. Om du vill använda de välbekanta begreppen för databaser kan söktjänsten liknas vid en databas, medan indexen i en tjänst kan liknas vid tabeller i en databas.

Varje index i en söktjänst har ett eget schema, som definieras av ett antal anpassningsbara fält. Data läggs till i ett Azure AI Search-index i form av enskilda dokument. Varje dokument måste laddas upp till ett visst index och måste passa indexets schema. När du söker efter data med Hjälp av Azure AI Search utfärdas sökfrågor i fulltext mot ett visst index. Om du vill jämföra dessa begrepp med en databas kan fält liknas vid kolumner i en tabell och dokument kan liknas vid rader.

Skalbarhet

Alla Azure AI-tjänsten Search på prisnivån Standard kan skalas i två dimensioner: lagring och tillgänglighet.

  • Partitioner kan läggas till för att öka lagringen av en söktjänst.
  • Repliker kan läggas till i en tjänst för att öka dataflödet för begäranden som en söktjänst kan hantera.

Genom att lägga till och ta bort partitioner och repliker vid kan söktjänstens kapacitet växa med mängden data och trafik som programmet kräver. För att en söktjänst ska uppnå ett skrivskyddat serviceavtal krävs två repliker. För att en tjänst ska uppnå ett skrivskyddat serviceavtal krävs tre repliker.

Det finns några olika prisnivåer i Azure AI Search, var och en av nivåerna har olika gränser och kvoter. Vissa av dessa gränser finns på tjänstnivå, vissa är på indexnivå och vissa är på partitionsnivå.

S3 hög densitet

I prisnivån S3 i Azure AI Search finns det ett alternativ för hd-läget (High Density) som är utformat specifikt för scenarier med flera klientorganisationer. I många fall är det nödvändigt att stödja ett stort antal mindre klienter under en enda tjänst för att uppnå fördelarna med enkelhet och kostnadseffektivitet.

S3 HD gör det möjligt för de många små indexen att packas under hanteringen av en enda söktjänst genom att handla med möjligheten att skala ut index med partitioner för möjligheten att vara värd för fler index i en enda tjänst.

En S3-tjänst är utformad för att vara värd för ett fast antal index (högst 200) och tillåta varje index att skalas i storlek vågrätt när nya partitioner läggs till i tjänsten. Om du lägger till partitioner i S3 HD-tjänster ökar det maximala antalet index som tjänsten kan vara värd för. Den idealiska maximala storleken för ett enskilt S3HD-index är cirka 50–80 GB, även om det inte finns någon hård storleksgräns för varje index som införts av systemet.

Överväganden för program med flera klienter

Program med flera klienter måste effektivt distribuera resurser mellan klientorganisationer samtidigt som en viss sekretessnivå bevaras mellan de olika klientorganisationer. Det finns några saker att tänka på när du utformar arkitekturen för ett sådant program:

  • Klientisolering: Programutvecklare måste vidta lämpliga åtgärder för att säkerställa att inga klienter har obehörig eller oönskad åtkomst till andra klientorganisationers data. Utöver datasekretessen kräver strategier för klientisolering effektiv hantering av delade resurser och skydd från bullriga grannar.

  • Molnresurskostnad: Precis som med andra program måste programvarulösningar förbli kostnadskonkurrerande som en komponent i ett program med flera klientorganisationer.

  • Enkel användning: När du utvecklar en arkitektur för flera klienter är det viktigt att tänka på hur programmet fungerar och hur komplext det är. Azure AI Search har ett serviceavtal på 99,9 %.

  • Globalt fotavtryck: Program med flera klienter behöver ofta hantera klienter som är distribuerade över hela världen.

  • Skalbarhet: Programutvecklare måste överväga hur de ska stämma av mellan att upprätthålla en tillräckligt låg nivå av programkomplexitet och att utforma programmet för skalning med antalet klienter och storleken på klientorganisationens data och arbetsbelastning.

Azure AI Search erbjuder några gränser som kan användas för att isolera klientorganisationens data och arbetsbelastning.

I ett scenario med flera klienter använder programutvecklaren en eller flera söktjänster och delar upp sina klienter mellan tjänster, index eller båda. Azure AI Search har några vanliga mönster när du modellerar ett scenario med flera klientorganisationer:

  • Ett index per klientorganisation: Varje klientorganisation har ett eget index i en söktjänst som delas med andra klienter.

  • En tjänst per klientorganisation: Varje klientorganisation har sina egna dedikerade Azure AI-tjänsten Search, vilket ger högsta nivå av data- och arbetsbelastningsavgränsning.

  • Blandning av båda: Större, mer aktiva klienter tilldelas dedikerade tjänster medan mindre klienter tilldelas enskilda index inom delade tjänster.

Modell 1: Ett index per klientorganisation

En beskrivning av index-per-klient-modellen

I en index-per-klientmodell upptar flera klienter en enda Azure AI-tjänsten Search där varje klientorganisation har ett eget index.

Klientorganisationer uppnår dataisolering eftersom alla sökbegäranden och dokumentåtgärder utfärdas på indexnivå i Azure AI Search. I programskiktet finns det behov av medvetenhet för att dirigera de olika klienternas trafik till rätt index samtidigt som resurser hanteras på tjänstnivå för alla klienter.

Ett nyckelattribut för index-per-klient-modellen är möjligheten för programutvecklaren att överprenumerera kapaciteten för en söktjänst bland programmets klientorganisationer. Om klientorganisationer har en ojämn fördelning av arbetsbelastningen kan den optimala kombinationen av klienter distribueras över en söktjänsts index för att hantera ett antal mycket aktiva, resursintensiva klientorganisationer samtidigt som de betjänar en lång svans av mindre aktiva klienter. Kompromissen är modellens oförmåga att hantera situationer där varje klientorganisation samtidigt är mycket aktiv.

Index-per-tenant-modellen utgör grunden för en variabel kostnadsmodell, där en hel Azure AI-tjänsten Search köps i förväg och sedan fylls med klienter. Detta gör att outnyttjad kapacitet kan tilldelas för utvärderingsversioner och kostnadsfria konton.

För program med ett globalt fotavtryck är index-per-klient-modellen kanske inte den mest effektiva. Om ett programs klientorganisationer distribueras över hela världen kan en separat tjänst vara nödvändig för varje region, vilket duplicerar kostnaderna för var och en av dem.

Med Azure AI Search kan både de enskilda indexen och det totala antalet index växa. Om en lämplig prisnivå väljs kan partitioner och repliker läggas till i hela söktjänsten när ett enskilt index i tjänsten blir för stort när det gäller lagring eller trafik.

Om det totala antalet index växer för stort för en enskild tjänst måste en annan tjänst etableras för att rymma de nya klienterna. Om index måste flyttas mellan söktjänster när nya tjänster läggs till måste data från indexet kopieras manuellt från ett index till ett annat eftersom Azure AI Search inte tillåter att ett index flyttas.

Modell 2: En tjänst per klientorganisation

En beskrivning av modellen för tjänst per klientorganisation

I en tjänst-per-klient-arkitektur har varje klientorganisation en egen söktjänst.

I den här modellen uppnår programmet maximal isoleringsnivå för sina klienter. Varje tjänst har dedikerad lagring och dataflöde för hantering av sökbegäranden. Varje klientorganisation har individuellt ägarskap för API-nycklar.

För program där varje klientorganisation har ett stort fotavtryck eller arbetsbelastningen har liten variabilitet från klientorganisation till klient är modellen för tjänst per klient ett effektivt val eftersom resurser inte delas mellan olika klientorganisationers arbetsbelastningar.

En tjänst per klientorganisationsmodell erbjuder också fördelen med en förutsägbar, fast kostnadsmodell. Det finns ingen direktinvestering i en hel söktjänst förrän det finns en klientorganisation som kan fylla den, men kostnaden per klient är högre än en index-per-klientmodell.

Service-per-tenant-modellen är ett effektivt val för program med ett globalt fotavtryck. Med geografiskt distribuerade klienter är det enkelt att ha varje klientorganisations tjänst i lämplig region.

Utmaningarna med att skala det här mönstret uppstår när enskilda klientorganisationer utökar sin tjänst. Azure AI Search stöder för närvarande inte uppgradering av prisnivån för en söktjänst, så alla data måste kopieras manuellt till en ny tjänst.

Modell 3: Hybrid

Ett annat mönster för modellering av flera klientorganisationer är att blanda strategier för både index per klientorganisation och tjänst per klientorganisation.

Genom att blanda de två mönstren kan ett programs största klientorganisationer uppta dedikerade tjänster medan den långa delen av mindre aktiva, mindre klienter kan uppta index i en delad tjänst. Den här modellen säkerställer att de största klientorganisationer har konsekvent höga prestanda från tjänsten samtidigt som de hjälper till att skydda de mindre klienterna från eventuella bullriga grannar.

Implementeringen av den här strategin bygger dock på framsynthet när det gäller att förutsäga vilka klienter som kräver en dedikerad tjänst jämfört med ett index i en delad tjänst. Programkomplexiteten ökar med behovet av att hantera båda dessa multitenancy-modeller.

Uppnå ännu finare kornighet

Ovanstående designmönster för att modellera scenarier med flera klienter i Azure AI Search förutsätter ett enhetligt omfång där varje klientorganisation är en hel instans av ett program. Program kan dock ibland hantera många mindre omfång.

Om service-per-tenant- och index-per-tenant-modeller inte är tillräckligt små omfång, är det möjligt att modellera ett index för att uppnå en ännu finare grad av kornighet.

För att ett enskilt index ska fungera annorlunda för olika klientslutpunkter kan ett fält läggas till i ett index, vilket anger ett visst värde för varje möjlig klient. Varje gång en klient anropar Azure AI Search för att fråga efter eller ändra ett index anger koden från klientprogrammet lämpligt värde för fältet med hjälp av Azure AI Searchs filterfunktion vid frågetillfället.

Den här metoden kan användas för att uppnå funktioner för separata användarkonton, separata behörighetsnivåer och till och med helt separata program.

Kommentar

Om du använder den metod som beskrivs ovan för att konfigurera ett enda index för att hantera flera klienter påverkas relevansen av sökresultat. Relevanspoäng för sökning beräknas i ett indexnivåomfång, inte ett omfång på klientnivå, så alla klientorganisationers data införlivas i relevanspoängens underliggande statistik, till exempel termfrekvens.

Nästa steg

Azure AI Search är ett övertygande val för många program. När du utvärderar de olika designmönstren för program med flera klienter bör du överväga de olika prisnivåerna och respektive tjänstgränser för att skräddarsy Azure AI Search så att de passar programarbetsbelastningar och arkitekturer i alla storlekar.