Site ve Veritabanı ayrı sunucuya ayırıp nasıl çalışır?

  • Konbuyu başlatan benimo
  • Başlangıç tarihi
Hoşgeldiniz
Çözümler ve hizmetlerimizden yararlanmak için kayıt olabilirsiniz.
Kayıt Ol

benimo

Üye
13 Mar 2019
18
3
44
Merhaba.

1.ci VDS sunucu: Opencart 3.x Site yüklü olacak
2.ci VDS sunucu: Mysql veritabanı bu sunucuda olacak

Siteye XML ile ürün çekilecek diyelim. Hem ürün çekilecek o sırada hem müşteriler siteyi ziyaret edecek. Hem sipariş verecekler derken siteyi kasacak.

Hem ilerde müşteri sayısı ve ürünlerin fazla olması sorguların fazlalığı derken rahatlaması açısından 2.ci sunucuya MYSQL ile ayırmayı düşünüyorum. Apache ve Nginx rahatlamış olacak. bu şekilde nasıl yapılır.
 
muhammetali

muhammetali

Administrator
Yönetici
14 Mar 2017
79
44
Karaman
Hocam algoritma hatası yapıyorsunuz, veritabanını siteden ayırırsanız performans tamamen düşer. Birinci sunucuyu apache ve mysql, 2.sunucuyu ise sadece resimleri çekmede kullanırsanız ozaman performansı artırabilirsiniz.
Yok illaki ben öyle yapacağım diyorsanız nasıl yapıldığını ben bilmiyorum. Hiç veritabanının ayrı olduğu bir sunucu görmedim. Çok saçma olur.
 
  • Like
Tepkiler: benimo

benimo

Üye
13 Mar 2019
18
3
44
Hocam algoritma hatası yapıyorsunuz, veritabanını siteden ayırırsanız performans tamamen düşer. Birinci sunucuyu apache ve mysql, 2.sunucuyu ise sadece resimleri çekmede kullanırsanız ozaman performansı artırabilirsiniz.
Yok illaki ben öyle yapacağım diyorsanız nasıl yapıldığını ben bilmiyorum. Hiç veritabanının ayrı olduğu bir sunucu görmedim. Çok saçma olur.
Muhammet hocam bu benim düşünceydi. Siz öyle diyor iseniz öyle olsun. bende hiç görmedim ama burdan yazıp bilgi almak istedim. XML'den 60 bin ürün çekmek istediğimde hem ziyaretçiler olsun, ürünleri siteye atan sorgu olsun derken sunucu dayanmıyor. Bu durumu aşamıyorum. "502 Bad Gateway nginx" hatası veriyor. Tüm değerleri (limitleri) yükselttim yine aynı durum oluyor.
 
  • Like
Tepkiler: muhammetali
muhammetali

muhammetali

Administrator
Yönetici
14 Mar 2017
79
44
Karaman
Hocam xml yüklemesini mecburen gece yani kullanıcıların az olduğu zamana ayarlayacaksınız. Bizim 150.000 ürünü olan müşterilerimiz oldu, hiç böyle bir sorun yaşamadık, tabiki performansta düşüşler olabilir ama "502 Bad Gateway nginx" hatası ile karşılaşmadık. Sunucunuzun özellikleri yetersiz geliyor olabilir. Bence iki tane sunucu yerine halihazırda olan sunucunuzun ram ve çekirdeğini yükseltmeniz daha mantıklı olur.

Ürünleri xml den sisteme ilk çekerken sunucu çok zorlanması normaldir, ama aynı xml yi ikinci kez çekeceğinde sunucu rahatlar, çünki sadece güncelleme yapar, değişmeyen ürünleri es geçer xml ye yeni eklenen ve güncellenen ürünleri yazar, bu işlemciyi fazla yormaz.
Ben sizin sunucunuzun kaynaklarının yetersiz geldiğiniz düşünüyorum. 60bin ürün olan bir sunucuda asgari 4gb ram, 2 core işlemci olması gerekir. Tabii bu değerler sitenin anlık kullanıcı sayısına göre ilerleyen zamanlarda yetersiz gelebilir, sitenin anlık kullanıcı sayısı arttıkça sunucunun kaynaklarının da artırılması gerekir.

Kafanıza takılan soruları sormaktan çekinmeyin, tecrübelerimi memnuniyetle paylaşırım :)
 
  • Like
Tepkiler: benimo

benimo

