Azure App Service: Matikan ARR Affinity kalau bisa

Kalau kita membuka tab Application Setting di azure app service, ada setting yang namanya ARR Affinity:

Di situ ada keterangan seperti ini:

You can improve the performance of your stateless applications by turning off the Affinity Cookie, stateful applications should keep the Affinity Cookie turned on for increased compatibility. Click to learn more.

Maksudnya gimana?

Azure app service memiliki feature yang namanya scale-out. Scale out ini pada intinya menambah jumlah server yang melayani request (load balancing). Proses scale-out bisa dilakukan secara automatis bisa juga secara manual.

Misal scenarionya gini:

  • Kita punya aplikasi web yang dihosting di app service plan,
  • Kita setting agar auto scale-out saat CPU Load > 80% selama 15 menit terakhir.
  • Saat ini ada 1000 user sedang menggunakan aplikasi, dan semua orang ini adalah signed in user (bukan pengunjung anonim).

Ceritanya karena heavy load akhirnya proses auto scale-out terjadi. Si app service plan menambah server jadi dua ~ namanya A dan B.

Selanjutnya apa yang terjadi? Apakah request-request berikutnya secara automatis akan dibagi rata ke dua server itu?

Tergantung.

Ada beberapa aplikasi dimana si user gak bisa dipindahin gitu aja ke server lain. Kalau dipindahin maka data-data dia yang ada di session akan hilang dan proses jadi macet. Aplikasi model kayak gitu  disebut dengan stateful application.

Azure mengatasi problematika stateful application dengan menggunakan affinity cookie. Kalau ada affinity cookie, sekali user dilayani oleh server A maka dia akan terus dilayani oleh server A. Nanti kalau ada user fresh baru dia akan dibagi antara A dan B.

Oke, kayaknya keren, terus masalahnya apa? Masalahnya adalah, proses scale out tidak akan secara instant membagi load ke server baru. Jadi percuma kita punya dua atau tiga server kalau requestnya tetep masuk ke server pertama doang. Jadinya server pertama tetep full load, server sisanya nganggur, dan user tetep akan mengeluh lambat.

So.. matikan ARR cookie kalau aplikasi kita stateless. Nyimpan user data di Session variable? Statefull. Nyimpan temporary user data di static variable? Statefull. Tapi kalau data di static variable bisa di-create ulang tanpa masalah (kayak data cache), maka aman.

Buat memastikan aman atau enggak, coba deploy si web apps ke app service plan dan setting si app service plan secara manual agar selalu menggunakan minimum 2 server. Matikan ARR affinity lalu coba login dan gunakan aplikasi seperti biasa. Kalau muncul error aneh atau kita ketendang terus, tandanya emang gak bisa.

More: https://azure.microsoft.com/en-us/blog/disabling-arrs-instance-affinity-in-windows-azure-web-sites/

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *