Bottleneck (Darboğaz)

bottleneck-darbogaz (büyük resim için tıklayın)

Bottleneck (darboğaz), bir sistemin veya sürecin genel performansını sınırlayan en yavaş, en verimsiz bileşenine verilen isimdir. 

1. Tanım

Genel anlamda, bir üretim hattındaki en dar boru parçası ne kadar küçükse o kadar akışı kısıtlıyorsa, bottleneck de sistemdeki en düşük kapasiteye sahip nokta olduğu için tüm sürecin akışını o belirler.

Bilgisayar sistemlerinde de benzer: Uygulamanın verdiği cevap süresini en çok yavaşlatan bileşen (CPU, bellek, disk, ağ, veri tabanı vs.) bottleneck olur.

2. Bottleneck Türleri

CPU bound

İşlemci, hesaplama ağırlıklı görevleri hızla işleyemediğinde ortaya çıkar.

I/O bound

Disk veya ağ girdi/çıkışı (read/write, HTTP çağrıları vs.) çok yavaş olduğunda.

Memory bound

Yetersiz RAM veya sık sık GC (Çöp Toplama) nedeniyle bellek erişimleri hantal çalıştığında.

Database bound

Sorguların yavaşlığı, indeks eksikliği, lock’lar veya yetersiz bağlantı havuzu (connection pool) yüzünden.

Network bound

Uygulama parçaları arasındaki ağ iletişimi zayıf veya tıkanıksa.

3. Bottleneck Tespit Yöntemleri

Profiling/Monitoring Araçları

Java için: VisualVM, JProfiler, YourKit, Flight Recorder

CPU/Heap/disk I/O/metriklerini gerçek zamanlı izleyen APM’ler (New Relic, Dynatrace, Prometheus+Grafana)

Log ve Metrik Toplama

Spring Boot Actuator endpoint’leri ( /actuator/metrics, /actuator/trace )

Özel sayaçlar (Micrometer) ile belirli metrikleri toplamak

Basit Ölçümler

Zaman damgası alıp kritik kod blokları arasındaki farkı ölçmek

System.nanoTime() veya StopWatch kullanımı

Load Testing

JMeter, Gatling, Locust gibi araçlarla yük altında sistem davranışını gözlemlemek

4. Bottleneck’i Hafifletme/Çözme Yaklaşımları

CPU Bound İse

Paralel işleme: CompletableFuture, thread pool’lar

Hesaplama yoğun kodu optimize etmek, algoritma iyileştirmesi

Gerekirse daha hızlı CPU’lu veya çekirdek sayısı yüksek sunucuya taşıma

I/O Bound İse

Asenkron I/O (Reactive programming – WebFlux, Project Reactor)

Batched ve toplu işlemlerle I/O sayısını azaltmak

Caching (Redis, in-memory cache)

Database Bound İse

Sorgu optimizasyonu: JOIN’leri, WHERE koşullarını gözden geçirmek

Uygun indeksler eklemek veya yeniden düzenlemek

Connection pool boyutunu ayarlamak (HikariCP konfigürasyonu)

Read-replica kullanmak, write ve read trafikleri ayırmak

Network Bound İse

HTTP çağrılarını kısaltmak, timeout’ları optimize etmek

Veri sıkıştırma (gzip), protokol optimizasyonu (HTTP/2)

CDN kullanmak, edge caching

Özet

Bir bottleneck, sistemin performans sınırlayıcısıdır. Önce türünü (CPU, I/O, DB, network vb.) tespit et, sonra hedefe yönelik optimizasyon adımlarını uygula. Bu sayede sisteminin toplam throughput’unu ciddi oranda artırabilirsin.

*Gönderi ve görsel chatgpt ile oluşturulmuştur. 

omurs

Ö S, 30 Ağustos 2018 Perşembe 15:30 tarihinde kayıt oldu

Etiketler

Beğeni


Yıllara Göre Gönderiler








LombokLoglamaB2C (Business-to-Consumer)B2B (Business-to-Business)İçerik Yönetim Sistemi - CMS (Content Management System)Pagination (Sayfalama)Sanal Özel Ağ - VPN (Virtual Private Network)Cronjob (Zamanlanmış Görevler)Printer-YazıcıJava'daki İlkel Veri Tipleri ve Alabilecekleri DeğerlerBit & Byte ve Hafıza Boyutlarındaki Ölçüm BirimleriSanallaştırma (Virtualization)DNS KayıtlarıE-Fatura ve E-ArşivYazılım Lisans TürleriAudit (Denetim) Açık Kaynak (Open Source)Monitoring (İzleme)Sitemap & Robots.txtKilometretaşı (Milestone)BSMV (Banka ve Sigorta Muameleleri Vergisi)KKDF (Kaynak Kullanımı Destekleme Fonu)Siber Pazartesi (Cyber Monday)Black Friday (Kara Cuma)Hotlink.htaccessCryptoLockerMalwareTrojanWormDependency (Yazılım Geliştirme Sürecinde Paket Bağımlılığı)Configuration (Yazılım Geliştirme Sürecinde Yapılandırma)Yahoo ve Yahoo'nun Başarısızlık NedenleriArchiving (Yazılım Geliştirme Sürecinde Arşivleme)Görsel Dosya Türleri (Image Types)ReleaseVersioning & Tagging (Versiyonlama ve Etiketleme)BuildJob (Yazılım Geliştirme Sürecinde Görevler)SonarQubeCDATA (Character Data)Alan Adı Uzantıları (Domain Name Extensions)Regresyon Kara Kutu (Black-Box) TestBeyaz Kutu (White-box) TestGri Kutu (Grey-box) TestYazılım Geliştirme Sürecindeki Temel Test TürleriKod gözden geçirme (Code Review)Birim Testi (Unit Testing)Yazılım Sürecinde EntegrasyonJAR & WAREager & Lazy Fetch TypeMaskelemeKPI (Key Performance Indicator)KII (Key Impact Indicator)Projenin JAR Dosyasını Oluştur - JAR PathSunucu için Linux dağıtım SeçimiKonyteynerler (container technologies)Runtime & Compile Time (Çalışma ve Derleme Zamanı)@Anotasyonlar (@Annotations)