Nginx - AWS ALB problem
Kita nostalgia dahulu ke masa lalu ..
Lagu Lupa Lupa Ingat dari Kuburan Band
Pendahuluan
Kadang-kadang manusia itu Lupa Lupa Ingat terhadap sesuatu.
Begitu pula dengan sebuah sistem.
Pernah mengalami sebuah sistem yang kok nggak stabil yaa…
Bisa jadi karena kita Lupa dengan spesifikasi dan karakteristik dari sistem yang kita punya.
Menggunakan sebuah komponen di Cloud memang membutuhkan pemahaman terhadap komponen tersebut.
Kalau tidak, maka akan ada Side Effect atau keganjilan yang mungkin saja akan kita temui.
Oleh karena itu maka artikel ini mencoba mengingat kembali kasus yang bisa terjadi di sistem.
Termasuk didalamnya ketika menggunakan komponen AWS.
Lalu ini tentang apa ?
Ini tentang AWS ALB (Application Load Balancer) yang biasanya kita gunakan untuk :
- secara otomatis akan mendistribusikan trafik request ke banyak target. (Lah iya namanya juga Load Balancer :) .
- trafik yang didistribusikan bisa ke EC2 instance, Container, atau IP address.
- dapat berkembang/bertambah secara otomatis untuk menangani workload yang tinggi.
Ketika melakukan migrasi ke AWS, maka ALB merupakan pilihan tepat untuk menggantikan routing server yang sudah ada di On Premise.
Atau bisa saja, ALB dijadikan pintu masuk untuk integrasi aplikasi AWS kita dengan aplikasi lain yang ada di On Premise
Biasanya untuk menjaga konsistensi integrasi dengan aplikasi on premise yang sudah ada, kita bisa menggunakan Reverse Proxy seperti Nginx untuk hal itu.
Nginx merupakan reverse proxy yang umum yang kita temui dimana-mana.
Dengan melakukan kombinasi ALB dan nginx, maka kita bisa dengan mudah mengintegrasikan aplikasi On Premise dengan aplikasi AWS kita.
Diagramnya seperti ini :
Voalaa…
Sistemnya berjalan dengan lancar.
Akan tetapi seiring berjalannya waktu, maka sepertinya aplikasi kita tidak berjalan lancar.
Client/Customer mengalami penurunan performa.
Web/Aplikasi yang digunakan kadang lambat.
Akses terhadap URL API yang dibungkus Nginx –> ALB ini terkadang bisa dan terkadang tidak.
Kadang-kadang mengalami 504 Gateway Timeout ketika mengakses URL di Nginx yang bermuara di ALB ini.
Penyebabnya Apa ?
Sebenarnya penyebabnya bisa bermacam-macam.
Orang teknis biasanya akan menelusuri dulu / tracing terhadap request yang masuk dan mengecek di bagian mana yang terputus.
Tapi kalau kasus diatas, maka biasanya permasalahannya adalah di koneksi antara Nginx ke ALB nya.
Kalau di telusuri, maka request dari client/customer sebenarnya masuk, akan tetapi tidak menemukan sebagian dari daftar IP Address dari ALB.
Kalau gitu asumsi penyebabnya Apa ?
Seperti lagu Lupa-lupa Ingat oleh band Kuburan diatas, maka seperti begitu pulalah kejadian diatas.
Nginx sepertinya Lupa-lupa ingat dengan alamat IP address ALB nya, sehingga terkadang ada alamat IP address ALB yang diingat, ada sebagian yang tidak diingat oleh Nginx nya.
Hmmm… kok jadi nggak masuk akal ya …?
Masak sebuah sistem bisa Lupa-lupa ingat ?
Kalau kita telaah, mestinya sebuah sistem memang berjalan sesuai dengan aturan dan konfigurasi yang kita tentukan.
Akan tetapi kadang kita yang Lupa-lupa ingat saja dengan spesifikasi dan Design Of Contract dari bagian sistem tersebut.
Coba kita lihat kasus Nginx –> ALB ini …
Kalau kita lihat spesifikasi dari AWS ALB , di sini,
maka kita lihat bahwa IP Address dari ALB akan selalu berubah-ubah tergantung load dari hit dan node yang ada.
Hal ini karena kemampuan dari AWS ALB yang dapat berkembang/bertambah secara otomatis untuk menangani workload yang tinggi.
IP Address AWS ALB yang bisa berubah ubah ini kalau tidak ditunjang dengan konfigurasi Nginx yang tepat akan membuat Nginx tidak mengenali IP address yang baru.
Hal ini karena secara default, Nginx akan melakukan Cache terhadap IP address yang ditemukan waktu pertama kali Nginx me-resolved DNS dari AWS ALB.