Doporučení pro hostování Azure pro webové aplikace ASP.NET Core

Tip

Tento obsah je výňatek z eBooku, architekta moderních webových aplikací s ASP.NET Core a Azure, který je k dispozici na webu .NET Docs nebo jako bezplatný soubor PDF ke stažení, který si můžete přečíst offline.

Architect Modern Web Applications with ASP.NET Core and Azure eBook cover thumbnail.

"Vedoucí pracovníci vedení firmy všude obcházejí IT oddělení, aby získali aplikace z cloudu (označované také jako SaaS) a zaplatili za ně, jako by za ně zaplatili předplatné časopisu. A když už služba není nutná, můžou předplatné zrušit bez nevyužitého vybavení v rohu."
- Daryl Plummer, analytik SpolečnostiVažuje

Microsoft Azure ji může podporovat bez ohledu na to, co vaše aplikace potřebuje a architektura. Vaše hostování může být stejně jednoduché jako statický web nebo sofistikovaná aplikace složená z desítek služeb. Pro ASP.NET monolitické webové aplikace Core a podpůrné služby se doporučuje několik známých konfigurací. Doporučení k tomuto článku jsou seskupené na základě typu prostředku, který se má hostovat, ať už jde o úplné aplikace, jednotlivé procesy nebo data.

Webové aplikace

Webové aplikace je možné hostovat pomocí:

  • App Service Web Apps

  • Kontejnery (několik možností)

  • Virtuální počítače (VM)

Z toho je doporučeným přístupem pro většinu scénářů App Service Web Apps, včetně jednoduchých aplikací založených na kontejnerech. U architektur mikroslužeb zvažte přístup založený na kontejnerech. Pokud potřebujete větší kontrolu nad počítači, na kterých běží vaše aplikace, zvažte Službu Azure Virtual Machines.

App Service Web Apps

App Service Web Apps nabízí plně spravovanou platformu optimalizovanou pro hostování webových aplikací. Jedná se o nabídku PaaS (Platforma jako služba), která vám umožní soustředit se na obchodní logiku, zatímco Azure se stará o infrastrukturu potřebnou ke spuštění a škálování aplikace. Některé klíčové funkce App Service Web Apps:

  • Optimalizace DevOps (kontinuální integrace a doručování, více prostředí, testování A/B, podpora skriptování).

  • Globální škálování a vysoká dostupnost

  • Připojení na platformy SaaS a vaše místní data.

  • Zabezpečení a dodržování předpisů.

  • Integrace sady Visual Studio

Azure App Service je nejlepší volbou pro většinu webových aplikací. Nasazování a správa jsou integrované přímo do platformy, weby se rychle škálují pro zvládnutí vysokého přenosového zatížení a integrované vyrovnávání zatížení a služba Traffic Manager zajišťují vysokou dostupnost. Existující weby můžete snadno přesunout do služby Aplikace Azure Service pomocí nástroje pro online migraci. Můžete použít opensourcovou aplikaci z galerie webových aplikací nebo vytvořit nový web pomocí architektury a nástrojů podle vašeho výběru. Díky funkci WebJobs můžete do své webové aplikace App Service snadno přidat zpracování úloh na pozadí. Pokud máte existující ASP.NET aplikaci hostované místně pomocí místní databáze, existuje jasná cesta k migraci. Webovou aplikaci App Service můžete použít se službou Azure SQL Database (nebo zabezpečený přístup k místnímu databázovému serveru, pokud je to upřednostňované).

Recommended migration strategy for on-premises .NET apps to Azure App Service

Ve většině případů je přechod z místně hostované aplikace ASP.NET do webové aplikace App Service jednoduchý proces. U samotné aplikace by se nemělo vyžadovat jen málo změn a může rychle začít využívat výhod mnoha funkcí, které Aplikace Azure služba Web Apps nabízí.

Kromě aplikací, které nejsou optimalizované pro cloud, jsou Aplikace Azure Služba Web Apps vynikajícím řešením pro mnoho jednoduchých monolitických (nedistribuovaných) aplikací, jako je mnoho aplikací ASP.NET Core. V tomto přístupu je architektura základní a jednoduchá pro pochopení a správu:

Basic Azure architecture

Pro správu takové aplikace obvykle stačí malý počet prostředků v jedné skupině prostředků. Aplikace, které se obvykle nasazují jako jedna jednotka, a ne aplikace, které se skládají z mnoha samostatných procesů, jsou vhodnými kandidáty pro tento základní přístup k architektuře. I když je tento přístup pro architekturu jednoduchý, umožňuje hostované aplikaci vertikálně navýšit kapacitu (více prostředků na uzel) i ven (více hostovaných uzlů) tak, aby splňovala jakékoli zvýšení poptávky. S automatickým škálováním je možné aplikaci nakonfigurovat tak, aby automaticky upravovala počet uzlů hostujících aplikaci na základě poptávky a průměrného zatížení mezi uzly.

