Platform e-niaga Magento di Azure Kubernetes Service

Microsoft Entra ID
Azure Container Registry
Azure Database for MySQL
Azure Files
Azure Kubernetes Service (AKS)
Azure Monitor

Artikel ini berisi tentang magento versi sumber terbuka, platform e-niaga yang ditulis dalam PHP. Artikel ini bukan tentang Adobe Commerce. Contoh skenario ini menunjukkan Magento yang disebarkan ke Azure Kubernetes Service (AKS) dan menjelaskan praktik terbaik umum untuk menghosting Magento di Azure.

Sistem

Diagram yang memperlihatkan Magento disebarkan di Azure Kubernetes Service dengan komponen Azure lainnya.

Unduh file Visio arsitektur ini.

Alur kerja

  • Azure Kubernetes Service (AKS) menyebarkan kluster Kubernetes Varnish, Magento, Redis, dan Elasticsearch dalam pod yang berbeda.
  • AKS membuat jaringan virtual untuk menyebarkan node agen. Buat jaringan virtual terlebih dahulu untuk menyiapkan konfigurasi subnet, tautan pribadi, dan pembatasan egress.
  • Varnish menginstal di depan server HTTP untuk bertindak sebagai cache halaman penuh.
  • Azure MySQL Database menyimpan data transaksi seperti pesanan dan katalog. Versi 8.0 direkomendasikan.
  • Azure Files Premium, Azure NetApp Files, atau sistem penyimpanan terpasang jaringan (NAS) yang setara menyimpan file media seperti gambar produk. Magento memerlukan sistem file yang kompatibel dengan Kubernetes yang dapat memasang volume dalam mode ReadWriteMany , seperti Azure Files Premium atau Azure NetApp Files. Opsi penyimpanan untuk aplikasi di Azure Kubernetes Service (AKS). Sangat disarankan agar Anda menguji operasi input/output per detik (IOPS) throughput dan memilih opsi yang berfungsi untuk Anda.
  • Jaringan pengiriman konten (CDN) menyajikan konten statis seperti CSS, JavaScript, dan gambar. Menyajikan konten melalui CDN meminimalkan latensi jaringan antara pengguna dan pusat data. Sebuah CDN dapat menghapus beban yang signifikan dari NAS dengan penembolokan dan penyajian konten statis.
  • Redis menyimpan data sesi. Menghosting Redis di kontainer direkomendasikan karena alasan performa.
  • AKS menggunakan identitas ID Microsoft Entra untuk membuat dan mengelola sumber daya Azure lainnya seperti penyeimbang muatan Azure, autentikasi pengguna, kontrol akses berbasis peran, dan identitas terkelola.
  • Azure Container Registry menyimpan gambar Docker pribadi yang disebarkan ke kluster AKS. Anda dapat menggunakan registri kontainer lain seperti Docker Hub. Penginstalan Magento default menulis beberapa rahasia ke gambar.
  • Azure Monitor mengumpulkan dan menyimpan metrik dan log, termasuk metrik platform layanan Azure dan telemetri aplikasi. Azure Monitor terintegrasi dengan AKS untuk mengumpulkan metrik pengontrol, node, dan kontainer, serta log node kontainer dan master.

Komponen

Detail skenario

Untuk informasi selengkapnya tentang Magento, lihat Gambaran umum penginstalan lokal.

Kemungkinan kasus penggunaan

Solusi ini dioptimalkan untuk industri ritel.

Pertimbangan

Pertimbangan ini mengimplementasikan pilar Azure Well-Architected Framework, yang merupakan serangkaian tenet panduan yang dapat digunakan untuk meningkatkan kualitas beban kerja. Untuk informasi selengkapnya, lihat Microsoft Azure Well-Architected Framework.

Keamanan

Berikut adalah beberapa pertimbangan keamanan untuk skenario ini:

Kontrol akses berbasis peran (RBAC)

Kubernetes dan Azure memiliki mekanisme untuk kontrol akses berbasis peran (RBAC).

  • Azure RBAC mengontrol akses ke sumber daya Azure, termasuk kemampuan untuk membuat sumber daya. Azure RBAC dapat menetapkan izin kepada pengguna, grup, atau perwakilan layanan, yang merupakan identitas keamanan yang digunakan oleh aplikasi.

  • Kubernetes RBAC mengontrol izin ke API Kubernetes. Misalnya, membuat pod dan mencantumkan pod adalah tindakan yang dapat diotorisasi oleh RBAC Kubernetes kepada pengguna.

