Bu konu aslında çok karmaşık
Özellikle mesajlaşma gibi asenkronluğun dibi, hatta asenkronluğun kendisi olan konularda bir hayli zorlukla karşılaşılıyor.
Protokol Katmanları ve Garanti Seviyeleri
Efendim şimdi şöyle ki;
Siz HTTP POST/GET gibi işlemleri yaptığınız zaman, TCP’den farkı size bu süreçleri garanti etmesidir, ve içerisinde bir hayli karmaşık algoritmalar vardır.
Aynı şekilde TCP de UDP’yi garantilemek için çok daha fazla karmaşık algoritma içermektedir.
WebSocket’in Getirdiği Sorunlar
Ama WebSocket daha low-level olduğu için bu sorunların çoğunu içinde barındırır, daha doğrusu size temel iletişimi kurduktan sonra süreci güzel problemler ile kucağınıza bırakır.
Hemen bir örnek ile gidelim: Bir WS bağlantısı kurdunuz ve sunucuya bir istekte bulundunuz, o böyle boşluğa doğru gitti, gelip gelmeyeceği hakkında fikrimiz yok.
Broadcast vs Point-to-Point İletişim
Çoğu sistem bu tarz yerlerde kolaya kaçıp belki de başka haklı sebepleri de vardır, broadcast benzeri channel bazlı sistemleri ile bu süreci handle etmektedir ama hem verimlilik hem komplekslik açısından çoğu zaman verimsiz çalışmaktadır.
Zaten Big-Tech’in repolarını incelerken, bu tarz yerleri eleştirmemin temelinde bu yatmaktadır. Baktık bottleneck oluşuyor, dayarız donanımı. Varsın Amazon, Nvidia kazansın ne olacak ki…
Acknowledgment (ACK) Mekanizması
Her neyse, magazini bir kenara bırakalım. Gerçek hayattan bir misal ile gidelim;
İstemci WS sunucusuna bir paket gönderir, bu paketin yanında ya da içinde, ayrıca ack bilgisi gönderir.
Bu ack bilgisi, gönderdiğiniz paketin istek ID bilgisini de içermelidir ki, sunucu bu ID ile size dönüş yapabilsin, siz de onu daha önce isteği gönderdiğiniz yerde ya RAM’de ya da DB’de bu bilgiye bakarak işlemi devam ettirebilesiniz.
Network Kesintileri ve Pending States
Ama burada işler bir hayli karışıyor. Size o bilgi gelmeden network’de kopukluk olursa ne olacak?
Hızlı cevap: Pending’de tutarım.
O kadar basit değil, özellikle mobil cihazlarda pending mekanizması background işlemlerinde hele hele WS gibi TCP tabanlı bağlantılarda bir hayli canınızı yakar.
Kullanıcı Deneyimi ve Teknik Borç
Sonra kullanıcılarınız, ağabey, bu yazılım istediğimizi yapmıyor, adam akıllı çalışmıyor der, sizde o problemlere çare olsun diye bir dünya ek önlem API kullanırsınız, aslında yapacağınız işleme odaklanmadığınız için de bir sürü ek yük ve ağırlık getirir.
Ama mühim değil, yazılım dediğin nedir ki, GET/POST nasılsa AI onu yapar
Ne kadar basit değil mi… Öyle olsun biz işimize bakalım.
Memory Management ve Global State
Her neyse, efendim sonrasında istemci tarafında bu sunucudan beklediğiniz cevabı alacak veriyi RAM’de tutuyorsunuz ama kullanıcı sabırsız, kullanıcı sürekli ekran değiştirir, hemen yapıştır Global Singleton’a. Üfff gelsin Memory Leak’ler.
Bu da olmadı, e ne yapacaz gardaş çözümsüz mü, store’da milyon tane program var, bir sen mi biliyorsun. Store’da milyon program var ama kaliteli uygulama 100’ü geçmez belki…
Lifecycle ve State Management
Çözüm çok sıkı ve zekice bir lifecycle ve state mekanizması ama onu da abartırsanız, inanılmaz karışmaya başlar.
Yazılım Zanaatkarlığı
Yazılım dediğin sadece kod yazmaktan ibaret değil, bir sanat, bu sanatı ancak zanaatkar icra eder. Kusura bakmayın böyle, bu da öyle 1-2 senede oturacak bir özellik değil. Senelerinizi vermeniz gerekiyor.
Haa yok abi, ben parama bakarım, Irak’a kalitesiz bisküvi satan esnaf gibi, cebim para görsün yeter derseniz, orasını ben bilmem. Daha evvel de söyledim ben tüccar değilim. İşin zanaat kısmındayım.
İşletim Sistemi ve Atomik İşlemler
Efendim, bu sadece istemci tarafındaki basit bir kaç senaryo, sonrasında, işletim sistemi ile kendi sisteminiz arasında olan, atomik işlemler var ki, evlere şenlik hatalara gebedir.
Sunucu Tarafı Zorluklar
Konu uzar gider, daha çok şey söyleyebiliriz, sunucu bu cevabını veremediği istekleri nasıl yönetecek, yoğunluğu nasıl çözecek, yük dağıtımını nasıl yapacak.
Ama mühim değil, sunucu kodumuz çaresiz değil, donanım satıcıları niye var?
Sonuç: Kalite ve Zanaatkarlık
Asenkron süreç yönetimi, yazılım geliştirmenin en karmaşık alanlarından biri. WebSocket gibi low-level protokollerin getirdiği esneklik, beraberinde ciddi sorumluluklar da getiriyor.
Temel zorluklar:
- Network kesintileri ve pending state yönetimi
- Memory leak’ler ve lifecycle karmaşıklığı
- Atomik işlemler ve race condition’lar
- Load balancing ve server-side resource management
Bu problemleri çözmek için donanım satın almak yerine, sıkı lifecycle management ve zekice state mekanizmaları geliştirmek gerekiyor.
Yazılım bir zanaat, kaliteli ürün çıkarmak için senelerce deneyim ve dikkatli tasarım şart.
Tags
Uğur Toprakdeviren
Cryptographer, security researcher, and systems engineer with over two decades of experience building secure systems. Currently focused on Apple internals, decentralized messaging protocols, ARM64 architectures, and the philosophical implications of digital privacy.
Learn more about me