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.