App Service Web Apps for Containers

Kromě podpory pro přímé hostování webových aplikací je možné ke spouštění kontejnerizovaných aplikací ve Windows a Linuxu použít app Service Web Apps for Containers . Pomocí této služby můžete snadno nasazovat a spouštět kontejnerizované aplikace, které se můžou škálovat s vaší firmou. Aplikace mají všechny funkce App Service Web Apps uvedené výše. Kromě toho služba Web Apps for Containers podporuje zjednodušenou CI/CD se službou Docker Hub, Azure Container Registry a GitHubem. Pomocí Azure DevOps můžete definovat kanály sestavení a nasazení, které publikují změny v registru. Tyto změny je pak možné otestovat v přípravném prostředí a automaticky nasadit do produkčního prostředí pomocí slotů nasazení, což umožňuje upgrady s nulovými výpadky. Vrácení zpět k předchozím verzím je možné provést stejně snadno.

Existuje několik scénářů, ve kterých služba Web Apps for Containers dává největší smysl. Pokud máte existující aplikace, které můžete kontejnerizovat, ať už v kontejnerech windows nebo Linuxu, můžete je snadno hostovat pomocí této sady nástrojů. Jednoduše publikujte kontejner a nakonfigurujte Službu Web Apps for Containers tak, aby načítá nejnovější verzi této image z vybraného registru. Jedná se o přístup "lift and shift" k migraci z klasických modelů hostování aplikací na model optimalizovaný pro cloud.

Migrate containerized on-premises .NET application to Azure Web Apps for Containers

Tento přístup také funguje dobře, pokud se váš vývojový tým může přesunout do procesu vývoje založeného na kontejnerech. Vnitřní smyčka vývoje aplikací s kontejnery zahrnuje sestavení aplikace s kontejnery. Změny kódu a konfigurace kontejneru se předávají do správy zdrojového kódu a automatizované sestavení zodpovídá za publikování nových imagí kontejnerů do registru, jako je Docker Hub nebo Azure Container Registry. Tyto image se pak používají jako základ pro další vývoj a také pro nasazení do produkčního prostředí, jak je znázorněno v následujícím diagramu:

End to End Docker DevOps Lifecycle Workflow

Vývoj s využitím kontejnerů nabízí řadu výhod, zejména v případě, že se kontejnery používají v produkčním prostředí. Stejná konfigurace kontejneru se používá k hostování aplikace v každém prostředí, ve kterém běží, od místního vývojového počítače po sestavení a testování systémů do produkčního prostředí. Tento přístup výrazně snižuje pravděpodobnost vad způsobených rozdíly v konfiguraci počítače nebo verzích softwaru. Vývojáři můžou také používat libovolné nástroje, se kterými jsou nejproduktivnější, včetně operačního systému, protože kontejnery můžou běžet na jakémkoli operačním systému. V některých případech můžou být distribuované aplikace zahrnující mnoho kontejnerů velmi náročné na prostředky, aby běžely na jednom vývojovém počítači. V tomto scénáři může být vhodné upgradovat na použití Kubernetes a Azure Dev Spaces, které jsou popsané v další části.

Vzhledem k tomu, že se části větších aplikací rozdělí do vlastních menších, nezávislých mikroslužeb, je možné použít další vzory návrhu ke zlepšení chování aplikací. Místo přímé práce s jednotlivými službami může brána rozhraní API zjednodušit přístup a oddělit klienta od jeho back-endu. Samostatné back-endy služeb pro různé front-endy také umožňují, aby se služby vyvíjely v souladu s jejich spotřebiteli. K běžným službám je možné přistupovat prostřednictvím samostatného kontejneru sajdkáře, který může zahrnovat běžné knihovny připojení klientů pomocí vzoru ambasadora.

Microservices sample architecture with several common design patterns noted.

Přečtěte si další informace o vzorech návrhu, které je potřeba zvážit při vytváření systémů založených na mikroslužbách.

Azure Kubernetes Service

Azure Kubernetes Service (AKS) spravuje hostované prostředí Kubernetes a umožňuje rychle a snadno nasazovat a spravovat kontejnerizované aplikace bez znalosti orchestrace kontejnerů. Eliminuje také zátěž probíhajících operací a údržby zřizováním, upgradem a škálováním prostředků na vyžádání, aniž by se vaše aplikace přepísaly do režimu offline.

AKS zjednodušuje správu clusteru Kubernetes a snižuje provozní režii s tím spojenou díky přenášení většiny zodpovědnosti na Azure. Jako hostovaná služba Kubernetes se za vás Azure stará o důležité úlohy, jako je monitorování stavu a údržba. Platíte také jenom za uzly agentů v rámci clusterů, ne za hlavní servery. AKS jako spravovaná služba Kubernetes poskytuje:

  • Automatizované upgrady a opravy verzí Kubernetes
  • Snadné škálování clusteru
  • Samoopravení hostované řídicí roviny (předlohy).
  • Úspora nákladů – platíte jenom za uzly fondu agentů.

Díky tomu, že se Azure stará o správu uzlů ve vašem clusteru AKS, už řadu úloh, například upgrady clusteru, nemusíte provádět ručně. Vzhledem k tomu, že Azure zpracovává tyto důležité úlohy údržby za vás, AKS neposkytuje přímý přístup ke clusteru (například s protokolem SSH).

Týmy, které využívají AKS, můžou využívat také Azure Dev Spaces. Azure Dev Spaces pomáhá týmům soustředit se na vývoj a rychlou iteraci aplikace mikroslužeb tím, že týmům umožní pracovat přímo s celou architekturou mikroslužeb nebo aplikací běžící v AKS. Azure Dev Spaces také poskytuje způsob, jak nezávisle aktualizovat části architektury mikroslužeb izolovaně, aniž by to ovlivnilo zbytek clusteru AKS nebo jiných vývojářů.

Azure Dev Spaces workflow example

Azure Dev Spaces:

  • Minimalizace času a požadavků na prostředky místního počítače
  • Rychlejší iterace týmům
  • Snížení počtu prostředí integrace vyžadovaných týmem
  • Odebrání nutnosti napodobení určitých služeb v distribuovaném systému při vývoji/testování

Další informace o Azure Dev Spaces

Azure Virtual Machines

Pokud máte existující aplikaci, která by vyžadovala podstatné úpravy ke spuštění ve službě App Service, můžete zvolit službu Virtual Machines, abyste zjednodušili migraci do cloudu. Správná konfigurace, zabezpečení a údržba virtuálních počítačů ale ve srovnání s Aplikace Azure Service vyžaduje mnohem více času a it odborných znalostí. Pokud uvažujete o službě Azure Virtual Machines, nezapomeňte vzít v úvahu průběžné úsilí o údržbu potřebné k opravě, aktualizaci a správě prostředí virtuálního počítače. Azure Virtual Machines je infrastruktura jako služba (IaaS), zatímco App Service je PaaS. Měli byste také zvážit, jestli nasazení aplikace jako kontejneru Windows do služby Web App for Containers může být pro váš scénář proveditelnou možností.

Logické procesy

Jednotlivé logické procesy, které je možné oddělit od zbytku aplikace, je možné nasadit nezávisle na službě Azure Functions bezserverovým způsobem. Azure Functions umožňuje napsat jenom kód, který potřebujete pro daný problém, aniž byste se museli starat o aplikaci nebo infrastrukturu, aby ho bylo možné spustit. Můžete si vybrat z různých programovacích jazyků, včetně jazyků C#, F#, Node.js, Pythonu a PHP, což vám umožní vybrat nejproduktivnější jazyk pro úkol. Stejně jako u většiny cloudových řešení platíte jenom za dobu, kterou používáte, a podle potřeby můžete službě Azure Functions důvěřovat.

Data

Azure nabízí širokou škálu možností úložiště dat, aby vaše aplikace pro příslušná data mohli použít příslušného poskytovatele dat.

Pro transakční a relační data jsou nejlepší volbou azure SQL Database. Pro vysoce výkonná data převážně pro čtení je dobrou řešením mezipaměť Redis, která je zajištěna službou Azure SQL Database.

Nestrukturovaná data JSON se dají ukládat různými způsoby, od sloupců SLUŽBY SQL Database po objekty blob nebo tabulky ve službě Azure Storage až po Službu Cosmos DB. Z těchto možností nabízí Azure Cosmos DB nejlepší funkci dotazování a je doporučenou možností pro velký počet dokumentů založených na JSON, které musí podporovat dotazování.

Přechodná data založená na příkazech nebo událostech používaná k orchestraci chování aplikací můžou používat fronty Azure Service Bus nebo Azure Storage. Azure Service Bus nabízí větší flexibilitu a je doporučenou službou pro jiné než triviální zasílání zpráv v rámci aplikací a mezi aplikacemi.

Doporučení pro architekturu

Požadavky vaší aplikace by měly určovat její architekturu. K dispozici je mnoho různých služeb Azure. Volba správné možnosti je důležitým rozhodnutím. Microsoft nabízí galerii referenčních architektur, která pomáhá identifikovat typické architektury optimalizované pro běžné scénáře. Můžete najít referenční architekturu, která se mapuje přesně na požadavky vaší aplikace, nebo alespoň nabízí výchozí bod.

Obrázek 11–1 ukazuje ukázkovou referenční architekturu. Tento diagram popisuje doporučený přístup k architektuře pro web systému správy obsahu Sitecore optimalizovaný pro marketing.

Figure 11-1

Obrázek 11–1 Referenční architektura marketingového webu Sitecore

Reference – doporučení pro hostování Azure