Memcached kasutamine

Memcached

Kui veebilehe või e-poe toimimine sõltub suurel määral andmebaasipäringutest, siis võib suurema lehe külastajate hulga juures nende päringute tegemine muutuda andmebaasiserverile nii koormavaks, et päringutele tagastatava vastuse aeg venib pikaks. See omakorda tähendab, et veebilahenduse laadimisaeg on pikk ja klientidele avaneb leht aeglaselt.

Populaarsemad sisuhaldussüsteemid on arendatud selliselt, et osa andmeid salvestatakse teatud perioodiks vahemällu (cache), kust neid järgmistel kordadel otse päritakse, ilma et peaks neid algsest allikast igal lehe laadimiskorral uuesti kokku panema. Tavaliselt salvestatakse andmed kas kettale mingisse faili või andmebaasi, samas tehakse ka siis ikkagi päringuid andmebaasi vastu või siis loetakse ja kirjutatakse andmeid failisüsteemis – mõlemad on memcachediga võrreldes ajakulukamad.

Memcachedi puhul salvestatakse sellised andmed otse serveri operatiivmällu (RAM), kuhu andmete kirjutamine ja kust andmete lugemine on märkimisväärselt kiirem. Samas tuleb teada, et memcached on mõeldud eelkõige just ajutiste andmete salvestamiseks. Operatiivmälus hoitakse andmeid vaid teatud aja jooksul. Näiteks kui operatiivmälu hakkab otsa saama ja vaja on salvestada uusi andmeid, siis hakatakse eelnevalt operatiivmällu paigutatud andmeid hülgama, et uutele ruumi teha. Kui memcached serverile taaskäivitamine teha, siis lähevad kõik sinna salvestatud andmed kaotsi. Seetõttu ei ole see sobiv püsivalt andmete jäädvustamiseks, küll aga sobib vahemäluks. Kui memcachedist soovitud andmeid ei leita, siis laetakse need tavapäraste päringutega (samal viisil, nagu memcached poleks kasutusel).

Kas mul on seda vaja?

Nagu eelnevalt välja tõime, on memcached kasutamine vajalik eelkõige veebilehtedel, millel on suur külastatavus ja kus loetakse palju andmeid andmebaasist, nagu näiteks uudisteportaalid või populaarsed e-poed. 

Tavalise ettevõtte kodulehe puhul, mida külastatakse mõnisada korda päevas, ei pruugi isegi laadimiskiiruse osas vahet tähele panna ja enamike lehtede jaoks piisab staatilise vahemälu genereerimisest (uuri selle kohta oma veebiarendajalt).

Üldiselt on memcached kasutusel vaid kallimatel pilve- või privaatserveritel, kus kogu tarkvara on võimalik oma käe järgi ise seadistada.

Kuidas seda kasutama hakata?

Memcachedi kasutuselevõtmiseks tuleb serveri poolel jooksutada memcached deemonit (programmi, mis teostab teatud ettemääratud operatsioone kindlate ajavahemike tagant või vastuseks mingitele sündmustele) ja memcached laiendust PHP jaoks. Aktiveerimiseks sisene iseteenindusse, vali töölaualt domeen ning valik "Andmebaasid". Nüüd vali "Memcached" ning vajuta nupule "Aktiveeri" (vajalik “Pluss” pakett).

Teiseks on vaja oma veebileht seadistada memcachedi kasutama, mida saab teha Sinu veebiarendaja. Kui Sul ei ole oma isiklikku veebiarendajat kuskilt võtta, siis võid abi paluda ka mõnelt meie soovitatud partnerilt, kes on välja toodud meie partnerite lehel.

Veebilehel memcached toe seadistamine sõltub kasutusel olevast sisuhaldussüsteemist.

Käime läbi tuntumad sisuhaldussüsteemid ja vaatame, kuidas memcachedi kasutama hakata.

WordPress

Vaikimisi paigaldatud WordPress 4.2.2 koos twentysixteen teemaga teeb avalehel andmebaasi vastu 24 päringut.

Proovime memcachedi toe lisamiseks pluginat https://wordpress.org/plugins/memcached-is-your-friend/ . Pärast plugina paigaldamist tuleb see aktiveerida ja lisada mõningad read WordPressi wp-config.php faili, näiteks peale define('DB_COLLATE', ''); rida:

