Modern bir yazılım geliştiricisinin çalışma masasına oturduğunda zihninde kurduğu dünya genellikle soyuttur:

Algoritmalar, tasarım kalıpları (design patterns), JSON nesneleri, asenkron fonksiyonlar ve Docker container'ları... Geliştirici kodu yazar, yerel bilgisayarında test eder, git push komutunu verir ve kahvesini yudumlar.

Eğer bir döngü biraz verimsiz yazılmışsa veya veritabanına indeks atmak yerine tüm tablo taranıyorsa (full table scan), geliştiricinin tepkisi genelde o meşhur rahatlık olur: "Aman ne olacak canım, bulutta kaynak sınırsız, CPU yetmezse iki çekirdek daha açarız, bellek nasılsa ucuz."

Ancak o kod satırları derlenip veri merkezindeki fiziksel bir sunucunun silikon çiplerine ulaştığı anda, soyut yazılım dünyası biter; termodinamiğin, elektriğin ve acımasız fizik yasalarının dünyası başlar.

Yazılımcının "küçük bir dikkatsizlik" dediği o optimize edilmemiş sonsuz döngü veya N+1 veritabanı sorgusu; sunucudaki çift soketli 64 çekirdekli AMD EPYC veya Intel Xeon işlemcilerin tüm çekirdeklerini %100 yüke kilitler. İşlemcinin TDP (Termal Tasarım Gücü) değeri bir anda 280 Watt'tan 500 Watt'a fırlar.

Sunucunun anakartı, RAM blokları ve güç kaynakları şebekeden çılgınca amper çekmeye başlar.

Ve ay sonunda şirket yönetiminin önüne gelen fatura, o kodu yazan yazılımcının bir yıllık maaşını geride bırakan devasa bir elektrik ve soğutma faturasına dönüşür:

"Elektrik faturası, kodun kendisinden pahalı hale gelmiştir."

Kalbe Aşırı Yüklenip Miyokardı Yoran Tedavi Hatası

Bu fiziksel bedelin insan fizyolojisindeki ve yoğun bakımdaki karşılığı son derece nettir.

Kalp yetmezliği veya koroner arter hastalığı olan bir hastayı düşünün. Hekim hastanın tansiyonunu hızlıca yükseltmek veya idrar çıkışını artırmak için kontrolsüzce yüksek doz adrenalin ve aşırı serum yüklemesi yapar.

Kısa vadede monitörde tansiyon yükselmiş gibi görünür; hekim kendince "hastayı toparladım" sanır.

Oysa hastanın göğüs kafesinin içinde bir felaket pişmektedir: Kalp kası (miyokard), o yapay kimyasal baskı yüzünden dakikada 160 atımla delicesine çalışmakta, hücrelerin oksijen ihtiyacı tavan yapmaktadır. Koroner damarlar bu çılgın talebi karşılayamaz; kalp kası oksijensiz kalarak nekroza gider ve hasta masada kardiyak arreste girer.

Yazılımda da CPU'yu kontrolsüzce %100'e kilitleyen bir kod; sunucunun kalbini ve ciğerlerini aşırı oksijen tüketimine zorlayan o bilinçsiz tedaviye benzer. İşlemci sadece kendisi yanmakla kalmaz; çevresindeki tüm altyapı ekosistemini de beraberinde tüketir.

PUE Çarpanı: Çekilen Her 1 Watt İçin Harcanan 1 Watt Daha!

Yazılımcıların çoğu veri merkezlerinin enerji ekonomisindeki en kritik metriği bilmez: PUE (Power Usage Effectiveness - Güç Kullanım Verimliliği).

PUE şu basit formülle hesaplanır:
Toplam Tesis Gücü / Bilişim Ekipmanı Gücü

İdeal bir dünyada bu oran 1.0 olmalıdır; yani çekilen tüm elektrik doğrudan sunuculara gitmelidir. Ancak gerçek hayatta, özellikle Türkiye'deki ortalama veri merkezlerinde PUE oranı 1.5 ila 1.8 arasındadır!

Bu ne anlama gelir?

Sizin yazdığınız verimsiz bir SQL sorgusu yüzünden sunucunuz fazladan 10 kW elektrik çektiğinde; veri merkezi o sunucunun yaydığı termal ısıyı dışarı atabilmek için Hassas Klimalara (CRAC), chiller ünitelerine ve fanlara fazladan 7 ila 8 kW elektrik harcamak zorundadır!

Yani sizin ekranda "küçük bir gecikme" olarak gördüğünüz o CPU yükü; veri merkezinin trafosunda iki katı büyüklüğünde bir enerji tüketimine, soğutma kompresörlerinin yıpranmasına ve binlerce kilovatsaatlik bir çevre kirliliğine yol açmaktadır.

"Milisaniyeler vs. Kilovatsaatler" Uçurumu

Yazılım mühendisliği eğitimi veren üniversitelerde öğrencilere algoritma karmaşıklığı (Big-O Notation) anlatılırken genelde "zaman karmaşıklığı" (Time Complexity) üzerinde durulur: "Bu algoritma O(n) mi, O(n^2) mi çalışıyor?"

Fakat kimse şu soruyu sormaz: "Bu algoritmanın karbon ayak izi ve watt/saat maliyeti nedir?"

  • Kötü yazılmış bir regex (düzenli ifade) yüzünden CPU'nun Catastrophic Backtracking'e girmesi,
  • Bellekte tutulabilecek 5 KB'lık bir referans verisi için her HTTP isteğinde veritabanına gidip disk I/O'su yaptırmak,
  • Gereksiz mikroservis çağrılarıyla sunucuların ağ kartlarını ve serialization motorlarını ısıtmak...

Bunların her biri birer mühendislik günahıdır.

Ve bu günahların bedeli artık sunucuların sınırsız olduğu Silikon Vadisi fantezileriyle ödenemez; Türkiye'de sanayi elektriğinin kilovatsaatinin her geçen gün zamlandığı o sert ekonomik gerçeklikle ödenir.

Yeşil Kod (Green Coding) ve Mühendislik Ahlakı

Mühendislik; bir problemi sadece "çalıştırmak" değil, o problemi en az enerji, en az kaynak ve en yüksek zarafetle çözebilme sanatıdır.

Kıdemli bir mühendis olmanın eşiği; terminale yazdığı tek bir satır kodun veri merkezindeki soğutma kulelerinde kaç litre su buharlaştırdığını, panodaki kaç amperi tetiklediğini ve şirketin elektrik faturasını nasıl şişirdiğini hissedebildiği andır.

  • Kodunuzu profillemeyi (profiling) alışkanlık haline getirin.
  • CPU döngülerini ve bellek tahsislerini (allocation) birer enerji tüketim kalemi olarak görün.
  • Veritabanı sorgularınızı indekslerle hafifletin; disk I/O'sunu ve CPU çekirdeklerini dinlendirin.

Çünkü ekrandaki milisaniyeleri önemsemeyen bir yazılımcı; sadece kötü bir mühendis değil, veri merkezinin cebini ve gezegenin enerjisini sessizce kemiren görünmez bir maliyet ortağıdır.