Laravel uygulamalarında karşılaşılan en yaygın performans sorunlarından biri, roller ve izinlerle ilgilidir.
Başlangıçta her şey sorunsuz çalışırken, uygulama büyüdükçe yetkilendirme kontrolleri daha sık hale gelir ve aniden veritabanınız, izinleri doğrulamak için büyük sayıda tekrarlayan sorgu işlemek zorunda kalır.
Problem
Caching stratejileri kullanılsa bile, birçok uygulama hala:
- İzin kontrolleri için veritabanına sıkça erişiyor
- Her istekte yetkilendirme mantığını yeniden hesaplıyor
- Yüksek trafik senaryolarında zorlanıyor
Bu durum, aşağıdaki gibi sistemlerde özellikle belirgin hale gelir:
- Karmaşık rol yapıları
- Birden fazla middleware kontrolü
- Yüksek trafik
Fikir
Veritabanına (caching ile bile) güvenmek yerine, farklı bir yaklaşımı keşfettim:
Rolleri ve izinleri tamamen Redis’e taşıma
Amaç:
- Yetkilendirmeyi bellek içinde tutmak
- Tekrarlayan sorguları ortadan kaldırmak
- Cevap sürelerini iyileştirmek
Yaklaşım
Temel fikir basit:
- Rolleri ve izinleri Redis’te saklamak
- Tüm yetkilendirme kontrollerini bellekten çözmek
- İstek yaşam döngüsü sırasında veritabanına erişimi önlemek
Bu, izin kontrollerinin:
- Daha hızlı
- Daha ölçeklenebilir
- Yük altında daha tahmin edilebilir olmasını sağlar
Sonuç
Bunun etrafında bir paket oluşturdum:
https://github.com/scabarcas17/laravel-permissions-redis
https://packagist.org/packages/scabarcas/laravel-permissions-redis
Bu paket, Laravel ile doğal bir şekilde entegre edilmek üzere tasarlanmıştır ve tekrarlayan veritabanı sorgularını Redis tabanlı çözümle değiştirmektedir.
Bu Ne Zaman Anlamlıdır?
Bu yaklaşım özellikle şu durumlarda faydalıdır:
- Uygulamanız sık sık izin kontrolleri yapıyorsa
- Ölçeklenme aşamasındaysanız ve daha iyi bir performansa ihtiyacınız varsa
- Veritabanı yükünü azaltmak istiyorsanız
Son Düşünceler
Laravel sorun değil — mimari sorun.
Prefizasyon gibi küçük kararlar, sisteminiz büyüdükçe büyük bir etki yaratabilir.
Bu problemi nasıl çözdüğünüzü veya bu yaklaşım hakkında geri bildiriminizi duymak isterim.
Kaynak: Orijinal Makale