$memcached_servers = array(

        'default' => array(

                '/www/apache/domains/www.domeen.ee/tmp/memcached.sock:0'

        )

);

Peale memcachedi seadistamist tehakse avalehel 6 andmebaasipäringut.

Drupal

Drupalil on memcached võimaluse aktiveerimiseks loodud eraldi moodul, mille saab alla laadida lehelt https://www.drupal.org/project/memcache. Pärast mooduli allalaadimist paki see lahti ja paiguta kataloog “memcache” serveris oma lehe sites/all/modules/ kataloogi. Seejärel ava drupali administreerimisliides ning sealt leht Modules. Kui tegid kõik õigesti, siis peaksid jõudluse kategooria all nägema kahte uut võimalust – Memcache ja Memcache Admin.

sites/all/modules/memcache/README.txt fail sisaldab täpseid samme ja võimalusi memcachedi seadistamiseks, neid ei hakka me siin täpsemalt lahkama, mida üks või teine võimalus teeb ja milline oleks kõige parem seadistusviis. See sõltub Sinu lehekülje eripäradest, mistõttu jätame selle Sinu arendaja hooleks välja uurida, kuid sisuliselt tuleb muuta sites/default/settings.php faili ja lisada sinna memcached sätted, näiteks:

// lubame memcached cachemise toe

$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';

 

// ütleme drupalile, et vaikimisi kasutatakse edaspidi memcachedi MySQLi asemel

$conf['cache_default_class'] = 'MemCacheDrupal';

 

// seadistame memcachedi asukoha – see asub

$conf['memcache_servers'] = array(

  'unix:///www/apache/domains/www.test-veeb.ee/tmp/memcached.sock' => 'default',

  'memcache_bins' => array(

   'cache_page'    => 'default',

   'cache_menu'    => 'default',

   'cache_filter'  => 'default',

   'cache_views'   => 'default',

   'cache_content' => 'default',

   'cache_form'    => 'default',

   'session'       => 'default',

   'users'         => 'default',

 ),

);

 

// juhul kui cachemiseks kasutatakse ka authcache moodulit

$conf['cache_backends'][] = 'sites/all/modules/authcache/authcache.cache.inc';

$conf['cache_backends'][] = 'sites/all/modules/authcache/modules/authcache_builtin/authcache_builtin.cache.inc';

 

// salvesta vormide andmed andmebaasi, sest see peab olema püsivalt salvestatud info

$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';

$conf['cache_class_cache_authcache_key'] = 'MemCacheDrupal';

$conf['authcache_builtin_cache_without_database'] = TRUE;

 

// salvesta ka lehtede vahemälu memcachedi (aktiveerimiseks eemalda kommentaar)

// $conf['cache_class_cache_page'] = 'MemCacheDrupal';

Kui seadistus olemas ja Memcache moodul aktiivne, siis hakkab veebileht andmeid muutmällu salvestama ja sealt lugema, mille tagajärjel väheneb andmebaasi vastu tehtav päringute arv.

Testides täiesti tühja värskelt installeeritud Drupal 7 lehte, tehakse andmebaasi vastu 12 päringut. Peale memcachedi aktiveerimist on päringute arv aga 8. Võib tunduda, et see pole just mingi märkimisväärne võit, kuid võrdleme seda näitajat ühe mahuka ja andmebaasist tihedalt sõltuva uudisteportaaliga.

Avaleht:

cachemiseta päringuid: 2263

cachemisega päringuid: 457

memcachega: 13

Uudised:

cachemiseta päringuid: 1430

cachemisega päringuid: 275

memcachega: 12

Uudis:

cachemiseta päringuid: 2096

cachemisega päringuid: 443

memcachega: 44

Selle lehe puhul võib öelda, et ilma memcachedita ja Drupali vaikimisi vahemälu seadistusi kasutades tehakse andmebaasi vastu igal lehe laadimisel 250-500 päringut. Kui ühel ja samal ajal juhtub lehelt uudiseid lugema palju külastajaid, siis satub andmebaas väga suure koormuse alla ja leht muutub aeglaseks. Memcachedi kasutamine viib andmebaasi vastu tehtavate päringute arvu aga nii madalaks, et leht toimib kärmelt ka suurema koormusega.

Veendu, et memcached toimib, vaadates üldist memcachedi statistikat lehel Reports -> Memcache statistics. Selleks peab moodul Memcached Admin olema aktiveeritud.

