Merhaba, bugün laravel framework kullanan projelerde yavaşlıktan bahsedeceğim. Laravel Multiple Database slowly response neden sebep olduğu ile bilgi aktaracağım.
Çoklu Database
Bu kısımda bir konu hazırlığı yapıyorum, galera ile cluster kurulum ve yapılandırma adımları neler bir sonraki konuda detaylı olarak paylaşacağım. Bu kısımda yabancı olarak benim de yararlandığın kaynağa ise bu linkten ulaşabilirsiniz. Gayet güzel bir şekilde aktarmış olmak ile beraber ufak tefek açıklamaları paylaşacağım yazıda sizlere aktaracağım.
Neden çoklu veritabanı kullanılırız
Çoklu veritabanı kullanımının birden fazla cevabı yazılmış. Burada benimsediğim ise ; yoğun trafik, olası veritabanının cevap vermeme/çökmesi gibi sebepler ile bu yapıya geçmem.
Projenin yapacağı işe göre sizin ilerlemeniz önemli. Standart tek bir veritabanı ile projenize başladıktan sonrada çoklu veritabanı yapısına geçiş sağlayabilirsiniz. Bu kısımda önemli olan yazma işlemlerinin belirli bir veritabanında ( Master ) da olmasıdır.
Laravel Çoklu veritabanı yapısı
laravel multiple database projenizde yapacağınız ayarları size bir kaç şekilde aktaracağım, burada size response yavaş olan kısmı da ( yanlış kullanım diyelim ) bunu da paylaşacağım.
Multiple database ayarı ile başlayalım
Her birinde aynı yapılandırma olacak sadece yavaşlığa sebep olan kod bloğunu kalın olarak işaretleyeceğim. Değiştireceğiniz dosya yolu ve kod;
config > database.php
'read' => [
'host' => [
'xxx.xxx.xx.xx',
'xxx.xxx.xx.xx',
],
],
'write' => [
'host' => [
'xxx.xxx.xx.xx',
],
],
Yukarıda yaptığımız işlem okuma ve yazma işlemlerini ayırdım. Laravel config dosyamıza read / write kısmına aynı ip adresine yazabiliriz. Bunu yaptığımızda tek veritabanı üzerinde okuma/yazma yaptığımızı belirtmiş oluruz.
Performansı etkileyen ve çoklu veritabanın bir amacı olan hızlı çalışmayı etkileyen nedir? Burada asıl sorun aslın da laravel ile alakalı.
Projede yavaşlığa sebep olan kodumuz ne?
'read' => (config('app.location') == 'xx') ? [
'host' => [
'xxx.xxx.xx.xx',
'xxx.xx.xxx.xx',
],
] : [
'host' => [
'xxx.xx.xxx.xx',
'xx.xxx.xx.xx',
]
],
'write' => [
'host' => [
'xx.xxx.xx.xx',
],
],
Yukarıda dikkatinizi çekmek istediğim kısım config(‘app.location’) kısmı burada dosyamı cache yapmama rağmen çözümleme esnasında bir yavaşlama söz konusu olmaktadır.
ilk satırdaki yapıyı uyguladığım zaman 40GB database üzerinde cevap süresi aşağıdaki şekilde

İkinci sıradaki kod yapısını kullandığım zaman response süresi ise aşağıdaki gibidir.

Yukarıda kalın olarak işaretleme yaptığım yerde 2 saniyeye kadar fark etmektedir. Kodumu if else kısmını kullanmadan env kısmında okuma ve yazma yapacak kısımları belirterek çözüm üretebilirsiniz.
Umarım açıklayıcı olmuştur.