Dependency Injection: Bağımlılıkları Dışarıdan Vermenin Gücü

Bir sınıfın ihtiyaç duyduğu nesneleri kendi içinde üretmesi ilk bakışta oldukça doğal görünür. Sonuçta kahve isteyen bir OfisCalisani, kahve makinesini de çalıştırabilir! Ancak sistem büyüdükçe sınıfların hem kendi işlerini yapması hem de bağımlılıklarını oluşturması; değişiklik, test ve bakım maliyetlerini yükseltir. Dependency Injection, yani Bağımlılık Enjeksiyonu, tam bu noktada devreye girer: Bir nesneye ihtiyaçları hazır olarak dışarıdan verilir.

dependency-injection-bagimliliklari-38

Devamı...

Database Replication: Aynı Veriyi Onlarca Sunucuda Nasıl Tutarlı Tutuyoruz?

database-replication-ayni-39

Bir kullanıcı profil fotoğrafını değiştirdiğinde bu değişikliğin İstanbul, Frankfurt ve Singapur’daki sunuculara ulaşması gerekir. Üstelik sunuculardan biri uyuklarken, ağ bağlantısı naz yaparken ve binlerce yeni işlem gelirken! Database replication, aynı verinin birden fazla sunucuda kopyalanmasını sağlayarak performans, erişilebilirlik ve felaket kurtarma avantajı sunar. Ancak kopyalamak kolay, bütün kopyaları tutarlı tutmak zordur.

Devamı...

Bloom Filter: Bir Şeyin Kesinlikle Olmadığını Ucuza Söylemek

Bir kullanıcı adının daha önce alınıp alınmadığını, bir URL’nin taranıp taranmadığını veya önbellekte belirli bir anahtarın bulunup bulunmadığını kontrol ettiğinizi düşünün. Milyarlarca kayıt arasında sürekli arama yapmak pahalıdır. Bloom Filter burada ilginç bir pazarlık önerir: Çok az bellek kullanır, bir elemanın kesinlikle bulunmadığını söyler; fakat bazen bulunmayan bir elemana “belki var” diyebilir.

bloom-filter-bir-14

Devamı...

Bitmap Index: Çok Büyük Veri Kümelerinde Bitlerin Gücü

bitmap-index-cok-78

Milyarlarca satırlık bir tabloda belirli koşullara uyan kayıtları saniyeler yerine milisaniyeler içinde bulmak kulağa sihir gibi gelebilir. Bitmap index, bu numarayı her değer için bitlerden oluşan kompakt haritalar tutarak gerçekleştirir. Özellikle az sayıda farklı değer içeren sütunlarda, işlemcilerin son derece hızlı bit işlemlerinden yararlanır.

Devamı...

ADC ve DAC: Gerçek Dünya ile Dijital Evren Arasındaki Köprü

Bir mikrodenetleyici sıcaklığı nasıl “görür”, hoparlör ise bir sayı dizisini nasıl müziğe dönüştürür? Bu sihrin arkasında iki temel devre bulunur: analogdan dijitale dönüştürücü ADC ve dijitalden analoğa dönüştürücü DAC. Biri fiziksel dünyayı sayılara çevirirken diğeri bu yolculuğu tersine çevirir.

Devamı...

WebSocket ve HTTP: Bağlantının Anahtarı Gerçekte Kimde?

Bir tarayıcı sunucuya bağlandığında bağlantıyı kim yönetir: istemci mi, sunucu mu? HTTP ile WebSocket karşılaştırılırken sıkça “HTTP’de istemci, WebSocket’te iki taraf kontrol sahibidir” denir. Bu kullanışlı ama eksik bir özettir. Gerçekte TCP bağlantısının iki ucu, protokol kuralları, proxy zaman aşımı ve uygulama yaşam döngüsü birlikte söz sahibidir.

websocket-ve-http-81

Devamı...

TLS Handshake: Tarayıcı ile Sunucu Arasında Güven Nasıl Kurulur?

