Tüm Notlar
Backend2025-12-05

Yüksek Trafikte Go: Sadece Performans Değil, Stabilite

Java ve Node.js'ten Go'ya geçiş hikayem: Garbage Collector ile savaşmayı bırakıp, neden 'basit' kodun ölçeklenebilirliğin anahtarı olduğunu anladım.

Neden Herkes Go'ya Kaçıyor?

Node.js esnektir, Java kurumsaldır, Python rahattır. Ancak saniyede 100 bin isteğin üzerine çıktığınızda, bu dillerin her birinde "dilin kendisiyle" güreşmeye başlarsınız.

Node.js'in "Tek Thread" Sınırı

Node.js'te I/O işlemleri harikadır ancak JSON parse etmek gibi basit bir CPU işlemi bile Event Loop'u bloklayabilir. Bir finans projesinde, büyük bir payload geldiğinde tüm API'nin 200ms takıldığını gördük. Cluster modu çözüm olsa da, bellek kullanımı thread başına çok yüksektir.

Go'nun "Sıkıcı" Mükemmelliği

Go'ya geçtiğimizde yaşadığımız ilk şok, bellek kullanımının %80 azalmasıydı.

// 10 bin işlemi paralel başlatmak Go için mikrosaniyelik lükstür.
for i := 0; i < 10000; i++ {
    go process(i)
}

Her bir Goroutine sadece 2KB stack ile başlar. İşletim sistemi thread'i değildir; Go Runtime'ın kendi yönettiği hafif iş parçacıklarıdır.

CSP: Paylaşımlı Bellek Yerine İletişim

Çoğu dilde concurrency, "Lock" ve "Mutex" cehennemidir. Go'da ise felsefe şudur: "Belleği paylaşarak iletişim kurma; iletişim kurarak belleği paylaş."

Channel'lar sayesinde, verinin thread'ler arasındaki akışını görselleştirebilirsiniz. Bu, deadlock (kilitlenme) riskini dramatik şekilde düşürür.

Şişkin Olmayan Binary

Go'nun en sevdiğim yanı Build sürecidir. go build dersiniz ve size tek bir dosya verir. Bağımlılık yok, JRE yükleme derdi yok, node_modules kara deliği yok. Bu, Kubernetes pod'larının saniyeler değil, milisaniyeler içinde ayağa kalkmasını sağlar. Auto-scaling (otomatik ölçeklenme) gerçek anlamda anlık tepki verir.

Sonuç

Eğer "Startup hızıyla kod yazayım, sonra bakarız" diyorsanız Node.js/Python hala iyidir. Ancak "Bu sistem 5 yıl sonra, günde 10 milyon isteği, minimum sunucu maliyetiyle karşılasın" diyorsanız, Go şu anki en rasyonel mühendislik tercihidir.