Kui statistikas on näha “Gets” ja “Sets” numbrid, siis on leht hakanud memcachedi rakendama.

Vahelehe põhise detailse statistika kuvamiseks mine Configuration -> System -> Memcache ja lisa linnuke “Show memcache statistics at the bottom of each page” ette.

Joomla

Joomlas on memcached tugi eksperimentaalne, vähemasti meie poolt testitud 3.5 versioonis. Kuid toome välja ka selle seadistamise, juhuks kui keegi tahab testida või on mõnel varasemal versioonil memcached tugi stabiilselt toetatud. Sealjuures tuleb arvestada, et Joomla eeldab memcachedi serverit aadressi ja pordiga. Meil jookseb memcached üle UNIX socketi ehk seadistustes tuleb määrata hostiks aadressi asemel failitee socketini kujul /www/apache/domains/www.domeen.ee/tmp/memcached.sock ja pordiks 0. Võimalik, et varasemad versioonid ei lase sellist seadistust kasutada, Joomla 3.5-ga see hetkel aga toimib.

Seadistused saab lisada otse configuration.php faili, muutes ja/või lisades sinna read:

public $memcache_persist = '1';

public $memcache_compress = '0';

public $memcached_compress = '0';

public $memcached_server_host = '/www/apache/domains/www.domeen.ee/tmp/memcached.sock';

public $memcached_server_port = '0';

public $session_handler = 'memcached';

public $session_memcached_server_host = '/www/apache/domains/www.domeen.ee/tmp/memcached.sock';

public $session_memcached_server_port = '0';

või Joomla administreerimisliideses System -> Global Configuration -> System.

Kasutades Debug System seadistust, tekitab Joomla iga lehe lõppu statistika, kust on võimalik vaadata, mitu päringut andmebaasi vastu tehti. Meie katsetus Joomla 3.5 värskelt installitud testsisuga teeb avalehel 24 andmebaasipäringut, memcachedi seadistamise järel enamjaolt 5.

Magento

Testime memcachet Magento 2.0.2 näidissisuga muutmata versiooni peal. Avalehe esimesel laadimisel tehakse andmebaasi vastu 669 andmebaasipäringut, järgmisel laadimisel vaid 2. Seega teeb Magento enda sisemine vahemälu päris head tööd.

Magento sessioonide infot saab seadistada salvestama kas failisüsteemi, andmebaasi või memcachedi. Sessioon on kasutajapõhine info, mida serveri poolel salvestatakse. Siia alla kuuluvad näiteks ostukorvi lisatud tooted, mis lehte uuesti külastades endiselt ostukorvis alles on. Mida suurem on lehe külastajate arv, seda suuremat rolli hakkab mängima see, kuidas sessioone salvestatakse. Kuna failisüsteem ja andmebaas on nii-öelda aeglased vahemälud, siis tasub nende asemel kaaluda memcachedi kasutuselevõtmist.

Memcachedi kasutamiseks tuleb muuta app/etc/env.php faili ja seadistada seal session osa. See on seal ilmselt kujul:

'session' =>

    array (

    'save' => 'files',

),

ja tuleks asendada sellega:

'session' =>

  array (

    'save' => 'memcached',

    'save_path' => '/www/apache/domains/www.domeen.ee/tmp/memcached.sock:0',

  ),

kus /www/apache/domains/www.domeen.ee/tmp/memcached.sock tuleks asendada Sulle veebirebase poolt edastatud teekonnaga.

Seejärel on vaja tühjendada Magento vahemälu, tühjendades kataloogid var/cache , var/page_cache ja var/session.

Vanemates Magento versioonides käib seadistamine app/etc/local.xml kaudu, kuhu tuleks panna teekond koos unix:// eesliitega:

<session_save><![CDATA[memcache]]></session_save>

<session_save_path>

