Dit artikel gaat over de opensource-versie vanSource, een e-commerceplatform dat is geschreven in PHP. Dit artikel gaat niet over Adobe Commerce. In dit voorbeeldscenario ziet u Dat Is geïmplementeerd in Azure Kubernetes Service (AKS) en worden algemene aanbevolen procedures beschreven voor het hosten van Azure In Azure.
Architectuur
Een Visio-bestand van deze architectuur downloaden.
Workflow
- Azure Kubernetes Service (AKS) implementeert het Kubernetes-cluster van Varnish,Sources, Redis en Elasticsearch in verschillende pods.
- AKS maakt een virtueel netwerk om de agentknooppunten te implementeren. Maak vooraf het virtuele netwerk om subnetconfiguratie, private link en uitgaande beperkingen in te stellen.
- Varnish installeert vóór de HTTP-servers om te fungeren als een cache met volledige pagina's.
- Azure Database for MySQL slaat transactiegegevens op, zoals orders en catalogi. Versie 8.0 wordt aanbevolen.
- Azure Files Premium, Azure NetApp Files of een equivalent NAS-systeem (network-attached storage) slaat mediabestanden op, zoals productafbeeldingen. Een Kubernetes-compatibel bestandssysteem nodig dat een volume kan koppelen in de ReadWriteMany-modus , zoals Azure Files Premium of Azure NetApp Files. Opslagopties voor toepassingen in AKS (Azure Kubernetes Service). Het wordt ten zeerste aanbevolen om de invoer-/uitvoerbewerkingen per seconde (IOPS) te testen en de opties te kiezen die voor u werken.
- Een CDN (Content Delivery Network) dient statische inhoud, zoals CSS, JavaScript en afbeeldingen. Door inhoud te leveren via een CDN wordt de netwerklatentie tussen gebruikers en het datacenter geminimaliseerd. Een CDN kan aanzienlijke belasting van NAS verwijderen door statische inhoud in de cache op te cachen en te leveren.
- Redis slaat sessiegegevens op. Het hosten van Redis op containers wordt aanbevolen om prestatieredenen.
- AKS maakt gebruik van een Microsoft Entra ID-identiteit voor het maken en beheren van andere Azure-resources, zoals Azure Load Balancers, gebruikersverificatie, op rollen gebaseerd toegangsbeheer en beheerde identiteit.
- Azure Container Registry slaat de persoonlijke Docker-installatiekopieën op die zijn geïmplementeerd in het AKS-cluster. U kunt andere containerregisters gebruiken, zoals Docker Hub. Met de standaardinstallatie van Microsoft Worden enkele geheimen naar de installatiekopieën geschreven.
- Met Azure Monitor worden metrische gegevens en logboeken verzameld en opgeslagen, waaronder metrische gegevens van het Azure-serviceplatform en de telemetrie van toepassingen. Azure Monitor kan worden geïntegreerd met AKS voor het verzamelen van metrische gegevens voor controller, knooppunten en containers en hoofdknooppunten.
Onderdelen
- Azure Kubernetes Service (AKS): schaal containers op een beheerde Kubernetes-service.
- Azure Virtual Network: virtuele netwerken in de cloud.
- Azure Database for MySQL: MySQL in de cloud die rendabel en eenvoudig te instellen, werken en schalen is.
- Azure Files: bestandsshares in de cloud. Deze oplossing maakt gebruik van de Premium-laag.
- Azure NetApp Files: Azure-bestandsshares op ondernemingsniveau, mogelijk gemaakt door NetApp.
- Azure Content Delivery Network: Een snel, betrouwbaar en wereldwijd netwerk voor contentlevering.
- Microsoft Entra ID: Identiteits- en toegangsbeheer voor meerdere clouds.
- Azure Container Registry: een register van Docker- en Open Container Initiative-installatiekopieën (OCI), met ondersteuning voor alle OCI-artefacten.
- Azure Monitor: end-to-end waarneembaarheid voor uw toepassingen, infrastructuur en netwerk
Scenariodetails
Zie het overzicht van on-premises installatie voor meer informatie over De locatie.
Potentiële gebruikscases
Deze oplossing is geoptimaliseerd voor de detailhandel.
Overwegingen
Met deze overwegingen worden de pijlers van het Azure Well-Architected Framework geïmplementeerd. Dit is een set richtlijnen die kunnen worden gebruikt om de kwaliteit van een workload te verbeteren. Zie Microsoft Azure Well-Architected Framework voor meer informatie.
Beveiliging
Hier volgen enkele beveiligingsoverwegingen voor dit scenario:
Configureer een privékoppeling voor MySQL, zodat het verkeer tussen clients en MySQL niet beschikbaar is voor het openbare internet. Zie Wat is Azure Private Link voor meer informatie.
U kunt Azure-toepassing gateway-toegangsbeheerobject toevoegen ter ondersteuning van SSL-beëindiging (Secure Socket Layer).
U kunt Azure Web Application Firewall ook inschakelen samen met Application Gateway om verkeer te beveiligen dat wordt gehost in uw AKS-cluster.
Op rollen gebaseerd toegangsbeheer (RBAC)
Kubernetes en Azure hebben beide mechanismen voor op rollen gebaseerd toegangsbeheer (RBAC).
Azure RBAC beheert de toegang tot Azure-resources, inclusief de mogelijkheid om resources te maken. Azure RBAC kan machtigingen toewijzen aan gebruikers, groepen of service-principals. Dit zijn beveiligingsidentiteiten die door toepassingen worden gebruikt.
Kubernetes RBAC bepaalt machtigingen voor de Kubernetes-API. Het maken van pods en het weergeven van pods zijn bijvoorbeeld acties die Kubernetes RBAC aan gebruikers kan autoriseren.
AKS integreert de Azure- en Kubernetes RBAC-mechanismen. Als u AKS-machtigingen wilt toewijzen aan gebruikers, maakt u rollen en rolbindingen:
Een rol is een set machtigingen die van toepassing zijn binnen een naamruimte. Machtigingen worden gedefinieerd als werkwoorden, zoals ophalen, bijwerken, maken of verwijderen, voor resources zoals pods of implementaties.
Met rolbinding worden gebruikers of groepen toegewezen aan rollen.
Een ClusterRole-object definieert een rol die van toepassing is op het hele AKS-cluster, in alle naamruimten. Als u gebruikers of groepen wilt toewijzen aan een ClusterRole, maakt u een ClusterRoleBinding.
U kunt ook Azure RBAC gebruiken voor Kubernetes-autorisatie, waardoor geïntegreerd beheer en toegangsbeheer mogelijk is voor Azure-resources, AKS- en Kubernetes-resources.
Wanneer u het AKS-cluster maakt, kunt u dit configureren voor het gebruik van Microsoft Entra-id voor gebruikersverificatie.
Zie Kubernetes RBAC gebruiken met Microsoft Entra-id's voor meer informatie over het beheren van toegang tot clusterresources met Kubernetes RBAC en Microsoft Entra-identiteiten.
Schaalbaarheid
Er zijn verschillende manieren om de schaalbaarheid voor dit scenario te optimaliseren:
Media en statische bestanden
Richt Azure Files, Azure NetApp Files of een ander NAS-systeem (Network Attached Storage) adequaat in. Hiermee kunnen duizenden mediabestanden, zoals productafbeeldingen, worden opgeslagen. Zorg ervoor dat u NAS-producten met voldoende invoer-/uitvoerbewerkingen per seconde (IOPS) inricht om de vraag af te handelen.
Minimaliseer de grootte van statische inhoud, zoals HTML, CSS en JavaScript. Minification kan de bandbreedtekosten verlagen en een responsievere ervaring bieden voor gebruikers.
Databaseverbinding
Schakel een permanente verbinding met de MySQL-database in, zodat De bestaande verbinding steeds opnieuw wordt gebruikt in plaats van een nieuwe verbinding te maken voor elke aanvraag. Als u een permanente verbinding wilt inschakelen, voegt u de volgende regel toe aan de sectie van het
db
bestand Env.php- en env.php:'persistent' => '1'
Als MySQL te veel CPU verbruikt, vermindert u het gebruik door het aantal producten uit te schakelen van gelaagde navigatie in De configuratie van
5: magento config:set -vvv catalog/layered_navigation/display_product_count 0
Caching
Configureer OPcache voor caching en optimalisatie van PHP-code.
Zorg ervoor dat de volgende instructies in php.ini zijn ingesteld en niet worden gelezen:
opcache.enable=1
opcache.save_comments=1
opcache.validate_timestamps=0
Taken verdelen over de Varnish-cache door meerdere exemplaren uit te voeren op pods, zodat deze kunnen worden geschaald.
Logboekregistratie
Beperk logboekregistratie van toegang om prestatieproblemen te voorkomen en gevoelige gegevens, zoals IP-adressen van clients, bloot te stellen.
Gebruik de volgende Varnish-opdracht om logboekregistratie te beperken tot foutniveau:
varnishd -s malloc,1G -a :80 -f /etc/varnish/magento.vcl && varnishlog -q "RespStatus >= 400 or BerespStatus >= 400"
Als u Een Apache-webserver gebruikt voor inkomend verkeer, beperkt u Apache-logboekregistratie tot foutniveau door de volgende regel toe te voegen aan de vermelding In De Apache-server
VirtualHost
in de Apache-serverconfiguratie:CustomLog /dev/null common
Schakel PHP-FPM-toegangslogboeken uit door commentaar te maken bij alle
access.log
PHP-FPM-configuraties.
Beschikbaarheid
Overweeg deze manieren om de beschikbaarheid voor dit scenario te optimaliseren:
Statuscontroles
Kubernetes definieert twee typen statustest:
- De gereedheidstest vertelt Kubernetes of de pod gereed is voor het accepteren van aanvragen.
- De livenesstest vertelt Kubernetes of een pod moet worden verwijderd en een nieuw exemplaar moet worden gestart.
Pas de Kubernetes-statustests aan en gebruik deze om te zien of een pod een goede status heeft.
Beschikbaarheidszones
Beschikbaarheidszones zijn unieke fysieke locaties binnen Azure-regio's waarmee toepassingen en gegevens worden beschermd tegen storingen in datacenters. Elke zone bestaat uit een of meer datacenters. Toepassingen in zones kunnen beschikbaar blijven, zelfs als er een fysieke fout opgetreden is in één datacenter.
AKS-clusters kunnen worden geïmplementeerd in meerdere Beschikbaarheidszones, om een hoger beschikbaarheidsniveau te bieden en te beschermen tegen hardwarefouten of geplande onderhoudsgebeurtenissen. Als u clusterknooppuntgroepen definieert om meerdere zones te omvatten, kunnen knooppunten blijven werken, zelfs als één zone uitvalt. Zie Een AKS-cluster maken dat gebruikmaakt van beschikbaarheidszones voor meer informatie over het implementeren van AKS naar Beschikbaarheidszones.
Resourcebeperkingen
Resourceconflicten kunnen van invloed zijn op de beschikbaarheid van de service. Definieer beperkingen voor containerresources, zodat geen enkele container het clustergeheugen en de CPU-resources kan overweldigen. U kunt AKS-diagnostische gegevens gebruiken om eventuele problemen in het cluster te identificeren.
Gebruik resourcelimiet om het totale aantal resources te beperken dat is toegestaan voor een container, zodat een bepaalde container niet kan verhongeren.
DevOps
Hier volgen enkele operationele overwegingen voor dit scenario:
In dit scenario maakt MySQL geen openbaar eindpunt beschikbaar. Als de buildserver configuratie-instellingen opslaat in de back-end mySQL-database, moet u die server implementeren in hetzelfde subnet van het virtuele netwerk waarmee MySQL verbinding maakt via het service-eindpunt.
Gebruik Azure Container Registry of een ander containerregister, zoals Docker Hub, om de persoonlijke Docker-installatiekopieën op te slaan die in het cluster zijn geïmplementeerd. AKS kan worden geverifieerd met Azure Container Registry met behulp van de Microsoft Entra-identiteit.
Controleren
Azure Monitor biedt belangrijke metrische gegevens voor alle Azure-services, inclusief metrische containergegevens van AKS. Maak een dashboard om alle metrische gegevens op één plaats weer te geven.
Naast het gebruik van Azure Monitor voor containers, kunt u nu beheerde service voor Prometheus gebruiken om metrische gegevens op schaal te verzamelen en analyseren via een met Prometheus compatibele bewakingsoplossing.
U kunt ook Azure Managed Grafana (of zelfbeheerde Grafana) gebruiken om metrische gegevens van Prometheus te visualiseren. Wanneer u Azure Managed Grafana gebruikt, kunt u uw Azure Monitor-werkruimte verbinden met de Azure Managed Grafana-werkruimte, zodat Grafana de gegevens van de Azure Monitor-werkruimte in een Grafana-dashboard kan gebruiken. U hebt vervolgens toegang tot meerdere vooraf gemaakte dashboards die gebruikmaken van metrische prometheus-gegevens en u kunt ook aangepaste dashboards maken.
Prestatietesten
Gebruik De Toolkit voor prestaties testen. De toolkit maakt gebruik van Apache JMeter om gedrag van klanten te simuleren, zoals aanmelden, browseproducten en uitchecken.
U moet ook overwegen om Azure Load Testing te gebruiken, een volledig beheerde service voor belastingstests waarmee u grootschalige belasting kunt genereren. Met Azure Load Testing kunt u snel een belastingstest voor uw webtoepassing maken met behulp van een URL. U kunt ook voor geavanceerdere scenario's voor belastingstests een belastingstest maken door een bestaand JMeter-testscript opnieuw te gebruiken.
Kostenoptimalisatie
Kostenoptimalisatie gaat over manieren om onnodige uitgaven te verminderen en operationele efficiëntie te verbeteren. Zie Overzicht van de pijler kostenoptimalisatie voor meer informatie.
Capaciteitsplanning uitvoeren op basis van prestatietests.
Gebruik de Azure-prijscalculator om een schatting van de kosten te maken.
Bekijk andere kostenoverwegingen in principes van kostenoptimalisatie in het Microsoft Azure Well-Architected Framework.