Üye
13 Mar 2019
18
3
44
Hocam xml yüklemesini mecburen gece yani kullanıcıların az olduğu zamana ayarlayacaksınız. Bizim 150.000 ürünü olan müşterilerimiz oldu, hiç böyle bir sorun yaşamadık, tabiki performansta düşüşler olabilir ama "502 Bad Gateway nginx" hatası ile karşılaşmadık. Sunucunuzun özellikleri yetersiz geliyor olabilir. Bence iki tane sunucu yerine halihazırda olan sunucunuzun ram ve çekirdeğini yükseltmeniz daha mantıklı olur.

Ürünleri xml den sisteme ilk çekerken sunucu çok zorlanması normaldir, ama aynı xml yi ikinci kez çekeceğinde sunucu rahatlar, çünki sadece güncelleme yapar, değişmeyen ürünleri es geçer xml ye yeni eklenen ve güncellenen ürünleri yazar, bu işlemciyi fazla yormaz.
Ben sizin sunucunuzun kaynaklarının yetersiz geldiğiniz düşünüyorum. 60bin ürün olan bir sunucuda asgari 4gb ram, 2 core işlemci olması gerekir. Tabii bu değerler sitenin anlık kullanıcı sayısına göre ilerleyen zamanlarda yetersiz gelebilir, sitenin anlık kullanıcı sayısı arttıkça sunucunun kaynaklarının da artırılması gerekir.

Kafanıza takılan soruları sormaktan çekinmeyin, tecrübelerimi memnuniyetle paylaşırım :)

Muhammet hocam ne kadar güzel yazdınız. Çok açık ve detaylı bilgi verdiniz. Yeni projemiz. Dediğiniz gibi ilk ürün çekmede zahmetli sonrasında sadece güncelleme oluyor. Gece güncellemesini yapıyoruz.

Benim 4Cpu + 8 GB Ram + 80 GB SSD
Sizin 150bin olan müşterinin sunucu hangi özelliklerde. Paylaşırmısınız. Ayrıca ne kadar ücrete sağladınız. paylaşırsanız seviniim
 

benimo

Üye
13 Mar 2019
18
3
44
Aynı özellikler :) Aylık 400 tl.
aynı özellikler derken 150bin ürünlü olan sunucu mu 4cpu'da çalışıyor. Bu şekilde ise bu kadar ürüne bence özellikler çok düşük ama süper çalışıyor derim. Fazla özelliklerde ise merak ederim.
Ürünler arttı. Şuan ki sunucu durumundan paylaşım:

Sunucu Durumu:
Bellek kullanımı: https://prnt.sc/njsf7a
Ürünler: http://prntscr.com/njsffz
Kategoriler: http://prntscr.com/njsfqj

Site Performansı:
Google PageSpeed Insights : http://prntscr.com/njshd3
Gtmetrix: http://prntscr.com/njsj8j
Pingdom: http://prntscr.com/njsm4p


Bu kadar ürüne sunucu durumunu paylaştım. sanırım VDS sunucusunu biraz arttırmam gerekecek

EDİT: Siteyi gizlemem gerek. Şuan henüz internete açılmadı sahibi istemiyor. Ayrıca altyapısının opencart olduğunun bilinmesini istenmiyor.
 
Son düzenleme:
Admin

Admin

yilmaz70
Yönetici
13 Mar 2017
207
49
İstanbul
wpyukle.com
Site performansı analizlerini yaparken Google Pagespeed baz almamanızı öneririm.

Gtmetrix değerlerine baktığımızda puanlar iyi ancak hız kötü görünüyor. Gtmetrix analizinde hız baz alınmaz ancak sizdeki total page 1.29 MB iken en fazla 3 sn vermeli idi. Genel hız ortalaması bu şekilde çıkar Gtmetrix analizinde.

Pingdom analizine baktığımızda ise aynı şekilde hız iyi değil gibi. Burada da 1.5 sn civarı vermeli idi sayfa boyutuna göre.

Aslında öncelikli olan lokasyon seçiminin doğru yapılması gerektiğidir. Site Türkiye hedef olduğunda ya Türkiye lokasyon ya da Avrupa lokasyonda barındırmalısınız. Türkiye lokasyonda barındırma hizmeti veren iyi firmalarımız var elbette. Ancak internet alt yapımız maalesef pek iyi değil. Bu yüzden Avrupa lokasyon daha caziptir. Avrupa lokasyon Türkiye lokasyona göre 30 ila 60 ms geç tepkime verir ve zararı yoktur asla.

