logo
  • 0
Image

System Design: Koddan Mimarinin Zirvesine

₺ 750.00₺ 100.00
Ürün Açıklaması
Kitap Adı: System Design: Koddan Mimarinin
Zirvesine
Alt Başlık: Java 21 ve Spring Boot ile FAANG Mülakatlarını Parçalamak
Kısım 1: Temelleri Sağlamlaştıralım (Isınma Turları)
Burada amacımız terminolojiyi netleştirmek ve paslanan bilgileri parlatmak.
Bölüm 1: System Design Mülakatı Nedir ve Neden Korkmamalısın?
1.1 Mülakatın anatomisi: 45 dakikada neler beklenir?
1.2 Mükemmeliyetçilik tuzağı: "Yeterince iyi" tasarım nedir?
1.3 İletişim sanatı: Mülakatçıyı yönlendirmek.
Bölüm 2: Ölçeklenebilirlik (Scalability) 101: Büyüme Sancıları
2.1 Dikey (Vertical) vs. Yatay (Horizontal) ölçekleme.
2.2 Latency (Gecikme) vs. Throughput (İşlem Hacmi).
2.3 Java Memory Model ve Performans ilişkisi (Kısa bir hatırlatma).
Bölüm 3: Veritabanı Seçimi: SQL mi NoSQL mi? Savaşın Galibi Kim?
3.1 ACID vs. BASE: Tutarlılık ve Erişilebilirlik dengesi.
3.2 İlişkisel Veritabanları (PostgreSQL) ne zaman darboğaz yaratır?
3.3 NoSQL Türleri: Key-Value, Document, Column-Family, Graph.
3.4 Java Örneği: Spring Data JPA vs. Spring Data MongoDB kullanım senaryoları.
Bölüm 4: CAP Teoremi ve PACELC: Her Şeye Aynı Anda Sahip Olamazsın
4.1 Consistency, Availability, Partition Tolerance üçgeni.
4.2 Gerçek dünyada CAP: Master-Slave vs. Master-Master.
4.3 Eventual Consistency (Nihai Tutarlılık) ile barışmak.
Bölüm 5: Yük Dengeleme (Load Balancing): Trafik Polisi İş Başında
5.1 L4 vs. L7 Load Balancing.
5.2 Algoritmalar: Round Robin, Least Connections, Consistent Hashing.
5.3 Spring Cloud Gateway ile basit bir Load Balancer simülasyonu.
Kısım 2: Dağıtık Sistemin Yapı Taşları
Senior seviyesini belli ettiğimiz, mimari kararların alındığı bölüm.
Bölüm 6: Caching (Önbellekleme): Hızın Sırrı
6.1 Cache stratejileri: Cache-Aside, Write-Through, Write-Back.
6.2 Eviction (Silme) politikaları: LRU, LFU.
6.3 Dağıtık Cache: Redis ve Memcached.
6.4 Java Örneği: Spring Boot Cache Abstraction ve Redis entegrasyonu.
Bölüm 7: Message Queues (Mesaj Kuyrukları): Asenkron İletişim
7.1 Neden asenkron? Decoupling (Bağlılığı koparma).
7.2 Kafka vs. RabbitMQ: Hangisini seçmeli?
7.3 Point-to-Point vs. Publish-Subscribe.
7.4 Java Örneği: Spring Kafka ile yüksek hacimli veri işleme.
Bölüm 8: Veritabanı Ölçekleme: Sharding ve Partitioning
8.1 Sharding (Parçalama) stratejileri ve "Hot Partition" problemi.
8.2 Consistent Hashing ile veri dağıtımı.
8.3 Replication (Çoğaltma) ve Quorum kavramı.
Bölüm 9: Dağıtık Benzersiz ID Üretimi (Distributed ID Generators)
9.1 UUID neden her zaman iyi bir fikir değil?
9.2 Twitter Snowflake algoritması.
9.3 Kod Örneği: Java 21 ile Thread-Safe Snowflake ID Generator yazımı.
Bölüm 10: İletişim Protokolleri: REST, GraphQL, gRPC ve WebSocket
10.1 Hangisi nerede kullanılır? Performans karşılaştırması.
10.2 Protobuf vs. JSON.
10.3 Kod Örneği: Spring Boot ile gRPC servisi oluşturmak.
Kısım 3: Modern Java ile İleri Seviye Konseptler
Java 21 ve Spring Boot 3'ün gücünü kullanarak rakiplerden ayrıştığımız kısım.
Bölüm 11: Java 21 Virtual Threads (Project Loom): Eşzamanlılık Devrimi
11.1 Platform Threads vs. Virtual Threads.
11.2 "One thread per request" modelinin geri dönüşü.
11.3 Yüksek trafikli sistemlerde Virtual Thread avantajları.
11.4 Kod Örneği: Spring Boot 3.2+ ile Virtual Threads aktivasyonu ve performans testi.
Bölüm 12: Rate Limiting (Hız Sınırlama): Sistemin Sigortası
12.1 Algoritmalar: Token Bucket, Leaky Bucket, Fixed Window.
12.2 Dağıtık ortamda Rate Limiting (Redis + Lua script).
12.3 Kod Örneği: Bucket4j ve Spring Boot ile API koruması.
Bölüm 13: Distributed Locking ve Consensus (Konsensüs)
13.1 Race Condition belası.
13.2 Redis ile Distributed Lock (Redlock).
13.3 Zookeeper ve Paxos/Raft algoritmalarına genel bakış.
Bölüm 14: Monitoring ve Observability: Kör Uçuş Yapma
14.1 Metrics, Logs, Traces (Üç Silahşörler).
14.2 Prometheus ve Grafana mimarisi.
14.3 Kod Örneği: Spring Boot Actuator ve Micrometer ile özel metrik takibi.
Kısım 4: Gerçek Mülakat Senaryoları - "Battle Royale"
FAANG mülakatlarında en çok sorulan soruların adım adım çözümü.
Bölüm 15: URL Shortener Tasarımı (TinyURL / Bit.ly)
15.1 Gereksinimler: 7 karakterlik eşsiz link nasıl üretilir?
15.2 Veritabanı tasarımı ve Hash çakışmaları.
15.3 Yönlendirme (301 vs 302) farkları.
Bölüm 16: Key-Value Store Tasarımı (Kendi Redis'ini Tasarla)
16.1 Bellek yönetimi ve disk kalıcılığı (Persistence).
16.2 Veri replikasyonu nasıl çalışır?
Bölüm 17: Bildirim Sistemi (Notification System) Tasarımı
17.1 Email, SMS, Push Notification tek çatı altında.
17.2 Retry mekanizmaları ve Dead Letter Queues.
17.3 Kod Örneği: Spring Event Listener ve RabbitMQ ile asenkron bildirim.
Bölüm 18: Sosyal Medya Akışı (News Feed) Tasarımı (Facebook/Twitter)
18.1 "Fan-out on Write" (Push) vs. "Fan-out on Read" (Pull).
18.2 Ünlü kullanıcı (Celebrity) problemi.
18.3 Feed oluşturma algoritmaları.
Bölüm 19: Chat Uygulaması Tasarımı (WhatsApp / Telegram)
19.1 WebSocket ile gerçek zamanlı iletişim.
19.2 Mesajların sırasını koruma (Ordering) ve teslim garantisi.
19.4 Grup sohbetleri ve veri modeli.
Bölüm 20: Arama Otomatik Tamamlama (Typeahead / Autocomplete)
20.1 Trie veri yapısının gücü.
20.2 En çok arananları önbellekleme.
20.3 Veri güncelleme sıklığı.
Bölüm 21: Video Streaming Platformu (YouTube / Netflix)
21.1 CDN (Content Delivery Network) kullanımı.
21.2 Video chunking ve adaptive streaming (HLS/DASH).
21.3 Büyük veriyi (Petabytes) depolama.
Bölüm 22: Web Crawler (Örümcek) Tasarımı (Google)
22.1 Politeness (Nezaket) politikası ve Robots.txt.
22.2 URL Frontier yönetimi.
22.3 Tekrar eden içerikleri (Deduping) algılama.
Bölüm 23: E-Ticaret Sepet ve Envanter Sistemi (Amazon)
23.1 Concurrency problemi: Son kalan ürünü iki kişi aynı anda alırsa?
23.2 Optimistic vs. Pessimistic Locking.
23.3 Kod Örneği: Spring Data JPA @Version ile Optimistic Lock demosu.
Bölüm 24: Konum Bazlı Servisler (Uber / Google Maps)
24.1 Quadtree ve Geohash algoritmaları.
24.2 Yakındaki sürücüleri bulma sorguları.
24.3 Gerçek zamanlı konum güncelleme.
Bölüm 25: Metrik ve Log Toplama Sistemi (Datadog / Splunk)
25.1 Push vs Pull modelleri.
25.2 Time-Series veritabanları (InfluxDB / Cassandra).
25.3 Veri toplama (Aggregation) ve sıkıştırma.
Kısım 5: Dayanıklılık ve Güvenlik
Sistemi sadece kurmak yetmez, ayakta tutmak gerekir.
Bölüm 26: Circuit Breaker ve Fault Tolerance
26.1 Zincirleme hataları önlemek.
26.2 Bulkhead Pattern.
26.3 Kod Örneği: Resilience4j ve Spring Boot entegrasyonu.
Bölüm 27: API Gateway ve Güvenlik
27.1 OAuth2 ve JWT ile Kimlik Doğrulama.
27.2 SQL Injection ve DDoS saldırılarına karşı mimari önlemler.
Bölüm 28: Batch Processing (Toplu İşleme)
28.1 Büyük veriyi parça parça işleme.
28.2 Kod Örneği: Spring Batch ile milyonlarca faturayı işleyen bir job tasarımı.
Kısım 6: Final ve Mülakat Stratejisi
Bilgiyi sunma sanatı.
Bölüm 29: Mülakat Simülasyonu: Adım Adım Yaklaşım
29.1 Gereksinimleri netleştirme (SCOPE).
29.2 Kaba taslak (High-Level Design).
29.3 Detaylandırma ve darboğazları tartışma.
29.4 "Bunu nasıl daha iyi yapardın?" sorusuna cevap verme.
Bölüm 30: Senior Mühendisin El Çantası
30.1 Tekrar edilecek kontrol listesi (Cheatsheet).
30.2 Geleceğin sistemleri: AI destekli sistem tasarımları.
30.3 Kapanış: Başarı senin, şimdi git ve o işi al!
Yazarın Notu :
"Unutma, Amazon'daki veya Google'daki mühendisler uzaylı değil. Onlar da senin gibi public
static void main ile başladı. Bu kitapta anlattığımız her şey, karmaşık görünen problemlerin
aslında küçük, yönetilebilir parçaların birleşimi olduğunu göstermek için var. Java 21'in gücünü
arkana al, Spring Boot'un pratikliğiyle hızlan ve o beyaz tahtanın önünde kendine güvenerek dur.
Başarılar!"
Önsöz
Hoş geldin meslektaşım.
Muhtemelen bu kitabı eline aldığında aklında tanıdık bir senaryo, belki de hafif bir endişe var: Bir
mülakat odasındasın (veya bir Zoom görüşmesinde), karşında Google, Amazon ya da hayalindeki o
"unicorn" şirketin kıdemli mühendisleri oturuyor. Ve biri, sanki dünyanın en basit sorusunu soruyormuş
gibi sana bakıp şöyle diyor:
"Bize Twitter'ı baştan tasarlar mısın?"
Bir anlık sessizlik... Zihninde "Nereden başlasam?" karmaşası. Veritabanı mı? Load Balancer mı? Yoksa 
o meşhur Cache stratejileri mi?
Yıllarca kod yazdık. NullPointerException ile savaştık, sabahın 5'inde production bug'ları çözdük,
spagetti kodları refactor ettik. İyi birer yazılımcıyız, biliyorum. Ancak System Design (Sistem
Tasarımı) bambaşka bir oyun sahası. Burada doğru ya da yanlış cevap yok; sadece "daha iyi kararlar"
ve "ticari ödünleşimler (trade-offs)" var. Kodun nasıl çalıştığını bilmekle, milyonlarca kullanıcının o kodu
aynı anda nasıl çalıştıracağını bilmek arasındaki fark, işte o "Senior" unvanının hakkını verdiğimiz yerdir.
Bu kitabı yazma sebebim çok basit: Piyasada System Design üzerine harika kaynaklar olsa da, çoğu ya
çok teorik ve akademik bir dille yazılmış ya da biz Java geliştiricilerinin aşina olduğu ekosistemden
uzak örneklerle dolu.
Ben istedim ki; bu kitap seninle bir kahve molasında, beyaz tahtanın (whiteboard) karşısına geçip
sohbet ediyormuşuz gibi hissettirsin.
Bu kitapta ne bulacaksın?
Gerçek Dünya: Soyut kavramlar yerine, "Netflix videoyu nasıl takılmadan oynatıyor?", "WhatsApp
mesajları sırasıyla nasıl iletiyor?" gibi soruların peşine düşeceğiz.
Modern Teknoloji: Örneklerimizi 10 yıl öncesinin teknolojileriyle değil, Java 21'in Virtual
Thread'leri ve Spring Boot 3.x'in modern yetenekleriyle vereceğiz. Kodun gücünü mimariyle
birleştireceğiz.
Samimiyet: "Bunu bilmemek ayıp" değil, "Bunu şimdi öğreniyoruz" diyeceğiz. Karmaşık dağıtık
sistem problemlerini, en basit ve anlaşılır parçalara böleceğiz.
Bu kitabı bitirdiğinde, sadece mülakatları geçecek bilgiye sahip olmakla kalmayacaksın. Aynı zamanda
mevcut işinde bir projeye bakarken, bir mikroservis mimarisi kurarken veya veritabanı seçerken
kendine çok daha fazla güvenen, kararlarının arkasında sağlam argümanlarla durabilen bir Principal
Mühendis gibi düşüneceksin.
Unutma, karşındaki o mülakatçı da, hayran olduğun o devasa sistemleri kuranlar da uzaylı değil. Onlar
da public static void main ile başladı. Şimdi sıra sende; kalemini hazırla, beyaz tahtanın başına
geçiyoruz.
Yolun açık, kodun bug'sız, sistemin ölçeklenebilir olsun.
Keyifli okumalar.
Ali Turgut Bozkurt
Principal Java Developer & Software Architect

Benzer Ürünler