Kayıtlar

scalability etiketine sahip yayınlar gösteriliyor

Python gRPC Load Balancing

Resim
Cok fazla yuk altina girecek olan bir gRPC server isletiyoruz diyelim. Server'i de Python ile yazdigimizi dusunelim.  - Ne gini kisitlamalar yasayacagiz? - Serveri horizontal olarak scale etmek icin ne gini seceneklerimiz var? - Bir de gRPC server local'de calisip, diger desktop uygulamalarina hizmet veriyor ise isler nasil degisir?  Gelin bu kullanim alani uzerinden biraz beyin cimnastigi yapalim. 1. Network Load Balancing Server-side RPC, HTTP 2.0 uzerinde calisan bir iletisim protokolu oldugu icin, HTTP2.0 destekleyen standart load balancerleri kullanabiliriz. En populer secenekler ngix ve envoy proxy olarak gosterilebilir.  Yalniz burada temel bir problemimiz var. gRPC sessionlari sticky bir yapidadir. Yani bir client bir servere bir kere baglanir  ve uzun bir sure boyunca bagli kalir. Request ve response'lar bur mevcut baglanti uzerinden gerceklesmis olur. Bu sayede her request/response icin tekrardan baglanti kurmaya (ve dolayisi ile TCP handshake yapmaya) gerek kalma

SD #2: Scalability 2

Resim
Scalability postunda bircok onemli noktaya degindik. Burada sadece birkac ufak ek yaparak, bundan sonraki postta ornek system design'lara gececegiz.  Cogu public servis bir load balancer arkasinda calisan birden fazla web server tarafindan serv edilmektedir. Bu sayede yuk artisina bagli olarak otomatik horizontal scaling yapmak mumkundur. Bir kullanici birinci requestte webserver #1 tarafindan cevaplanmis olabilir, ikinci requesting de webserver #2 tarafindan cevaplanmis olabilir. Kullanici ilk olarka hangi server ile muhattap oldugundna bagimsiz olarak tum web serverlar tarafindan ayni sekilde requestleri karsilanabilmelidir. Bunu yapabilmek icin: Altin Kural : Tum webserver'lar ayni kodu calistirmali ve session datasi barindirmamalidir. Yani tamamen stateless olmalidir. Session datasi harici merkezi bir database veya persistent cache'te tutulmalidir.  Deployment Burada bir zorluk var. O da webserver kodunda bir guncelleme yaptigimiz zaman nasil deploy edelim ki ayni and

SD #1: Scalability

Resim
Bir websitesi host ettigimizi dusunelim. Gidecegimiz yer bir hosting sirketi olacaktir. Bu hosting sirketi genellikle birden fazla musteriyi belki de ayni makine uzerinde host etmektedir. Birgun gelip de web sitemiz cok populer olursa, artik bu donanim ile web siteye erisim imkansiz ya da cok yavas bir hale gelebilir. Burada iki secenek var: 1- Vertical scaling: Yani daha fazla ram, cpu, disk. Elimizdeki donanimi artirmak. Ornek olarak fazladan bir cpu core'a sahip olmak demek, ayni anda birden fazla requeste gercekten paralel olarak cevap verebilmemize olanak taniyacaktir. Tek bir cpu core ile paralel islem yapmak olanaksizdir. Simdilerde bulmak zor ama tek core olan bilgisayarlarda bile ayni anda birden fazla is yapabiliyoruz. Ama aslinda isletim sistemi her bir uygulama icin cpu'dan sirayla hizmet aliyor ve biz bunu paralelmis gibi algiliyoruz.   Ancak burada bir limit var. Bir bilgisayarin donanimini en fazla belirli bir olcude artirabilirsiniz. Bir noktadan sonra maliyerl