Sizin hangi lokasyonda barındırdırdığınızı bilemiyorum ancak genel olarak Amerika lokasyon sunucuların ucuz olması nedeni ile tercih edildiğini görüyoruz çoğunlukla. Bu da Türkiye hedefli sitelerde açılış hızını olumsuz etkiliyor maalesef. Bir de Cloudflare kullanımı daha da olumsuz etki yaratıyor. Bunu kullanıcıların bilgilenmesi açısından belirtmekte yarar var diye yazıyorum.

Webpagetest sitesinde İstanbul veya Ankara lokasyonda açılış hızı analizi yaparsanız daha netleşecektir. Ortalama 3-4 sn açılış hızı yüklü bir site için idealdir. Eğer daha fazla bir süre veriyor ise o zaman problem yaratan unsurları incelemek gerekir.

Opencart sitelerde fazla ürün yanı sıra fazla sayıda kategori mevcut olması sorgu tüketimini daha da arttırmaktadır.

*Bu yüzden daima Mağaza Genel Ayarlar bölümünde yer alan Kategori Ürün Sayısı HAYIR olarak işaretlenmelidir.

*Mutlaka ''Seo Url'' kullanılmalıdır.

*Slide ve bannerlar da kullanılan görseller daima mümkün olduğunca (1900x700 yerine 1200x400 gibi) ayarlanmalı ve optimize edilerek siteye yüklenmelidir. Kullanılan Logo aynı şekilde mümkün olduğunca küçük ebatlarda olmalı ve optimize edilerek yüklenmeli.

*Ürünlerde kullanılan resimlerin aynı şekilde optimize edilmesi gereklidir. Ancak bu xml yapısı ile gelen resimlerde mümkün olmuyor. Bu konu ile alakalı @muhammetali arkadaşımızın bir modül çalışması var belki yardımcı olabilir.

*Bir de tema seçimi önem arz ediyor. Biz her zaman Journal tema tavsiye ediyoruz. Performans açısından son derece iyidir. Mesela Magentech temaları maalesef sıkıntılıdır ve bir çok problem çıkmaktadır, bu da yüksek sorgu tüketimine neden olmaktadır.

*htaccess dosyası iyi düzenlenmelidir.

Şu an aklıma gelenleri aktarmaya çalıştım sizlere. Bahsettiğim konular sunucu özellikleri dışındadır, sunucu özellikleri iyi olduğu halde performans açsından problem yaşanmaması adına yapılması gerekenleri yukarıda belirttim.

Özel olarak aklınıza takılan konular var ise Muhammetali arkadaşımıza özel mesaj ile ulaşırsanız daha sağlıklı olacaktır. Siteyi görmeden tahmini fikir yürütmek doğru bir yaklaşım olmaz çünkü.

Kolay gelsin :)
 

benimo

Üye
13 Mar 2019
18
3
44
Yahu ben nasıl bir siteye geldim böyle. Bu nasıl bir açıklamadır. Üşenmeden yazdınız sayın adminim. İnşallah ki okuyanlar da dolu dolu faydalanır.

Adminim journal tema demişken sorayım. "Database Indexes" kısmındaki tüm tabloları onay butonuna tıklayacakmıyız. Tema yapan ile iletişime geçtim. yanıtı türkçeye çevirdim pek anlayamadım.
http://prnt.sc/nk8txw

Diğer konuda
.htaccess kod içeriğim aşağıdaki gibidir. burada eksiğimiz varmı acaba. yada ne eklenir ne çıkartılır?

