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

'3.0.x Sürümüne Ait Genel Bilgiler' forumunda benimo tarafından 2 Mayıs 2019 tarihinde açılan konu

  1. benimo

    benimo Yeni Üye

    Katılım:
    13 Mart 2019
    Mesaj:
    16
    Ödül Puanları:
    3
    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.
     
  2. muhammetali

    muhammetali Moderator Site Yetkilisi

    Katılım:
    14 Mart 2017
    Mesaj:
    69
    Ödül Puanları:
    18
    Cinsiyet:
    Erkek
    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.
     
    benimo bunu beğendi.
  3. benimo

    benimo Yeni Üye

    Katılım:
    13 Mart 2019
    Mesaj:
    16
    Ödül Puanları:
    3
    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.
     
    muhammetali bunu beğendi.
  4. muhammetali

    muhammetali Moderator Site Yetkilisi

    Katılım:
    14 Mart 2017
    Mesaj:
    69
    Ödül Puanları:
    18
    Cinsiyet:
    Erkek
    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 :)
     
    benimo bunu beğendi.
  5. benimo

    benimo Yeni Üye

    Katılım:
    13 Mart 2019
    Mesaj:
    16
    Ödül Puanları:
    3
    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
     
  6. muhammetali

    muhammetali Moderator Site Yetkilisi

    Katılım:
    14 Mart 2017
    Mesaj:
    69
    Ödül Puanları:
    18
    Cinsiyet:
    Erkek
    Aynı özellikler :) Aylık 400 tl.
     
  7. benimo

    benimo Yeni Üye

    Katılım:
    13 Mart 2019
    Mesaj:
    16
    Ödül Puanları:
    3
    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: 3 Mayıs 2019
  8. Admin

    Admin yilmaz70 Site Yetkilisi

    Katılım:
    13 Mart 2017
    Mesaj:
    189
    Ödül Puanları:
    28
    Cinsiyet:
    Erkek
    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 :)
     
  9. benimo

    benimo Yeni Üye

    Katılım:
    13 Mart 2019
    Mesaj:
    16
    Ödül Puanları:
    3
    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: 4 Mayıs 2019
  10. Admin

    Admin yilmaz70 Site Yetkilisi

    Katılım:
    13 Mart 2017
    Mesaj:
    189
    Ödül Puanları:
    28
    Cinsiyet:
    Erkek
    ''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_PORT80
    RewriteRule 
    ^(.*)$ https://www.example.com/$1 [R,L]
    Mesela yukarıdaki kod ssl yönlendirmesidir, mutlaka yerleştirilmelidir.

    Kolay gelsin :)