AKS mengintegrasikan mekanisme RBAC Azure dan Kubernetes. Untuk menetapkan izin AKS kepada pengguna, buat peran dan pengikatan peran:

  • Peran adalah sekumpulan izin yang berlaku dalam namespace layanan. Izin didefinisikan sebagai kata kerja seperti get, update, create, atau delete, pada sumber daya seperti pod atau penyebaran.

  • Pengikatan peran menetapkan peran kepada pengguna atau grup.

  • Objek ClusterRole mendefinisikan peran yang berlaku untuk seluruh kluster AKS, di semua namespace layanan. Untuk menetapkan pengguna atau grup ke ClusterRole, buat ClusterRoleBinding.

  • Atau, Anda dapat menggunakan Azure RBAC untuk Otorisasi Kubernetes, yang memungkinkan manajemen terpadu dan kontrol akses di seluruh sumber daya Azure, AKS, dan sumber daya Kubernetes.

Saat membuat kluster AKS, Anda dapat mengonfigurasinya untuk menggunakan ID Microsoft Entra untuk autentikasi pengguna.

  • Untuk detail tentang cara menyiapkan integrasi Microsoft Entra, lihat Integrasi Microsoft Entra yang dikelola AKS.

  • Untuk informasi selengkapnya tentang mengontrol akses ke sumber daya kluster menggunakan Kubernetes RBAC dan identitas Microsoft Entra, lihat Menggunakan RBAC Kubernetes dengan ID Microsoft Entra.

Skalabilitas

Ada beberapa cara untuk mengoptimalkan skalabilitas untuk skenario ini:

Media dan file statis

  • Provisikan Azure Files, Azure NetApp Files, atau sistem penyimpanan terpasang jaringan (NAS) lainnya secara memadai. Magento dapat menyimpan ribuan file media seperti gambar produk. Pastikan untuk menyediakan produk NAS dengan operasi input/output yang memadai per detik (IOPS) untuk menangani permintaan.

  • Minimalkan ukuran konten statis seperti HTML, CSS, dan JavaScript. Minification dapat mengurangi biaya bandwidth dan memberikan pengalaman yang lebih responsif bagi pengguna.

Koneksi Database

  • Aktifkan koneksi persisten ke database MySQL, jadi Magento terus menggunakan kembali koneksi yang ada alih-alih membuat koneksi baru untuk setiap permintaan. Untuk mengaktifkan koneksi persisten, tambahkan baris berikut ke bagian db file env.php Magento:

    'persistent' => '1'

  • Jika MySQL menggunakan terlalu banyak CPU, kurangi penggunaan dengan menonaktifkan jumlah produk dari navigasi berlapis dalam konfigurasi Magento:

    magento config:set -vvv catalog/layered_navigation/display_product_count 0

penembolokan

  • Konfigurasikan OPcache untuk penembolokan dan pengoptimalan kode PHP.

    Pastikan arahan berikut diatur dan tidak dibiarkan tanpa komentar di php.ini:

    opcache.enable=1

    opcache.save_comments=1

    opcache.validate_timestamps=0

  • Seimbangkan beban cache Varnish dengan menjalankan beberapa instans pada pod sehingga dapat menskalakan.

Pencatatan

Batasi pengelogan akses, untuk menghindari masalah performa dan mencegah mengekspos data sensitif seperti alamat IP klien.

  • Gunakan perintah Varnish berikut untuk membatasi pembuatan log ke tingkat kesalahan:

    varnishd -s malloc,1G -a :80 -f /etc/varnish/magento.vcl && varnishlog -q "RespStatus >= 400 or BerespStatus >= 400"

  • Jika Anda menggunakan server web Apache untuk masuk, batasi pengelogan Apache ke tingkat kesalahan dengan menambahkan baris berikut ke entri VirtualHost Magento dalam konfigurasi server Apache:

    CustomLog /dev/null common

  • Nonakifkan log akses PHP-FPM dengan mengomentari pengaturan access.log di semua konfigurasi PHP-FPM.

Ketersediaan

Pertimbangkan cara-cara ini untuk mengoptimalkan ketersediaan untuk skenario ini:

Pemeriksaan kesehatan

Kubernetes mendefinisikan dua jenis probe kesehatan:

  • Probe kesiapan memberi tahu Kubernetes apakah pod siap menerima permintaan.
  • Probe keaktifan memberi tahu Kubernetes apakah pod harus dihapus dan instans baru dimulai.

