Laravel izinleri, uygulamanız ölçeklenmeye başladığında bazı sorunlar yaratabilir.
Rol/izin kontrollerini yoğun bir şekilde kullanıyorsanız, veritabanınıza düşündüğünüzden daha fazla erişiyor olabilirsiniz.
Bu makalede, varsayılan davranış ile Redis tabanlı bir yaklaşımı karşılaştıran basit bir benchmark göstereceğim.
Problem
Pek çok Laravel uygulamasında, izin kontrolleri şu şekilde görünmektedir:
$user->can(‘edit-post’);
Güvenli görünüyor, değil mi?
Fakat arka planda, bu birden fazla veritabanı sorgusu tetikleyebilir, özellikle de:
- Birçok kullanıcı varsa
- Karmaşık rol/izin yapıları varsa
- Sık sık yetkilendirme kontrolleri yapılıyorsa
Küçük ölçeklerde sorun yok.
Ancak büyük ölçeklerde… hızlıca birikiyor.
Benchmark Kurulumu
Bunu test etmek için, şunları karşılaştıran basit bir benchmark oluşturduğum:
- Varsayılan Laravel izin davranışı
- Redis önbellekli izinler
Benchmark deposu: https://github.com/scabarcas17/laravel-permissions-redis-benchmark
Fikir basitti:
- Birden fazla izin kontrolü çalıştırmak
- Veritabanı sorgularını ölçmek
- Performansı karşılaştırmak
Sonuçlar
Varsayılan Davranış
- Her izin kontrolü için birden fazla veritabanı sorgusu
- Aynı izinler için tekrar eden sorgular
- Yüksek trafikte artan yük
Redis ile
- İzinler Redis’te önbelleğe alındı
- İlk yüklemeden sonra neredeyse sıfır veritabanı sorgusu
- Çok daha hızlı yanıt süreleri
Ana Fikir
En büyük sorun ilk sorgu değil…
Aynı izinler için tekrar eden sorgular.
İzinleri Redis’te önbelleğe alarak, gereksiz veritabanı erişimini ortadan kaldırıyoruz.
Çözüm
Bu yaklaşımı gerçek bir senaryoda test etmek için, küçük bir paket oluşturdum: https://packagist.org/packages/scabarcas/laravel-permissions-redis
GitHub deposu:
https://github.com/scabarcas17/laravel-permissions-redis
Bu paket, Laravel izinlerinin üzerine bir Redis katmanı ekleyerek gereksiz sorguları azaltır.
Ne Zaman Önemlidir?
Bu yaklaşım, uygulamanızda:
- Yüksek trafik varsa
- Her istekte birçok izin kontrolü varsa
- Karmaşık rol/izin yapıları varsa
- Yetkilendirmeye bağlı performans darboğazları varsa
Son Düşünceler
Laravel’in varsayılan davranışı sağlamdır ve çoğu uygulama için iyi çalışır.
Ancak ölçeklenirken performans sorunları yaşıyorsanız, izinleri önbelleğe almak gerçekten fark yaratabilir.
Bu benchmark sadece başlangıç noktasıdır—ancak tekrar eden veritabanı sorgularını azaltmanın etkisini net bir şekilde göstermektedir.
Geri Bildirim
Görüşlerinizi duymak isterim:
- İzinler ile ilgili performans sorunları yaşadınız mı?
- Uygulamalarınızda önbellekleme işlemlerini nasıl yönetiyorsunuz?
Kaynak: Orijinal Makale