<![CDATA[unix:///www/apache/domains/www.domeen.ee/tmp/memcached.sock?persistent=1&weight=2&timeout=10&retry_interval=10]]>

</session_save_path>

Prestashop

Testime Prestashop 1.6.1.4-ja. Prestashopis on olemas profileerimise funktsioon ehk võimalus sisse lülitada koodi analüüsimine, mille järel lehe lõppu kuvatakse erinevat statistikat koodi poolt tehtud toimingute kohta, sealhulgas andmebaasi vastu tehtud päringute arvu. Selle saab aktiveerida, muutes failis config/defines.inc.php rea:

define('_PS_DEBUG_PROFILING_', false);

selliseks:

define('_PS_DEBUG_PROFILING_', true);

Vaikimisi paigaldatud Prestashopi avalehel logitakse igal lehe laadimisel 58 andmebaasi vastu tehtud päringut.

Prestashop toetab memcachedi ainult TCP pordi kaudu, kuid meie võimaldame memcachedi kasutamist UNIX socketi kaudu. Selleks, et Prestashopis oleks võimalik seadistada memcachedi kasutamine läbi UNIXi socketi, tuleb teha mõningad koodimuudatused failis controllers/admin/AdminPerformanceController.php. 

Juhime tähelepanu, et sisuhalduse enda koodi muutes võib tekkida olukord, kus hilisema Prestashopi uuendamise käigus tehtud muudatused üle kirjutatakse ja memcachedi enam ei kasutata. Siin peaks iga arendaja iseseisvalt uurima Prestashopi võimalusi ametliku koodi laiendamise viisi osas ja võimalusel Prestashopi enda koodi funktsionaalsuse sel viisil muudatustega üle kirjutama.

Vajalikke muudatusi saab vaadata siit.

Igaks juhuks ka pilt, kui eelnev link ei peaks mingil põhjusel toimima.

Pärast muudatuste sisseviimist tuleb avada administreerimisliides ja sealt leht Advanced Parameters -> Performance. Lehe lõpus on Caching sektsioon, kust tuleb valida Use Cache – Yes ning Memcached via PHP::Memcached. Tekib nupp Add Server, kuhu on vaja sisestada

IP-address: /www/apache/domains/www.domeen.ee/tmp/memcached.sock

Port: 0

Weight: 1

Kui pärast „Test Server“ vajutamist muutuvad IP Address ja Port väljad roheliseks, siis on memcached serveriga ühendust saadud ja kõik toimib nii nagu peab. Vajuta Add Server ja Prestashop ongi valmis andmeid memcachedi salvestama.

Peale memcachedi seadistamist logitakse avalehel andmebaasi vastu tehtavaid päringuid 27.

Tootekategooria lehel tehakse vaikimisi 224 andmebaasipäringut, memcachediga 42.

Ise arendades

Tutvu memcached funktsioonidega PHP kodulehel.

Väike koodinäide, kuidas andmed esimesel lehe laadimisel memcachedi lisada ja järgmisel lehe avamisel neid sealt lugeda, et neid uuesti laadima ei peaks.

$m = new Memcached();

$m->addServer("/www/apache/domains/www.domeen.ee/tmp/memcached.sock", 0);

if (!$data = $m->get("test")){

        echo "Kogun andmeid, mida memcachedi lisada";

        $data = "mingidandmed";

        $m->add("test", $data);

} else {

        echo "Leidsin andmed memcachedist!";

}

echo $data;

Tekkis huvi?

Ära jäta head võimalust kasutamata! Võta ühendust meie klienditoega abi@veebimajutus.ee ning palu ka enda või oma kliendi lehele memcached võimalust. Kui Sul tekkis küsimusi, siis anna ka sellest meile teada. Veebirebane vastab hea meelega!

Vaata ka Redise kasutamine

 

Seotud juhendid

Sinu tagasiside on oluline

cloud cloud cloud
help
Tähtis küsimus jäi vastuseta? Küsi julgelt otse meie klienditoelt
Me aitame sul kindlasti oma küsimusele see tähtis vastus leida. Ja kui me seda teeme siis võtame kiiresti ühendust!
Klienditeenindus
Lisasime diili sinu ostukorvi, said ikka mega hea diili!

Vali paketi periood

1 kuu põhine arveldus

Kuus 12.08

Kokku 12.08

3 kuu põhine arveldus

Kuus 12.08

Kokku 36.24

6 kuu põhine arveldus

Kuus 12.08

Kokku 72.48

1 aasta põhine arveldus

Säästad 20% ehk -24.16

Kuus 10.07

Kokku 120.80

1 aasta
0.00
2 aastat
0.00
3 aastat
0.00
4 aastat
0.00
5 aastat
0.00
6 aastat
0.00
7 aastat
0.00
8 aastat
0.00
9 aastat
0.00
10 aastat
0.00