Magento adalah platform e-commerce sumber terbuka yang ditulis dalam PHP. Contoh skenario ini menunjukkan Magento disebarkan ke Azure Kubernetes Service (AKS), dan menjelaskan praktik terbaik umum untuk menghosting Magento di Azure.
Potensi penggunaan kasus
Solusi ini dioptimalkan untuk industri ritel.
Arsitektur

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 atau sistem network-attached storage (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.
- 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 Azure Active Directory (Azure AD) untuk membuat dan mengelola sumber daya Azure lainnya seperti penyeimbang beban 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. Perhatikan bahwa penginstalan Magento default menulis beberapa rahasia pada 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
- Azure Kubernetes Service (AKS)
- AKS membuat jaringan virtual
- Azure Database untuk MySQL
- Azure Files Premium
- Azure NetApp Files.
- CDN
- Azure Active Directory (Azure AD)
- Azure Container Registry
- Azure Monitor
Pertimbangan
Keamanan
Berikut adalah beberapa pertimbangan keamanan untuk skenario ini:
Konfigurasikan tautan pribadi untuk MySQL sehingga lalu lintas antara klien dan MySQL tidak terpapar ke internet publik. Untuk informasi selengkapnya, lihat Apa itu Azure Private Link.
Anda dapat menambahkan ingress Azure Application Gateway untuk mendukung penghentian secure socket layer (SSL).
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.
RBAC Kubernetes 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.
Saat membuat kluster AKS, Anda dapat mengonfigurasinya untuk menggunakan Azure AD untuk autentikasi pengguna.
Untuk detail tentang cara menyiapkan integrasi Azure AD, lihat Integrasi Azure Active Directory yang dikelola AKS.
Untuk informasi selengkapnya tentang mengontrol akses ke sumber daya kluster menggunakan identitas RBAC Kubernetes dan Azure AD, lihat Menggunakan RBAC Kubernetes dengan Azure AD.
Skalabilitas
Ada beberapa cara untuk mengoptimalkan skalabilitas untuk skenario ini:
Media dan file statis
Memprovisikan Azure Files atau sistem NAS lainnya secara memadai. Magento dapat menyimpan ribuan file media seperti gambar produk. Pastikan untuk menyediakan Azure Files atau produk NAS lainnya dengan operasi input/output per detik (IOPS) yang cukup 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
dbbagian file Magento env.php :'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=1opcache.save_comments=1opcache.validate_timestamps=0Seimbangkan beban cache Varnish dengan menjalankan beberapa instans pada pod sehingga dapat menskalakan.
Pembuatan Log
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
VirtualHostMagento dalam konfigurasi server Apache:CustomLog /dev/null commonNonakifkan log akses PHP-FPM dengan mengomentari pengaturan
access.logdi 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 masalah apa pun 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.
Pertimbangan 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 Azure AD-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.

Opsi pemantauan lainnya adalah menggunakan 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.
Harga
Lakukan perencanaan kapasitas berdasarkan pengujian performa.
Gunakan kalkulator harga Azure untuk memperkirakan biaya.
Lihat pertimbangan biaya lainnya dalam Prinsip optimalisasi biaya dalam Microsoft Azure Well-Architected Framework.