Tıp biliminin en büyüleyici dallarından biri "Kronofarmakoloji"dir; yani ilaçların biyolojik saatimizle (sirkadiyen ritim) olan zamansal etkileşimi. İnsan bedeni günün her saatinde aynı kimyasal reaksiyonları vermez. Örneğin tansiyon ilaçları ve kortizon türevleri genellikle sabah 08:00 - 09:00 civarında verilir; çünkü vücudun doğal kortizol salgısı ve kan basıncı o saatlerde zirve yapar.
Şimdi düşünün ki bir hastane servisinde nöbet tutan hemşirenin kol saati 6 saat geri kalmıştır (veya Londra saatindedir). Sabah 09:00'da verilmesi gereken o güçlü antihipertansif ilacı, gece yarısı saat 03:00'te, hastanın en derin non-REM uykusunda, tansiyonunun ve nabzının zaten fizyolojik olarak en dipte olduğu anda hastanın damarına basar! Sonuç ne olur? Hastanın kan basıncı anında 50'ye çakılır, beyin perfüzyonu durur ve hasta derin uykuda komaya girer. İlaç doğrudur, doz doğrudur; fakat "zamanlama" ölümcüldür.
Bilişim mimarisinde ve sunucu yönetiminde de ekiplerin en çok hafife aldığı ama müşterilerle ilişkileri bir gecede dinamitleyen en sinsi saatli bomba, tam olarak bu kronofarmakolojik zamanlama hatasıdır: Sunucu Zaman Dilimi (Timezone / UTC) Uyuşmazlığı.
Gece 03:22: Telefonların Titreşimiyle Uyanan Müşteriler
Çarşamba gecesi saat 03:22. Türkiye genelinde on binlerce insan derin uykusundadır. Aniden yatak uçlarındaki akıllı telefonların ekranları aydınlanır, ardı ardına tiz SMS ve bildirim sesleri odayı doldurur:
SMS: "Sayın Müşterimiz, 48291 nolu siparişiniz paketlenmiş ve kargo firmasına teslim edilmiştir. Takip no: 94821..."
E-Posta: "Aylık Premium Üyeliğiniz Başarıyla Yenilendi. Kartınızdan 450 TL tahsil edildi."
Push Notification: "Bugüne özel flaş indirimleri kaçırmayın! Hemen tıklayın!"
İnsanlar panikle uyanır. Kimisi evine hırsız girdiğini zanneder, kimisi kredi kartının kopyalandığını ve dolandırıldığını düşünerek bankasını arayıp kartlarını iptal ettirir. Öfkeli müşteriler soluğu şirketin sosyal medya hesaplarında, Şikayetvar'da ve forumlarda alır:
"Siz sapık mısınız? Gecenin üç buçuğunda bana kargo mesajı atmaya ne hakkınız var? Çocuğumu uyandırdınız, bütün aile ayağa kalktı! Yarın ilk iş aboneliğimi iptal edip Tüketici Hakem Heyeti'ne başvuracağım!"
Sabah saat 08:30'da şirketin çağrı merkezi santrali alev alır. Şirketin genel müdürü pazarlama ve bilgi işlem departmanını odaya toplar: "Kimin fikriydi gecenin üçünde kargo bildirimi atmak? Hepinizi kovarım!"
Pazarlama müdürü titreyerek cevap verir: "Efendim biz sisteme 'Her sabah saat 06:30'da kargoya verilen ürünlerin bildirimlerini tetikle' diye cron görevi koymuştuk. Gece atılması imkânsız!"
İşte tam bu noktada, yazılım dünyasının o görünmez hayaleti sahneye çıkar: UTC vs. Europe/Istanbul.
UTC İllüzyonu: 3 Saatlik Saatli Bomba
Modern Linux sunucular (Ubuntu, Debian, RHEL, CloudLinux) veri merkezine kurulduğunda varsayılan sistem saati evrensel koordineli zaman olan UTC (Coordinated Universal Time) olarak ayarlanır. Yani İngiltere'deki Greenwich meridyeninin saatidir.
Türkiye ise 2016 yılından itibaren kalıcı yaz saati uygulamasına geçmiş ve saat dilimini kalıcı olarak UTC+3 seviyesine sabitlemiştir. Yani Türkiye saati, sunucunun UTC saatinden tam 3 saat ileridedir!
Geliştiricimiz sunucudaki crontab dosyasına şu görevi yazmıştır:
# Sabah 06:30'da kargo bildirimlerini gönder
30 6 * * * /usr/bin/php /home/firma/cron/send_shipping_sms.phpGeliştiricinin zihnindeki saat: Türkiye saatiyle sabah 06:30 (ortalık aydınlanmış, insanlar uyanmaya başlamıştır).
Fakat sunucunun Linux çekirdeğinin zihnindeki saat: UTC saatidir!
Sunucu saati 06:30 olduğunda, Türkiye'de saat aslında sabah 09:30'dur. Buraya kadar sadece bir gecikme vardır. Asıl facia ters yöndeki hesaplamalarda veya veritabanı sorgularında patlak verir:
Uygulama kodunun içinde PHP varsayılan timezone ayarı yapılmamıştır. Kodda şu sorgu koşar:
// "Son 24 saatte kargolananları getir"
$time = date("Y-m-d H:i:s", strtotime("-24 hours"));PHP, sunucu saati olan UTC'yi alır. Veritabanındaki created_at timestamp alanı ise yerel saatle yazılmıştır. Üç saatlik o zamansal yırtık (drift), zamanlanmış kuyruk yöneticisini (queue worker) şaşırtır. Sistem "gecikmiş görevleri telafi edeyim" derken, gece yarısı saat 00:30'da çalışması gereken bakım scriptini saat 03:30'da tetikler ve kuyrukta birikmiş binlerce SMS'i gece uykusundaki müşterilerin kafasına boşaltır!
Veritabanında Zaman Kayması: Finansal İptaller
Zaman dilimi uyumsuzluğu sadece gece atılan SMS'lerle sınırlı kalmaz; çok daha ağır finansal ve yasal krizler doğurur:
- Kampanya Başlangıç ve Bitişleri: "Bu gece 23:59'da bitecek %50 indirim" kampanyası tanımlarsınız. Sunucu UTC çalıştığı için kampanya Türkiye saatiyle gece 03:00'e kadar açık kalır. Binlerce müşteri indirim bittikten sonra da indirimli fiyattan alışveriş yapar; şirket yüz binlerce lira zarar eder.
- Fatura ve Muhasebe Kayıtları: Ayın son günü saat 22:30'da kesilen bir e-fatura, sunucu UTC olduğu için bir önceki günün veya bir sonraki ayın ilk günü gibi kaydedilir. Maliye denetiminde vergi usul kanununa muhalefetten ceza yağar.
- Log Adli Bilişimi (Forensics): Sitenize bir siber saldırı yapıldığında polis ve siber suçlarla mücadele ekipleri logları ister. Sunucu logları UTC, güvenlik kamerası logları UTC+3, veritabanı logları ise karmaşık bir saat dilimindedir. Olayın kronolojisini çıkarmak imkânsızlaşır.
Cerrahi Senkronizasyon: Sunucuda Zamanı Düzeltmek
Sisteminizin biyolojik saatini şaşmaz bir hassasiyete kavuşturmanın adımları son derece nettir:
- İşletim Sistemi Zaman Dilimi (OS Timezone):
Linux sunucuda yerel saat dilimi derhal tanımlanmalıdır:timedatectl set-timezone Europe/Istanbul # Kontrol için: timedatectl status - Ağ Zaman Protokolü (NTP / Chrony): Sunucunun saatinin donanımsal kristal kaymasıyla milisaniyelerce geri kalmasını engellemek için NTP servisi aktif edilmelidir:
systemctl enable --now chronyd - PHP ve Web Sunucusu Yapılandırması:
php.inidosyasındadate.timezoneparametresi mutlaka açıkça yazılmalıdır:[Date] date.timezone = "Europe/Istanbul" - Veritabanı Standardı: UTC'de Sakla, Yerelde Göster: En temiz mühendislik mimarisi; veritabanında tüm tarihleri daima saf UTC olarak (
TIMESTAMP) saklamak, kullanıcıya veya arayüze sunarken kullanıcının yerel saat dilimine (Europe/Istanbul) dönüştürerek ekrana basmaktır. Böylece dünyanın neresinde olursanız olun hiçbir zaman karmaşası yaşanmaz.
Hastanede saatini ayarlamayan hemşire hastayı nasıl komaya sokarsa, saat dilimini ayarlamayan sistem yöneticisi de şirketini öyle itibar komasına sokar. Zaman soyut bir kavram değildir; bilişim altyapısının her bir dişlisini birbirine bağlayan en hassas çarktır. Saatinizi doğru kurmazsanız, geleceğiniz bir gece yarısı gelen öfkeli bir telefonla kararır.