Sisteminiz Neden Yavaşlıyor? Kuyruk Teorisinin Sıradışı Bir Kanunu!

Semih Şahan
3 min readAug 21, 2024

--

Little’s Law

Mühendislik dünyasında hız, performans ve verimlilik, hepimizin peşinden koştuğu kavramlar. Ancak sistemler büyüdükçe bu dengenin sağlanması zorlaşır ve tıkanıklıklar ortaya çıkar. 🛠️ Özellikle connection pool’lar gibi kritik noktalarda bu sorunlarla sıkça karşılaşırız. Peki, performans darboğazlarını daha iyi anlamak için ne yapabiliriz? İşte burada sahneye Little’s Law (Little’ın Kanunu) giriyor! 🎩

Little’s Law Nedir? 🤔

Şimdi, kuyruk teorisinin temel yasalarından biri olan Little’s Law’ı anlamaya başlayalım. İşte bu sihirli formül:

📊 L = λ x W

Bu formül aslında karmaşık gibi görünse de, bize bir kuyruğun dinamiklerini oldukça basit şekilde anlatıyor. Açalım:
- L: Ortalama kuyruk uzunluğu (sistemde bekleyen istek sayısı)
- λ: Gelen isteklerin hızı (istek/saniye)
- W: İsteklerin işlenme süresi (saniye)

Örnek: Connection Pool’lar Üzerinde Little’s Law

Bir senaryo düşünelim: Uygulamanız saniyede 50 bağlantı isteği veritabanına gönderiyor. 🔗 Veritabanınızın her isteği işleme süresi ise 100 milisaniye (yani 0.1 saniye). Bu verilerle Little’s Law kullanarak ortalama kuyruk uzunluğunu hesaplayabiliriz:

- λ = 50 istek/saniye
- W = 0.1 saniye

Formülümüz devrede: L = 50 x 0.1 = 5. Yani, sisteminize rahatça hizmet verebilmek için en az 5 bağlantılık bir pool kullanmanız gerekiyor. Ancak, bu pool boyutunu 3’e düşürdüğünüzde işler karışır. 🕑 Artık istekler kuyrukta beklemeye başlar ve sistem yavaşlar.

Spring Boot’ta Connection Pool Ayarı Nasıl Yapılır? ⚙️

Bu noktada Spring Boot devreye giriyor. Connection pool boyutunu Spring Boot’ta şu şekilde ayarlayabilirsiniz:

Database Config

Böylece, connection pool’unuz 5 bağlantı kapasitesine ulaşır. Ayrıca isteklerin hızını ve işleme sürelerini izlemek için Spring Actuator ve Micrometer gibi araçları kullanabilirsiniz. 🔍

REST Çağrıları ve Message Broker’lar için Connection Pool 🔄

Connection pool’lar sadece veritabanı bağlantılarıyla sınırlı değil. Aynı prensipleri REST çağrılarında ve message broker’larda da görebiliriz.

RestTemplate ile HTTP Çağrıları

Spring’de, RestTemplate ile connection pool’u yönetmek için şu yapılandırmayı kullanabilirsiniz:

Rest Template Configuration

Bu ayar, sistemin her endpoint için belirli bir sayıda bağlantıyı sınırlamasını sağlar. Böylece her endpoint için en fazla 5 bağlantı açabilirsiniz. 💡

Kafka Consumer ile Connection Pool Yönetimi

Message broker sistemlerinde de connection pool kullanımı önemlidir. Kafka’da connection pool’u şu şekilde yapılandırabilirsiniz:

Kafka Config

Bu ayarlarla, consumer tarafında mesajların verimli bir şekilde çekilmesini sağlayabilirsiniz. Kuyruk uzunluğunu ve işleme süresini dikkatle yönetmek, darboğazlardan kaçınmanın anahtarıdır.

Sonuç: Trafik ve Kapasiteyi Dengede Tutun! 🎯

🚦 Sonuç olarak, Little’s Law bize açık bir ders veriyor: Eğer gelen trafik işleme kapasitenizden fazlaysa, sisteminizde kuyruklar oluşur ve gecikmeler kaçınılmaz hale gelir. Bu nedenle connection pool’lar ve kuyruk yönetimi, sistem performansını optimize etmede kritik bir rol oynar.

Sisteminizi hızlandırmak ve kuyruğa takılmadan çalışmasını sağlamak sizin elinizde! Veritabanı işlemlerinden REST çağrılarına ve message broker’larına kadar bu prensipleri doğru uygulayarak performansınızı artırabilirsiniz. 🔑

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet