I en server med flera tjänster med en enda process är en enskild process (även känd som en överordnad process eller övervakarprocess) vanligtvis ansvarig för att hantera de inkommande nätverksanslutningarna och delegera hanteringen av individuella tjänsteförfrågningar till olika arbetstrådar eller underordnade processer. Så här fungerar det:
Lyssna på nätverksanslutning:
Serverprocessen binder till en specifik nätverksport och börjar lyssna efter inkommande klientförfrågningar. Denna lyssningsport är exponerad mot omvärlden, vilket gör att klienter kan ansluta och skicka serviceförfrågningar.
Hantering av kundförfrågningar:
När en klient ansluter till servern accepterar serverprocessen anslutningen och upprättar en kommunikationskanal. Den läser den första begäran från klienten, som vanligtvis innehåller information om den begärda tjänsten och eventuella nödvändiga data eller parametrar.
Arbetstråd/processskapande:
Baserat på den mottagna begäran bestämmer serverprocessen vilken tjänst klienten efterfrågar. Den skapar sedan en arbetstråd eller skapar en underordnad process som är dedikerad till att hantera just den begäran. Arbetstråden eller den underordnade processen tilldelas en unik identifierare och associeras med klientens anslutning.
Begär delegering och verkställighet:
Serverprocessen skickar klientens begäran, tillsammans med all tillhörande data, till den nyskapade arbetstråden eller underordnade processen. Arbetaren tar sedan över ansvaret för att behandla förfrågan, utföra den nödvändiga affärslogiken och förbereda svaret.
Resultatretur:
När arbetstråden eller den underordnade processen har avslutat bearbetningen av begäran och generering av resultatet, skickar den svaret tillbaka till serverprocessen. Serverprocessen ansvarar för att skicka svaret till klienten över den etablerade nätverksanslutningen.
Fördelar:
Effektivt resursutnyttjande:Genom att använda arbetstrådar eller underordnade processer kan en multitjänstserver med en enda process effektivt distribuera uppgifter och balansera arbetsbelastningen, vilket resulterar i förbättrad resursallokering.
Felisolering:Eftersom varje arbetstråd eller underordnad process körs som en separat enhet, påverkar ett fel eller undantag inom en begäran inte behandlingen av andra förfrågningar. Denna funktion förbättrar tillförlitligheten och felisoleringen i servern.
Modularitet och skalbarhet:Den modulära designen möjliggör enkel integrering av nya tjänster utan att kräva betydande förändringar av kärnserverprocessen. Dessutom kan lägga till fler resurser (som arbetstrådar eller underordnade processer) göras dynamiskt för att hantera en ökad belastning, vilket gör servern skalbar.
Exempel på enprocess-multitjänstservrar:
Nginx:Nginx är en populär webbserver med öppen källkod som ofta används i scenarier med hög trafik. Den använder en multitjänstarkitektur med en process med arbetsprocesser för att hantera inkommande förfrågningar och leverera webbinnehåll effektivt.
Apache mod_proxy:Mod_proxy-modulen för Apache-webbservern gör att den kan fungera som en omvänd proxy och vidarebefordra inkommande förfrågningar till olika backend-tjänster. Det följer en enprocess multi-service-metod för att hantera dessa omvänd proxy-operationer.
Node.js Cluster:Node.js erbjuder en inbyggd klustermodul som gör det möjligt för utvecklare att skapa en enprocessserver med flera arbetstrådar. Detta tillvägagångssätt används ofta för att förbättra skalbarheten för Node.js-applikationer genom att fördela uppgifter över flera trådar.