Mengoptimalkan Docker & Kubernetes untuk Menangani Lonjakan Traffic di Lingkungan Produksi: Studi Kasus Nyata

Daftar Isi
Ketika Traffic Meningkat: Tantangan di Lingkungan Produksi
Menangani lonjakan traffic adalah tantangan yang dihadapi banyak tim DevOps, terutama ketika aplikasi yang dibangun di atas arsitektur mikroservices menggunakan Docker dan Kubernetes. Dalam banyak kasus, saya menemukan bahwa ketika sebuah aplikasi mendadak viral, atau memasuki periode puncak, seperti diskon besar-besaran atau peluncuran produk baru, server yang seharusnya handal bisa menjadi sangat lambat, bahkan mengalami downtime. Di sinilah pentingnya memahami cara mengoptimalkan infrastruktur container untuk memastikan performa yang maksimal.
Mengapa Docker dan Kubernetes?
Docker memungkinkan kita untuk membangun aplikasi dalam container yang ringan, sedangkan Kubernetes berfungsi sebagai orchestrator yang memungkinkan kita mengelola berbagai container ini secara efisien. Mari kita lihat sebuah studi kasus saat saya mengatasi lonjakan traffic di sebuah aplikasi berbasis PHP dan MySQL yang dikemas dalam container Docker dan dikelola dengan Kubernetes. Untuk mengatasi tantangan ini, pemahaman yang mendalam tentang pengelolaan kontainer sangat penting, yang dapat ditemukan dalam Panduan Lengkap Docker: Teori, Arsitektur, Cara Kerja, dan Manajemen Kontainer untuk Sysadmin.
Studi Kasus: Lonjakan Traffic untuk Aplikasi eCommerce
Aplikasi yang kami kembangkan adalah platform eCommerce yang dihosting di Kubernetes. Pada hari-hari tertentu, terutama saat promo besar, kami mengalami lonjakan traffic yang tidak terduga. Dalam satu momen, traffic kami meningkat hingga 10x lipat dari biasanya, dan meskipun infrastruktur kami sudah diatur dengan baik, performa aplikasi mulai turun dan beberapa pengguna mengalami waktu tunggu yang lama.
Benchmark Docker untuk Infrastruktur VPS

1. Menganalisis Arsitektur
Sebelum kami melakukan tindakan apa pun, kami perlu menganalisis arsitektur yang ada. Kami menggunakan arsitektur berbasis microservices yang terpisah untuk frontend, backend, dan database. Setiap service di-host di container Docker dan dikelola oleh Kubernetes. Konfigurasi awal kami terdiri dari:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ecommerce-backend
spec:
replicas: 2
selector:
matchLabels:
app: ecommerce-backend
template:
metadata:
labels:
app: ecommerce-backend
spec:
containers:
- name: backend-container
image: my-docker-repo/backend:latest
ports:
- containerPort: 80
resources:
limits:
memory: '512Mi'
cpu: '1'Dalam konfigurasi ini, kami menggunakan dua replika untuk backend. Namun, ketika traffic meningkat, dua replika tidak cukup untuk menangani permintaan tersebut. Dengan pengaturan resources yang ada, kami memberikan batas maksimal untuk memory dan CPU, tetapi kami perlu meningkatkan jumlah replika dan menyesuaikan konfigurasi lainnya untuk meningkatkan performa.
2. Meningkatkan Replika dan Auto-Scaling
Langkah pertama yang kami ambil adalah menambahkan lebih banyak replika. Kami memiliki Horizontal Pod Autoscaler (HPA) yang sudah terpasang, tetapi pengaturannya tidak optimal saat traffic meningkat. HPA memungkinkan kami untuk menyesuaikan jumlah pod berdasarkan penggunaan CPU atau memori. Untuk meningkatkan pengaturan ini, kami menggunakan perintah berikut:
kubectl autoscale deployment ecommerce-backend --cpu-percent=50 --min=2 --max=10Perintah ini mengatur autoscaler untuk menambah jumlah pod jika penggunaan CPU melebihi 50%, dengan minimum 2 dan maksimum 10 pod. Dengan demikian, kami memastikan bahwa aplikasi akan dapat menangani lonjakan traffic dengan memberikan lebih banyak instance sesuai kebutuhan.
Optimasi Konfigurasi HPA
Selain itu, kami juga perlu memastikan bahwa resource limits diatur dengan bijak. Terlalu rendah dapat menyebabkan pod menjadi tidak responsif, sementara terlalu tinggi dapat menghabiskan kapasitas cluster. Kami merubah batasan CPU dan memory pada deployment kami.