Geçen gün e-ticaret altyapısında sunuculardan birinde çok garip bir şikayet aldım. Müşteriler "Şifremi Unuttum" butonuna bastıktan sonra mail ya hiç gelmiyor ya da 2-3 saat sonra geliyormuş. Bu süre zarfında adamlar alışveriş sepetini terk edip başka siteye gitmiş oluyor.
SSH ile sunucuya bağlanıp mail loglarını (<code>/var/log/mail.log</code>) açtığımda Postfix kuyruğu (queue) dolup taşmış. Binlerce bilgilendirme maili, bülten veya bildirim önde yığılmış. Şifre sıfırlama gibi kritik ve acil mailler de o kuyruğun en arkasında saatlerce beklemiş.
Bu kronik sorunu Postfix tarafında nasıl çözdüğümü ve acil mailleri önceliğe alacak şekilde kuyruk mimarisini nasıl düzenlediğimi sizlere anlatacağım. Bilhassa E-ticaret veya üyelikli site yönetenler inceleyebilirler.
Varsayılan ayarlarda Postfix, kendisine gelen tüm mailleri tek bir kuyruğa (<code>active queue</code>) yığı ve "ilk gelen ilk çıkar" (FIFO - First In, First Out) mantığıyla sırayla gönderir.
Eğer siteniz toplu mail (bülten, promosyon) atıyorsa veya spam/gecikmeli yanıt veren dış sunuculara mail gönderiyorsa, Postfix o mailleri göndermeye çalışırken kilitlenir.
Şifre sıfırlama veya sipariş onay mailli gibi "kritik" olması gereken işlemler de o koca kuyrukta arkada sıra bekler.
Bu sorunu kökten çözmek için Postfix konfigürasyonunu optimize edip ve kuyruk yönetimini tazeledim.
1. Adım: Kuyruktaki Yığılmayı ve Durumu Kontrol Etme Öncelikle sunucunuzda şu an kuyrukta kaç tane mail beklediğini görmek için şu komutu çalıştırın;
mailq
Eğer ekranda binlerce satır akıyorsa ve <code>Connection timed out</code> veya <code>Deferred</code> statüsünde mailler birikmişse kuyruk tıkanmış demektir.
2. Adım: Postfix Ana Konfigürasyonunu Düzenleme (<code>main.cf</code>) Postfix'in kuyruk yönetimini hızlandırmak ve tıkanıklıkları önlemek için <code>/etc/postfix/main.cf</code> dosyasını açıyoruz;
nano /etc/postfix/main.cf
Dosyanın uygun bir yerine şu performans parametrelerini ekleyin veya güncelleyin: Ini, TOML
# TCP bağlantı zaman aşımı sürelerini düşürerek yanıt vermeyen sunucularda takılı kalmayı önler smtp_connect_timeout = 30s smtp_helo_timeout = 30s
3. Adım: Kritik Mailler İçin Ayrı Bir Postfix Instance Kurulumu
Büyük e-ticaret sitelerinde toplu mailler ile şifre sıfırlama mailleri asla aynı kuyruktan atılmaz. Bunun için Postfix'e ikinci bir instance (bağımsız port/kanal) kurarak şifre sıfırlama maillerini direkt Mailbaby veya harici bir SMTP relay üzerinden anında gönderecek şekilde ayırabilirsiniz.
Eğer tek sunucu üzerinden yürüyecekseniz, mevcut kuyruğu temizlemek için şu komutu kullanabilirsiniz:E-ticaret sitelerinden giden şifre sıfırlama maillerinin saatlerce gecikme sorununu çözdümE-ticaret sitelerinden giden şifre sıfırlama maillerinin saatlerce gecikme sorununu çözdüm
# Kuyruktaki tüm bekleyen (deferred) mailleri zorla tekrar göndermeyi tetikle postqueue -f
4. Adım: PHP / E-Ticaret Yazılımı Tarafı (Asenkron Kuyruk - Queue) Sadece Postfix değil, e-ticaret yazılımınızın mail gönderirken PHP'yi kitlememesi gerekir.
Mail gönderimlerini doğrudan tarayıcı isteği (HTTP request) sırasında synchronous (senkron) yapmak yerine, Cron veya Redis/Beanstalkd tabanlı asenkron kuyruk sistemlerine (<code>Background Processing</code>) devredin. Böylece site arayüzü mail sunucusunun yanıt vermesini beklemez, mail arka planda anında kuyruğa alınır.
Bu optimizasyonlar yapıldıktan sonra şifre sıfırlama maillerindeki o gecikmeler tamamen ortadan kalktı ve mailler saniyeler içinde kullanıcıların kutusuna düşmeye başladı.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
Geçen gün e-ticaret altyapısında sunuculardan birinde çok garip bir şikayet aldım. Müşteriler "Şifremi Unuttum" butonuna bastıktan sonra mail ya hiç gelmiyor ya da 2-3 saat sonra geliyormuş. Bu süre zarfında adamlar alışveriş sepetini terk edip başka siteye gitmiş oluyor.
SSH ile sunucuya bağlanıp mail loglarını (<code>/var/log/mail.log</code>) açtığımda Postfix kuyruğu (queue) dolup taşmış. Binlerce bilgilendirme maili, bülten veya bildirim önde yığılmış. Şifre sıfırlama gibi kritik ve acil mailler de o kuyruğun en arkasında saatlerce beklemiş.
Bu kronik sorunu Postfix tarafında nasıl çözdüğümü ve acil mailleri önceliğe alacak şekilde kuyruk mimarisini nasıl düzenlediğimi sizlere anlatacağım. Bilhassa E-ticaret veya üyelikli site yönetenler inceleyebilirler.
Varsayılan ayarlarda Postfix, kendisine gelen tüm mailleri tek bir kuyruğa (<code>active queue</code>) yığı ve "ilk gelen ilk çıkar" (FIFO - First In, First Out) mantığıyla sırayla gönderir.
Bu sorunu kökten çözmek için Postfix konfigürasyonunu optimize edip ve kuyruk yönetimini tazeledim.
1. Adım: Kuyruktaki Yığılmayı ve Durumu Kontrol Etme
Öncelikle sunucunuzda şu an kuyrukta kaç tane mail beklediğini görmek için şu komutu çalıştırın;
Eğer ekranda binlerce satır akıyorsa ve <code>Connection timed out</code> veya <code>Deferred</code> statüsünde mailler birikmişse kuyruk tıkanmış demektir.
2. Adım: Postfix Ana Konfigürasyonunu Düzenleme (<code>main.cf</code>)
Postfix'in kuyruk yönetimini hızlandırmak ve tıkanıklıkları önlemek için <code>/etc/postfix/main.cf</code> dosyasını açıyoruz;
Dosyanın uygun bir yerine şu performans parametrelerini ekleyin veya güncelleyin:
Ini, TOML
3. Adım: Kritik Mailler İçin Ayrı Bir Postfix Instance Kurulumu
Büyük e-ticaret sitelerinde toplu mailler ile şifre sıfırlama mailleri asla aynı kuyruktan atılmaz. Bunun için Postfix'e ikinci bir instance (bağımsız port/kanal) kurarak şifre sıfırlama maillerini direkt Mailbaby veya harici bir SMTP relay üzerinden anında gönderecek şekilde ayırabilirsiniz.
Eğer tek sunucu üzerinden yürüyecekseniz, mevcut kuyruğu temizlemek için şu komutu kullanabilirsiniz:E-ticaret sitelerinden giden şifre sıfırlama maillerinin saatlerce gecikme sorununu çözdümE-ticaret sitelerinden giden şifre sıfırlama maillerinin saatlerce gecikme sorununu çözdüm
4. Adım: PHP / E-Ticaret Yazılımı Tarafı (Asenkron Kuyruk - Queue)
Sadece Postfix değil, e-ticaret yazılımınızın mail gönderirken PHP'yi kitlememesi gerekir.
Bu optimizasyonlar yapıldıktan sonra şifre sıfırlama maillerindeki o gecikmeler tamamen ortadan kalktı ve mailler saniyeler içinde kullanıcıların kutusuna düşmeye başladı.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.