Adres çubuğundaki küçük kilit simgesi, tarayıcınız ile sunucu arasında görünmez ama oldukça hareketli bir tanışma gerçekleştiğini gösterir. TLS handshake adı verilen bu süreçte taraflar kullanılacak şifreleme yöntemini belirler, sunucu kimliğini kanıtlar ve oturuma özel anahtarlar üretir. Üstelik bütün bunlar çoğunlukla birkaç ağ turunda, siz daha sayfanın açılmasını beklerken tamamlanır.

Devamı...

TCP Üçlü El Sıkışması: Bağlantı Kurulurken Gerçekte Ne Oluyor?

Tarayıcıya bir adres yazıp Enter tuşuna bastığınızda veri hemen akmaya başlamaz. TCP kullanan istemci ile sunucu önce birbirlerini bulduklarını, iletişime hazır olduklarını ve başlangıç sıra numaralarını kabul ettiklerini doğrular. TCP üçlü el sıkışması denilen SYN, SYN-ACK ve ACK paketleri tam olarak bu hazırlığı gerçekleştirir.

Devamı...

Process’ler Arasında Köprü Kurmak: Pipe, Shared Memory ve Message Queue

Bir process kendi sanal adres alanında yaşayan, komşusunun değişkenlerine doğrudan dokunamayan küçük bir ada gibidir. Ancak gerçek uygulamalarda bu adaların veri paylaşması gerekir. İşte Inter-Process Communication (IPC) mekanizmaları, process’ler arasında köprü kurar. Pipe akış sunar, shared memory ortak bir çalışma masası sağlar, message queue ise düzenli bir posta kutusu gibi davranır.

Devamı...

Network Latency’nin Anatomisi: İnternet Neden Sadece Hızlı veya Yavaş Değildir?

Bir web sitesinin geç açılması, görüntülü görüşmenin robot sesine dönüşmesi veya çevrim içi oyunda karakterinizin duvara doğru koşmaya devam etmesi genellikle “internet yavaş” cümlesiyle açıklanır. Oysa ağ performansı tek bir hız göstergesinden ibaret değildir. Bant genişliği, gecikme, jitter ve paket kaybı birlikte çalışır; bunlardan yalnızca biri kötü olduğunda bile kullanıcı deneyimi dramatik biçimde değişebilir.

Devamı...

IPv6’nın Tasarımı: İnternet Neden 128 Bitlik Adreslere Geçti?

ipv6nin-tasarimi-internet-98

İnternete bağlanan her cihazın bir adrese ihtiyacı vardır. Bilgisayarlar, telefonlar, sunucular ve hatta akıllı ampuller, veri paketlerinin nereye gideceğini IP adresleri sayesinde bilir. IPv4 uzun yıllar bu görevi başarıyla yürüttü; ancak internet büyüdükçe 32 bitlik adres alanının sınırları görünür hâle geldi. IPv6’nın 128 bitlik adresleri, yalnızca “daha fazla cihaz bağlayalım” düşüncesinin değil, ölçeklenebilir ve daha düzenli bir internet tasarlama hedefinin sonucudur.

Devamı...

HTTP/2 Multiplexing: Tarayıcı Tek Bağlantıda Nasıl Bu Kadar Çok Şey Taşıyor?

http2-multiplexing-tarayici-69

Bir web sayfası açıldığında tarayıcı yalnızca HTML indirmez; CSS, JavaScript, font, görsel ve API yanıtları gibi onlarca kaynağa ihtiyaç duyar. HTTP/1.1 döneminde bu kalabalığı yönetmek için birden fazla TCP bağlantısı açılırdı. HTTP/2 ise multiplexing sayesinde aynı bağlantıyı çok şeritli bir otoyola dönüştürür: farklı istek ve yanıtlar, birbirini tamamlamayı beklemeden eş zamanlı biçimde taşınabilir.

Devamı...