Sesuaikan probe kesehatan Kubernetes dan gunakan untuk mengetahui apakah pod dalam keadaan sehat.

Zona Ketersediaan

Zona Ketersediaan adalah lokasi fisik unik di wilayah Azure yang membantu melindungi aplikasi dan data dari kegagalan pusat data. Setiap zona terdiri dari satu atau beberapa pusat data. Aplikasi di zona dapat tetap tersedia meskipun ada kegagalan fisik dalam satu pusat data.

Kluster AKS dapat disebarkan di beberapa Zona Ketersediaan, untuk memberikan tingkat ketersediaan yang lebih tinggi dan melindungi terhadap kegagalan perangkat keras atau peristiwa pemeliharaan yang direncanakan. Mendefinisikan kumpulan node kluster untuk menjangkau beberapa zona memungkinkan node terus beroperasi meskipun satu zona tidak berfungsi. Untuk informasi selengkapnya tentang penyebaran AKS ke Zona Ketersediaan, lihat Membuat kluster AKS yang menggunakan zona ketersediaan.

Batasan sumber daya

  • Ketidaksesuaian sumber daya dapat memengaruhi ketersediaan layanan. Menetapkan batasan sumber daya kontainer sehingga tidak ada satu kontainer pun yang dapat membanjiri memori kluster dan sumber daya CPU. Anda dapat menggunakan diagnostik AKS untuk mengidentifikasi semua masalah di kluster.

  • Gunakan batas sumber daya untuk membatasi total sumber daya yang diizinkan untuk kontainer, sehingga satu kontainer tertentu tidak dapat membuat kontainer lain kekurangan.

DevOps

Berikut adalah beberapa pertimbangan operasional untuk skenario ini:

  • Dalam skenario ini, MySQL tidak mengekspos titik akhir publik. Jika server build menyimpan pengaturan konfigurasi ke database MySQL backend, pastikan untuk menyebarkan server tersebut ke subnet jaringan virtual yang sama dengan yang terhubung MySQL melalui titik akhir layanan.

  • Gunakan Azure Container Registry atau registri kontainer lain seperti Docker Hub untuk menyimpan gambar Docker pribadi yang disebarkan ke kluster. AKS dapat mengautentikasi dengan Azure Container Registry dengan menggunakan identitas Microsoft Entra-nya.

Pemantauan

Azure Monitor menyediakan metrik utama untuk semua layanan Azure, termasuk metrik kontainer dari AKS. Buat dasbor untuk menampilkan semua metrik di satu tempat.

Cuplikan layar dasbor pemantauan Azure Monitor.

Selain menggunakan Azure Monitor untuk kontainer, Anda sekarang dapat menggunakan layanan terkelola untuk Prometheus untuk mengumpulkan dan menganalisis metrik dalam skala besar melalui solusi pemantauan yang kompatibel dengan Prometheus.

Anda juga dapat menggunakan Azure Managed Grafana (atau Grafana yang dikelola sendiri) untuk memvisualisasikan metrik Prometheus. Saat Anda menggunakan Azure Managed Grafana, menyambungkan ruang kerja Azure Monitor Anda ke ruang kerja Azure Managed Grafana memungkinkan Grafana menggunakan data ruang kerja Azure Monitor di dasbor Grafana. Anda kemudian memiliki akses ke beberapa dasbor bawaan yang menggunakan metrik Prometheus, dan Anda juga dapat membuat dasbor kustom.

Cuplikan layar dasbor Grafana.

Pengujian performa

Gunakan Magento Performance Toolkit untuk pengujian performa. Toolkit ini menggunakan Apache JMeter untuk menyimulasikan perilaku pelanggan seperti proses masuk, mencari produk, dan checkout.

Anda juga harus mempertimbangkan untuk menggunakan Azure Load Testing, layanan pengujian beban terkelola penuh yang memungkinkan Anda menghasilkan beban skala tinggi. Dengan Azure Load Testing, Anda dapat dengan cepat membuat uji beban untuk aplikasi web Anda dengan menggunakan URL. Atau, untuk skenario pengujian beban yang lebih canggih, Anda dapat membuat pengujian beban dengan menggunakan kembali skrip pengujian JMeter yang ada.

Pengoptimalan biaya

Optimalisasi biaya adalah tentang mencari cara untuk mengurangi pengeluaran yang tidak perlu dan meningkatkan efisiensi operasional. Untuk informasi selengkapnya, lihat Gambaran umum pilar pengoptimalan biaya.

Langkah berikutnya