Hocam mrb. iyi günler… Bir web socket projesi ile uğraşıyorum. Birden fazla pod çalışacak bu projede. Arka planda çalışan extention lar bu uygulamaya bağlanacaklar, burda şöyle bir durum sözkonusu, ilk bağlantıda kaynak tüketimi az olacağı için bağlantıların hepsi aynı poda düşebiliyor, her bağlantının ne olursa olsun podlar arasında dağıtılması gerekiyor. Bu projeyle birlikte çalışan bir Redis bir de Parcer projesi var birlikte çalışıyorlar. Podlar arası workload a göre dağıtım yapabileceğim bir yol var mı… Şimdiden çok tşk. ederim…Kolay gelsin…
podu dışarı nasıl expose ettiniz. pod’ların önünde bir service objesi var mı?
Özgür hocam, ClusterIP tipi servis yapısını kullandım…
Varsayılan olarak clusterip round robin yani her requestin sıradaki backend’e gönderilmesi prensibiyle çalışır ama işte gerçek hayatta bu bazı nedenlerden dolayı “misal gönderdiği backend yoğunsa ya da sticky session” her zaman sırayla gitmez. daha çok random çalışır. Ama genel olarak, uzun vadede hemen hemen aynı oranda dağıtım yapar.
Yani diyelim ki X isimli servisiniz var ve arkasında poda, podb ve podc var. Bu servise deneme amaçlı 20 istek gönderdiniz. Bunun misal 10 tanesi poda, 6 tanesi podb ve 4 tanesi podc’ye düştü. Yani bağlantılar poda %50, podb %30, podc %20 oranında trafik aldı. Şimdi bu resme bakıp diyebilirsiniz ki bu düzgün bir dağıtım yapmıyor. Haklısınız da. Fakat bağlantı sayısı çok düşük. Buradan mantıklı bir veri çıkmaz. Ama düşünün aynı servise gün içinde 20000 bağlantı geliyor. O zaman gün sonunda bakarsanız poda, podb ve podc’ye toplamda %33 civarı bir yük dağılmıştır.
Ama siz illa ki her pod’a tek istek gitmesi gereken bir loadbalancing çözümüne ihtiyaç duyuyorsanız, yani bu bir şart ise, o zaman malesef k8s varsayılan mekanizması bunu sağlamaz. Istio gibi service mesh çözümlerinde bu isteği sağlayabileceğiniz mekanizma mevcut. Öyle bir çözüm kullanmanız gerekir.
Hocam derslerinizde reverse proxy den bahsetmiştiniz, onun faydası olur mu yoksa ben mi yanlış hatırlıyorum bu konuyla ilgili…