File Descriptor Mantığı: Linux Neden Dosya, Soket ve Pipe’a Aynı Gözle Bakar?

file-descriptor-mantigi-49

Linux dünyasında bir dosya açtığınızda, ağ bağlantısı kurduğunuzda veya iki süreç arasında pipe oluşturduğunuzda karşınıza küçük bir tamsayı çıkar: file descriptor, yani dosya tanımlayıcısı. İlk bakışta bir metin dosyasıyla ağ soketinin aynı sayı türüyle temsil edilmesi tuhaf görünebilir. Fakat bu yaklaşım, Unix felsefesinin en güçlü fikirlerinden birini uygular: Farklı kaynaklara ortak bir arayüz üzerinden erişmek.

Devamı...

DHCP'nin Anatomisi: Bilgisayar Açıldığında IP Adresini Nasıl Buluyor?

Bilgisayarınızı açtığınızda tarayıcı hemen çalışır, mesajlar gelir ve internet sanki musluktan akan su gibi hazırdır. Oysa cihazınızın ağda konuşabilmesi için önce bir IP adresi, ağ maskesi, ağ geçidi ve DNS sunucusu edinmesi gerekir. Bu otomatik tanışma törenini yöneten protokolün adı DHCP, yani Dynamic Host Configuration Protocol’dür.

Devamı...

CAP Teoremi: Dağıtık Sistemlerde Neden Her Şeyi Aynı Anda Elde Edemiyoruz?

cap-teoremi-dagitik-56

Bir uygulamayı tek sunucudan çıkarıp dünyanın farklı bölgelerindeki sunuculara dağıttığınızda işler hızlanabilir, sistem daha dayanıklı olabilir ve kullanıcılar uygulamaya daha kolay ulaşabilir. Ancak ağ bağlantıları koptuğunda önemli bir seçim kapıyı çalar: Sistem doğru cevabı mı beklemeli, yoksa elindeki bilgiyle hemen cevap mı vermeli? CAP teoremi, dağıtık sistemlerin bu tatsız fakat kaçınılmaz ikilemini açıklar.

Devamı...

ARP Protokolü: IP Adresinden Ethernet Adresine Yolculuk

Bilgisayarınız aynı yerel ağdaki bir sunucuya paket göndermek istediğinde hedefin IP adresini biliyor olabilir; fakat Ethernet çerçevesini teslim edebilmek için bir de fiziksel, yani MAC adresine ihtiyaç duyar. İşte ARP (Address Resolution Protocol), “Bu IP adresi kimde ve MAC adresi nedir?” sorusunu ağdaki cihazlara sorarak iki adresleme dünyası arasında köprü kurar.

arp-protokolu-ip-40

Devamı...

Anycast: Aynı IP Adresi Dünyanın Farklı Noktalarında Nasıl Bulunur?

Bir IP adresini genellikle tek bir sunucunun internet üzerindeki ev adresi gibi düşünürüz. Oysa Anycast dünyasında aynı IP adresi İstanbul, Frankfurt, Singapur ve New York’taki sunucularda eş zamanlı olarak bulunabilir. Kullanıcı bu adresle bağlantı kurduğunda paketler sihirle çoğalmaz; internetin yönlendirme sistemi, kullanıcıyı ağ açısından en uygun noktaya götürür.

Devamı...

ACID Gerçekte Ne Anlama Geliyor? Veritabanları Neden Bu Kadar Katı?

acid-gercekte-ne-90

Bir banka hesabından diğerine para gönderdiğinizi düşünün. Para sizin hesabınızdan çıktı ama karşı tarafa ulaşmadıysa sistemin hızlı çalışması pek teselli olmaz. Veritabanlarının katılığı tam burada anlam kazanır: ACID, işlemlerin yalnızca çalışmasını değil, hata, elektrik kesintisi ve eşzamanlı kullanıcı baskısı altında bile doğru kalmasını sağlayan ilkeler bütünüdür.

Devamı...