Den här artikeln handlar om den öppna källkodsversionen av Magento, en e-handelsplattform skriven i PHP. Den här artikeln handlar inte om Adobe Commerce. Det här exempelscenariot visar Magento som distribuerats till Azure Kubernetes Service (AKS) och beskriver vanliga metodtips för att hantera Magento i Azure.
Arkitektur
Ladda ned en Visio-fil med den här arkitekturen.
Arbetsflöde
- Azure Kubernetes Service (AKS) distribuerar Kubernetes-klustret med Lack, Magento, Redis och Elasticsearch i olika poddar.
- AKS skapar ett virtuellt nätverk för att distribuera agentnoderna. Skapa det virtuella nätverket i förväg för att konfigurera undernätskonfiguration, privat länk och begränsning av utgående trafik.
- Lack installeras framför HTTP-servrarna för att fungera som en helsidescache.
- Azure Database for MySQL lagrar transaktionsdata som beställningar och kataloger. Version 8.0 rekommenderas.
- Azure Files Premium, Azure NetApp Files eller ett motsvarande NAS-system (Network Attached Storage) lagrar mediefiler som produktbilder. Magento behöver ett Kubernetes-kompatibelt filsystem som kan montera en volym i ReadWriteMany-läge , till exempel Azure Files Premium eller Azure NetApp Files. Lagringsalternativ för program i Azure Kubernetes Service (AKS). Vi rekommenderar starkt att du testar in- och utdataåtgärder per sekund (IOPS) och väljer de alternativ som fungerar åt dig.
- Ett nätverk för innehållsleverans (CDN) hanterar statiskt innehåll som CSS, JavaScript och bilder. Att hantera innehåll via ett CDN minimerar nätverksfördröjningen mellan användare och datacentret. Ett CDN kan ta bort betydande belastning från NAS genom att cachelagra och hantera statiskt innehåll.
- Redis lagrar sessionsdata. Att vara värd för Redis på containrar rekommenderas av prestandaskäl.
- AKS använder en Microsoft Entra-ID-identitet för att skapa och hantera andra Azure-resurser som Azure-lastbalanserare, användarautentisering, rollbaserad åtkomstkontroll och hanterad identitet.
- Azure Container Registry lagrar de privata Docker-avbildningar som distribueras till AKS-klustret. Du kan använda andra containerregister som Docker Hub. Standardinstallationen magento skriver några hemligheter till avbildningen.
- Azure Monitor samlar in och lagrar mått och loggar, inklusive Azure-tjänstplattformsmått och programtelemetri. Azure Monitor integreras med AKS för att samla in kontrollant-, nod- och containermått samt container- och huvudnodloggar.
Komponenter
- Azure Kubernetes Service (AKS): Skala containrar på en hanterad Kubernetes-tjänst.
- Azure Virtual Network: Virtuella nätverk i molnet.
- Azure Database for MySQL: MySQL i molnet som är kostnadseffektivt och enkelt att konfigurera, använda och skala.
- Azure Files: Filresurser i molnet. Den här lösningen använder Premium-nivån.
- Azure NetApp Files: Azure-filresurser i företagsklass som drivs av NetApp.
- Azure Content Delivery Network:Ett snabbt, tillförlitligt och globalt nätverk för innehållsleverans.
- Microsoft Entra-ID: Hantering av identiteter och åtkomst med flera moln.
- Azure Container Registry: Ett register över Docker- och Open Container Initiative-avbildningar (OCI) med stöd för alla OCI-artefakter.
- Azure Monitor: Observerbarhet från slutpunkt till slutpunkt för dina program, infrastruktur och nätverk
Information om scenario
Mer information om Magento finns i Översikt över lokal installation.
Potentiella användningsfall
Den här lösningen är optimerad för detaljhandeln.
Att tänka på
Dessa överväganden implementerar grundpelarna i Azure Well-Architected Framework, som är en uppsättning vägledande grundsatser som kan användas för att förbättra kvaliteten på en arbetsbelastning. Mer information finns i Microsoft Azure Well-Architected Framework.
Säkerhet
Här följer några säkerhetsöverväganden för det här scenariot:
Konfigurera en privat länk för MySQL så att trafiken mellan klienter och MySQL inte exponeras för det offentliga Internet. Mer information finns i Vad är Azure Private Link.
Du kan lägga till Azure Application Gateway-ingress för att stödja SSL-avslutning (Secure Socket Layer).
Du kan också aktivera Azure Web Application Firewall tillsammans med Application Gateway för att skydda trafik som kommer in i webbprogrammet som finns i AKS-klustret.
Rollbaserad åtkomstkontroll (RBAC)
Både Kubernetes och Azure har mekanismer för rollbaserad åtkomstkontroll (RBAC).
Azure RBAC styr åtkomsten till Azure-resurser, inklusive möjligheten att skapa resurser. Azure RBAC kan tilldela behörigheter till användare, grupper eller tjänstens huvudnamn, som är säkerhetsidentiteter som används av program.
Kubernetes RBAC styr behörigheter till Kubernetes API. Att till exempel skapa poddar och visa poddar är åtgärder som Kubernetes RBAC kan auktorisera till användare.
AKS integrerar RBAC-mekanismerna i Azure och Kubernetes. Om du vill tilldela AKS-behörigheter till användare skapar du roller och rollbindningar:
En roll är en uppsättning behörigheter som gäller inom ett namnområde. Behörigheter definieras som verb som hämta, uppdatera, skapa eller ta bort på resurser som poddar eller distributioner.
Rollbindning tilldelar användare eller grupper till roller.
Ett ClusterRole-objekt definierar en roll som gäller för hela AKS-klustret i alla namnområden. Om du vill tilldela användare eller grupper till en ClusterRole skapar du en ClusterRoleBinding.
Du kan också använda Azure RBAC för Kubernetes-auktorisering, vilket möjliggör enhetlig hantering och åtkomstkontroll över Azure-resurser, AKS- och Kubernetes-resurser.
När du skapar AKS-klustret kan du konfigurera det så att det använder Microsoft Entra-ID för användarautentisering.
Mer information om hur du konfigurerar Microsoft Entra-integrering finns i AKS-hanterad Microsoft Entra-integrering.
Mer information om hur du styr åtkomsten till klusterresurser med kubernetes RBAC- och Microsoft Entra-identiteter finns i Använda Kubernetes RBAC med Microsoft Entra-ID.
Skalbarhet
Det finns flera sätt att optimera skalbarheten för det här scenariot:
Media och statiska filer
Etablera Azure Files, Azure NetApp Files eller något annat NAS-system (network-attached storage). Magento kan lagra tusentals mediefiler, till exempel produktbilder. Se till att etablera NAS-produkter med tillräckliga indata-/utdataåtgärder per sekund (IOPS) för att hantera efterfrågan.
Minimera storleken på statiskt innehåll som HTML, CSS och JavaScript. Minification kan minska bandbreddskostnaderna och ge användarna en mer dynamisk upplevelse.
Databasanslutning
Aktivera beständig anslutning till MySQL-databasen, så Magento fortsätter att återanvända den befintliga anslutningen i stället för att skapa en ny för varje begäran. Om du vill aktivera beständig anslutning lägger du till följande rad i
db
avsnittet magento env.php-filen :'persistent' => '1'
Om MySQL förbrukar för mycket CPU minskar du användningen genom att inaktivera antalet produkter från lagernavigeringen i Magento-konfigurationen:
magento config:set -vvv catalog/layered_navigation/display_product_count 0
Cachelagring
Konfigurera OPcache för CACHElagring och optimering av PHP-kod.
Kontrollera att följande direktiv har angetts och inte har angetts i php.ini:
opcache.enable=1
opcache.save_comments=1
opcache.validate_timestamps=0
Belastningsutjämning av lackcache genom att köra flera instanser på poddar så att den kan skalas.
Loggning
Begränsa åtkomstloggning för att undvika prestandaproblem och förhindra att känsliga data exponeras, till exempel klientens IP-adresser.
Använd följande lackkommando för att begränsa loggningen till felnivå:
varnishd -s malloc,1G -a :80 -f /etc/varnish/magento.vcl && varnishlog -q "RespStatus >= 400 or BerespStatus >= 400"
Om du använder Apache-webbservern för ingress begränsar du Apache-loggning till felnivå genom att lägga till följande rad i Magento-posten
VirtualHost
i Apache Server-konfigurationen:CustomLog /dev/null common
Inaktivera PHP-FPM-åtkomstloggar genom att kommentera ut
access.log
inställningen i alla PHP-FPM-konfigurationer.
Tillgänglighet
Överväg följande sätt att optimera tillgängligheten för det här scenariot:
Hälsotillståndsavsökningar
Kubernetes definierar två typer av hälsoavsökningar:
- Beredskapsavsökningen talar om för Kubernetes om podden är redo att ta emot begäranden.
- Liveness-avsökningen talar om för Kubernetes om en podd ska tas bort och en ny instans startas.
Anpassa Kubernetes-hälsoavsökningarna och använd dem för att se om en podd är vid god hälsa.
Tillgänglighetszoner
Tillgänglighetszoner är unika fysiska platser i Azure-regioner som hjälper till att skydda program och data från datacenterfel. Varje zon består av ett eller flera datacenter. Program i zoner kan förbli tillgängliga även om det uppstår ett fysiskt fel i ett enda datacenter.
AKS-kluster kan distribueras över flera tillgänglighetszoner för att ge en högre tillgänglighetsnivå och skydda mot maskinvarufel eller planerade underhållshändelser. Genom att definiera klusternodpooler så att de sträcker sig över flera zoner kan noderna fortsätta att fungera även om en enda zon slutar fungera. Mer information om hur du distribuerar AKS till tillgänglighetszoner finns i Skapa ett AKS-kluster som använder tillgänglighetszoner.
Resursbegränsningar
Resurskonkurration kan påverka tjänstens tillgänglighet. Definiera begränsningar för containerresurser så att ingen enskild container kan överbelasta klusterminnet och CPU-resurserna. Du kan använda AKS-diagnostik för att identifiera eventuella problem i klustret.
Använd resursgränsen för att begränsa det totala antalet resurser som tillåts för en container, så att en viss container inte kan svälta andra.
DevOps
Här följer några operativa överväganden för det här scenariot:
I det här scenariot exponerar MySQL inte en offentlig slutpunkt. Om byggservern lagrar konfigurationsinställningar till serverdelens MySQL-databas ska du distribuera servern till samma virtuella nätverksundernät som MySQL ansluter till via tjänstslutpunkten.
Använd Azure Container Registry eller ett annat containerregister som Docker Hub för att lagra de privata Docker-avbildningar som distribueras till klustret. AKS kan autentisera med Azure Container Registry med hjälp av dess Microsoft Entra-identitet.
Övervakning
Azure Monitor tillhandahåller viktiga mått för alla Azure-tjänster, inklusive containermått från AKS. Skapa en instrumentpanel för att visa alla mått på ett och samma ställe.
Förutom att använda Azure Monitor för containrar kan du nu använda hanterad tjänst för Prometheus för att samla in och analysera mått i stor skala via en Prometheus-kompatibel övervakningslösning.
Du kan också använda Azure Managed Grafana (eller självhanterad Grafana) för att visualisera Prometheus-mått. När du använder Azure Managed Grafana kan Grafana använda Azure Monitor-arbetsytan på en Grafana-instrumentpanel genom att ansluta din Azure Monitor-arbetsyta till Azure Managed Grafana-arbetsytan. Sedan har du åtkomst till flera fördefinierade instrumentpaneler som använder Prometheus-mått och du kan också skapa anpassade instrumentpaneler.
Prestandatest
Använd Magento Performance Toolkit för prestandatestning. Verktygslådan använder Apache JMeter för att simulera kundbeteenden som att logga in, bläddra bland produkter och checka ut.
Du bör också överväga att använda Azure Load Testing, en fullständigt hanterad belastningstestningstjänst som gör att du kan generera högskalig belastning. Med Azure Load Testing kan du snabbt skapa ett belastningstest för ditt webbprogram med hjälp av en URL. För mer avancerade scenarier för belastningstestning kan du också skapa ett belastningstest genom att återanvända ett befintligt JMeter-testskript.
Kostnadsoptimering
Kostnadsoptimering handlar om att titta på sätt att minska onödiga utgifter och förbättra drifteffektiviteten. Mer information finns i Översikt över kostnadsoptimeringspelare.
Utför kapacitetsplanering baserat på prestandatestning.
Normalt beräknar du kostnader med hjälp av priskalkylatorn för Azure.
Se andra kostnadsöverväganden i Principer för kostnadsoptimering i Microsoft Azure Well-Architected Framework.