Kod:
# STARTNITRO
ExpiresActive On
#CSS JS XML TXT - 1 WEEK
<FilesMatch "\.(xml|txt|css|js)$">
Header set Cache-Control "max-age=604800, public"
ExpiresDefault "access plus 1 week"
</FilesMatch>
#JPG JPEG PNG GIF SWF SVG - 1 MONTH
<FilesMatch "\.(jpg|jpeg|png|gif|swf|svg|JPG|JPEG|PNG|GIF|SWF|SVG)$">
Header set Cache-Control "max-age=2592000, public"
ExpiresDefault "access plus 1 month"
Header set Last-Modified "Wed, 05 Jun 2009 06:40:46 GMT"
</FilesMatch>
#OTF WOFF TTF ICO PDF FLV - 1 MONTH
<FilesMatch "\.(otf|ico|pdf|flv|woff|ttf)$">
Header set Cache-Control "max-age=2592000, public"
ExpiresDefault "access plus 1 month"
</FilesMatch>
# ENDNITRO
# STARTCOMPRESSNITRO
RewriteEngine On
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(\/?(catalog).+)\.css$ catalog/view/theme/assets//style.php?l=4&p=$1&c=604800 [NC,L]
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(\/?(catalog).+)\.js$ catalog/view/theme/assets//script.php?l=4&p=$1&c=604800 [NC,L]
AddType image/svg+xml .svg
AddOutputFilterByType DEFLATE image/svg+xml
AddType application/x-font-woff .woff
AddOutputFilterByType DEFLATE application/x-font-woff
# ENDCOMPRESSNITRO
# 1.To use URL Alias you need to be running apache with mod_rewrite enabled.
# 2. In your opencart directory rename htaccess.txt to .htaccess.
# For any support issues please visit: http://www.opencart.com
Options +FollowSymlinks
# Prevent Directoy listing
Options -Indexes
# Prevent Direct Access to files
<FilesMatch "(?i)((\.tpl|\.ini|\.log))"> Require all denied
## For apache 2.2 and older, replace "Require all denied" with these two lines :
# Order deny,allow
# Deny from all
</FilesMatch>
# SEO URL Settings
RewriteEngine On
# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/
RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
</IfModule>
## EXPIRES CACHING ##
<ifModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 seconds" ExpiresByType text/html "access plus 1 seconds" ExpiresByType image/gif "access plus 2592000 seconds" ExpiresByType image/jpg "access plus 2592000 seconds" ExpiresByType image/jpeg "access plus 2592000 seconds" ExpiresByType image/png "access plus 2592000 seconds" ExpiresByType text/css "access plus 604800 seconds" ExpiresByType text/javascript "access plus 216000 seconds" ExpiresByType application/x-javascript "access plus 216000 seconds"
</ifModule>
## EXPIRES CACHING ##
### Additional Settings that may need to be enabled for some servers
### Uncomment the commands by removing the # sign in front of it.
### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.
# 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
# php_flag register_globals off
# 2. If your cart has magic quotes enabled, This may work to disable it:
# php_flag magic_quotes_gpc Off
# 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
# php_value upload_max_filesize 999M
# 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value post_max_size 999M
# 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value max_execution_time 200
# 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value max_input_time 200
# 7. disable open_basedir limitations
# php_admin_value open_basedir none
 
Son düzenleme:
Admin

Admin

yilmaz70
Yönetici
13 Mar 2017
207
49
İstanbul
wpyukle.com
''database indexes'' ile bir işiniz yok. Orası aynen kalsın.

Anladığım kadarı ile Nitro cache kullanıyorsunuz, yanlış bir seçimdir. Zamanla veritabanında hasarlara neden olur.
Maalesef bilinçsiz kişilerin pazarlaması ile bu modulü kullanarak zarar gören bir çok site mevcuttur.

Opencart yazılımı için cache modülü kullanmaya gerek yoktur. Ve özellikle Opencart 3 sürümünde zaten cache mevcuttur. Üstelik Journal temanın kendine has cache modülü zaten var :) Sitede değişiklik yapılmadığı zamanlar Journal cache açık olabilir ancak değişiklik yapılma dönemlerinde daima cache pasif durumda olmalıdır. Ve Journal tema üzerinde değişiklik yapıldığında daima cache temizlenmelidir.

Size daha önce bahsettiğim gibi kullanılan görsellerin optimize edilmesi fazla yük olmamasını sağlar zaten. Opencart yazılımı binlerce ürünü rahatlıkla kaldırabilir performans açısından.

Burada önemli olan ana sayfada slide kullanımında dikkatle hareket etmek ve bannerları aynı şekilde mümkün olduğunca düşük Kb görseller ile oluşturmaktır. Kategori sayfaları da aynı şekilde dizayn edilmelidir.


htaccess dosyasına gelecek olursak, her sunucun kendine has tepkime durumu vardır. Bu yüzden her sunucuda farklı kodlar denemek gerekebiliyor. Deneme/yanılma yöntemini korkmadan yapabilirsiniz. Önemli olan site yedeğini önceden almaktır.

htaccess dosyasına eklenen kod sonrasında Pingdom ve Gtmetrix analiz sitelerine bakarak gelişme olup olmadığını görebilirsiniz.

PHP:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Mesela yukarıdaki kod ssl yönlendirmesidir, mutlaka yerleştirilmelidir.

Kolay gelsin :)