FrankenPHP, Caddy üzerine kurulu modern bir PHP uygulama sunucusudur. PHP-FPM’in yerine her projede otomatik olarak konulacak bir ürün değil; özellikle uzun yaşayan worker process’leri, otomatik HTTPS ve Mercure ile gerçek zamanlı iletişim ihtiyacı olan uygulamalarda değerlendirilmesi gereken bir runtime’dır.
Mono’da kullanım alanları
- Yüksek performanslı PHP API’leri
- Symfony / Laravel uygulamaları için modern runtime
- Real-time özellikler için Mercure entegrasyonu
Geçişte kontrol edilmesi gerekenler
Worker mode’da global state, dosya cache’i ve tek istek sonunda temizlenmesi beklenen değişkenler klasik PHP-FPM davranışından farklı sonuç verebilir. Bu nedenle uygulama kodu, opcache, session/queue altyapısı ve graceful deployment birlikte test edilir. Mono, geçişi tek servisle başlatıp metrikler doğrulandıktan sonra yaygınlaştırır.
Worker mode neyi değiştirir?
Klasik PHP istek modelinde uygulamanın başlangıç işlemleri her istek için tekrarlanır. Worker mode, uyumlu uygulamalarda başlangıç maliyetinin bir kısmını istekler arasında paylaşmayı amaçlar. Framework’ün yüklenmesi pahalıysa bu anlamlı olabilir; ancak yavaşlığın kaynağı veritabanı sorgusu veya dış API ise runtime değiştirmek o beklemeyi ortadan kaldırmaz.
Uzun yaşayan worker’larda kullanıcıya özgü verilerin sonraki isteğe taşınmaması gerekir. Statik değişkenler, singleton servisler, açık veritabanı işlemleri ve request’e bağlı nesneler incelenmelidir. Özellikle farklı müşterilere hizmet veren uygulamalarda durum sızıntısı yalnızca performans sorunu değil, veri gizliliği riskidir. Uyumlu framework entegrasyonu kullanılsa bile uygulamaya özel servislerin davranışı doğrulanır.
FrankenPHP mi PHP-FPM mi?
| İhtiyaç | Değerlendirme |
|---|---|
| Mevcut uygulamayı az değişiklikle işletmek | PHP-FPM’in bilinen süreç modeliyle devam etmek daha düşük riskli olabilir. |
| Yüksek uygulama başlangıç maliyeti | Worker mode için uyumluluk ve yük testi yapılır. |
| Tek pakette web sunucusu ve PHP | FrankenPHP dağıtımı sadeleştirebilir; eklenti gereksinimleri doğrulanır. |
| Ayrı Unix kullanıcılarıyla havuz işletmek | PHP-FPM pool modeli ile konteyner bazlı izolasyon karşılaştırılır. |
Bir PHP eklentisinin mevcut FPM ortamında çalışması, yeni runtime ve derleme seçenekleriyle otomatik uyumlu olduğu anlamına gelmez. PHP sürümü, thread-safety gereksinimleri ve native kütüphaneler test kapsamına alınmalıdır. Queue tüketicileri ve zamanlanmış işler de HTTP katmanından ayrı değerlendirilir.
Geçiş başarısını hangi metriklerle ölçeriz?
Aynı uygulama sürümü ve benzer kaynak sınırlarıyla iki ortam karşılaştırılır. Yalnızca boş bir endpoint üzerinden yüksek istek sayısı ölçmek yerine oturum açma, veri tabanlı listeleme, dosya yükleme ve hata akışları denenir. p95 gecikmesi, CPU, bellek büyümesi ve başarısız istek oranı birlikte değerlendirilir. Uzun süreli test, birkaç dakikalık testte görülmeyen bellek birikimini ortaya çıkarabilir.
Yayınlanan yeni kodun worker’lara ne zaman yansıyacağı ve eski worker’ların nasıl kapatılacağı deploy planının parçasıdır. Geri dönüşte önceki image, konfigürasyon ve veri tabanı uyumluluğu korunmalıdır. Mono’nun önerdiği yaklaşım, ölçülen faydayı doğrulamadan bütün PHP servislerini aynı anda taşımamak; önce sınırlı bir uygulamayla işletim tecrübesi oluşturmaktır.

