Farmakolojinin ve bağımlılık tıbbının en hüzünlü, en kısır döngülü biyolojik mekanizmalarından biri "Tolerans Gelişimi"dir (Tolerance).

Kronik ağrısı olan bir hastayı düşünün. Başlangıçta 10 miligramlık basit bir ağrı kesici (örneğin bir opioid veya analjezik) ağrıyı bıçak gibi keser. Hasta rahat bir nefes alır, hayata döner. Ancak haftalar ve aylar geçtikçe insan bedeni o kimyasal uyarana alışmaya başlar. Hücre yüzeyindeki reseptörler (özellikle mu-opioid reseptörleri) duyarsızlaşır (desensitizasyon) ve sayılarını azaltır (down-regulation).

Bir süre sonra o 10 mg artık ağrıyı kesmemeye başlar.
Hasta doktorun kapısını çalar: "Ağrım geri geldi, ilacı artırmamız lazım."
Doz 20 mg'a çıkarılır. Birkaç ay sonra 40 mg'a, sonra 80 mg'a...

Hasta aslında iyileşmiyordur. Hastalığın altındaki kök neden (iltihap, fıtık, tümör) yerinde durmaktadır. Beden sadece ilacın dozuna karşı korkunç bir tolerans geliştirmiş ve o zehre bağımlı hale gelmiştir. Dozu artırmak hastalığı tedavi etmez; sadece kaçınılmaz çöküşü erteler ve karaciğeri iflasa sürükler.

Şimdi bu farmakolojik tuzağı alın ve modern bulut bilişimin (Cloud Computing), sunucu yönetiminin ve yazılım mimarisinin tam göbeğine yerleştirin.

"Sunucu Yavaşladı, Instance'ı Büyütün!"

Yazılım sektörünün en yaygın, en tembel ve en tehlikeli alışkanlığı nedir biliyor musunuz?
Algoritmik tembelliği, kredi kartıyla çözmeye çalışmak.

Bir e-ticaret veya SaaS uygulamanız vardır. Başlangıçta her şey 2 vCPU ve 4 GB RAM'e sahip mütevazı bir sunucuda harika çalışıyordur. Ancak zamanla kullanıcı sayısı biraz artar ve sistem nefes nefese kalmaya başlar. Yanıt süreleri 200 ms'den 2 saniyeye fırlar, CPU kullanımı %95'e dayanır.

O an masada iki seçenek vardır:

  1. Zor ve Erdemli Yol: Kodu profillemek (profiling), veritabanındaki N+1 sorgu problemlerini bulmak, eksik indeksleri tespit etmek, bellek sızıntılarını cerrahi olarak ayıklamak.
  2. Kolay ve Zehirli Yol: AWS konsolunu açıp sunucu tipini t3.mediumdan c5.2xlargea çekmek. RAM'i 4 GB'tan 32 GB'a fırlatmak.

Ve şirketlerin %90'ı ne yapar? Tabii ki ikinci yolu seçer. İki tıklamayla sunucu boyutu artırılır, fatura kabartılır, CPU kullanımı bir anda %20'ye düşer. Herkes birbirini tebrik eder: "Sorunu çözdük!"

Hayır, hiçbir şeyi çözmediniz. Siz sadece hastanın morfin dozunu iki katına çıkardınız.

Kodun Oburluk Toleransı

Peki sonra ne olur? Biyolojideki o acımasız tolerans yasası yazılımda da devreye girer.

Siz o kötü yazılmış koda 32 GB RAM verdiğinizde, o kod iyileşmez; daha obur hale gelir.

  • Geliştiriciler artık belleği serbest bırakma (garbage collection) ihtiyacı hissetmez; çünkü "Nasılsa RAM bol" rahatlığına kapılırlar.
  • Veritabanından sadece 3 alan çekmek yerine, 50 sütunluk koca nesneleri komple belleğe çeken aptalca ORM sorguları yazmaya devam ederler.
  • Karmaşıklığı O(n2)O(n^2) veya O(n3)O(n^3) olan korkunç iç içe döngüler kod tabanına yayılır.

Ve 6 ay sonra o 32 GB RAM de yetmemeye başlar. Sistem yine kilitlenir, yine yavaşlar.

Ekip bu kez "Bize 64 GB RAM ve 16 çekirdek lazım" diye yönetimin kapısına gider. Şirket her ay Amazon'a, Google'a küçük bir servet ödeyen bir "Bulut Bağımlısına" dönüşür. AWS'in ve bulut devlerinin trilyon dolarlık imparatorlukları, işte bu mühendislik tembelliğinden ve donanım toleransından beslenir.

50 Megabayt ile Ay'a Giden İnsanlık

Bilgisayar bilimleri tarihini hatırlayın. 1969 yılında Apollo 11 uzay aracını Ay'a indiren kılavuz bilgisayarın (Apollo Guidance Computer) sadece 4 kilobayt RAM'i vardı. 1990'larda dünyayı kasıp kavuran Doom oyunu, sadece 4 megabayt bellekle 3 boyutlu bir evren simüle ediyordu.

Bugün ise Slack veya Teams gibi basit bir sohbet uygulamasını açtığınızda bilgisayarınızdan 2 GB RAM emdiğini görüyorsunuz. İki satır metin göndermek için Apollo 11'in milyonlarca katı kaynağa ihtiyaç duyuyoruz.

Bunun adı teknolojik gelişme değildir. Bunun adı "Donanım Şişmanlığı" (Software Bloat) ve sefahattir.

İşlemciler hızlandıkça, bellekler ucuzladıkça; mühendisler zarafeti, optimizasyonu ve algoritma disiplinini unuttu. Kötü kodun yarattığı pisliği, altına daha büyük donanım halıları sererek örtbas etmeye alıştık.

Gerçek Tedavi Kök Nedeni Ameliyat Etmektir

Ağrıyı kesmek için dozu sürekli artırırsanız, günün birinde hastayı aşırı dozdan (overdose) kaybedersiniz.

Bir yazılım projesinde de her performans krizini sunucu büyüterek çözmeye çalışırsanız; günün birinde öyle bir trafik dalgası gelir ki, dünyadaki en pahalı AWS sunucusu bile o O(n3)O(n^3) karmaşıklığındaki kodunuzu kurtaramaz. Sistem çöker, bütçe tükenir ve şirket iflas eder.

Gerçek bir mühendis olmak istiyorsanız; sunucu boyutunu artırmayı bir "başarı" değil, bir "yenilgi itirafı" olarak görün.

Bir sistem yavaşladığında elinizi hemen kredi kartına atmayın.
Kodu masaya yatırın.
Profiler'ı çalıştırın.
O gereksiz döngüleri, o bellek sızıntılarını, o tembel sorguları tek tek bulun ve neşterle kesip atın.

Çünkü hastayı hayatta tutan şey sonsuz dozda morfin değil; hastalığın kaynağını kurutan o cesur ve disiplinli cerrahi müdahaledir.