Memcached kasutamine

Memcached

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

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

Memcached puhul salvestatakse sellised andmed otse serveri operatiivmällu (RAM), kuhu andmete kirjutamine ja kust andmete lugemine on märkimisväärselt kiirem. Siinkohal tasub meeles pidada, et memcached on just ajutiste andmete salvestamiseks, sest operatiivmälus hoitakse neid vaid mingi aja jooksul. Näiteks kui operatiivmälu hakkab otsa saama ja uued andmed vajavad salvestamist, 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 kaduma. Seetõttu pole see sobiv püsivalt andmete jäädvustamiseks, kuid igati sobiv vahemäluks. Juhul kui memcachedist soovitud andmeid ei leita, laetakse need tavapäraste päringutega (samal viisil nagu memcached poleks kasutusel).


Kas mul on seda vaja?

Nagu eelnevalt mainitud, siis memcached kasutamine muutub eelkõige oluliseks veebilehtedel, millel on suur külastatavus ja kus loetakse palju andmeid andmebaasist, 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).

Meie klientidest kasutab memcached'i näiteks Geenius.ee digiuudiste portaal, kelle lehe toimimise kiiruse osas mängib memcached suurt rolli. Suure külastatavusega uudisteportaal on majutatud meie tavapärases veebimajutuspaketis Pluss, küs nüüd on ka memcached tugi sees olemas. Memcached on üldiselt kasutusel vaid kallimatel pilve- või privaatserveritel, kus kogu tarkvara on võimalik oma käe järgi ise seadistada.


Kuidas seda kasutama hakata?

Selle jaoks, et memcachedi kasutama hakata, on vaja 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. Selle osa eest kannavad hoolt Veebimajutuse rebased - anna meile ainult teada, et soovid oma lehele memcachedi toe lisada ja me aktiveerime selle (vajalik “Pluss” pakett).

Teiseks on vaja veebileht seadistada memcachedi kasutama, mille jaoks on vaja veebiarendaja panust. Juhul kui teil puudub oma veebiarendaja, siis võite abi paluda ka mõnelt veebimajutuse partnerilt, kes on meil välja toodud filtreeritavate märksõnadega tööriistas.

Veebilehel memcached toe seadistamise protseduur sõltub kasutuses olevast sisuhaldussüsteemist.

Vaatame siinkohal põgusalt enamlevinud sisuhaldussüsteeme ja kuidas nendel selle võimaluse kasutusele saaks võtta.


WordPress

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

Proovisime memcachedi toe lisamiseks pluginat https://wordpress.org/plugins/memcached-is-your-friend/ . Peale paigaldamist tuleb plugin 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'
        )
);
kus /www/apache/domains/www.domeen.ee/tmp/memcached.sock tuleks asendada teile veebirebase poolt edastatud teekonnaga.
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. Paki alla laetud moodul lahti ja paiguta kataloog “memcache” serveris oma lehe sites/all/modules/ kataloogi sisse. Seejärel ava drupali administreerimisliides ning sealt leht Modules. Kui kõik läks õigesti, 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 sedistamiseks, seega me ei hakka täpselt lahkama, mida iga võimalus teeb ja mis oleks kõige parem seadistusviis. See sõltub leheküljest ja jätame selle teie lehe 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 aga 8. See pole mingi märkimisväärne võit ja võib öelda, et ei oma mingit tähtsust, kuid võrdleme seda näitajat ühe mahuka 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, Drupali vaikimisi vahemälu seadistusi kasutades, tehakse andmebaasi vastu 250-500 päringut igal lehe laadimisel. Juhul kui paljud külastajad satuvad samal ajal lehelt uudiseid lugema, satub andmebaas väga suure koormuse alla ja leht muutuks väga aeglaseks. Memcachedi kasutamine viib andmebaasi vastu tehtavate päringute arvu aga nii madalaks, et leht toimib kärmelt ka suurema koormuse all.

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 leht on hakanud memcachedi rakendama.

Vahelehe põhise detailse statistika kuvamise saab sisse lülitada lehelt Configuration → System → Memcache, pannes linnukese “Show memcache statistics at the bottom of each page” ette.



Joomla

Joomlas on memcached tugi eksperimentaalne, vähemalt meie poolt testitud 3.5 versioonis, kuid toome välja ka selle seadistamise juhuks kui keegi tahab testida või mõnel varasemal versioonil memcached tugi stabiilselt toetatud on. 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 Magento enda sisemine vahemälu teeb päris head tööd.

Magento sessioonide infot saab seadistada failisüsteemi, andmebaasi või memcachedi salvestama. Sessioon on kasutajapõhine info, mida serveri poolel salvestatakse. Selline info on näiteks ostukorvi lisatud tooted, mis lehte uuesti külastades endiselt ostukorvis alles on. Mida suurem on lehe külastajate hulk, seda suuremat rolli omab sessioonide salvestamise viis. Kuna failisüsteem ja andmebaas on niiöelda aeglased vahemälud, siis tasub kaaluda nende asemel memcachedi.

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 teile veebirebase poolt edastatud teekonnaga.

Seejärel tuleb 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 võimalus ehk siis 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 58 andmebaasi vastu tehtud päringut igal lehe laadimisel.

Prestashop toetab memcachedi ainult TCP pordi kaudu, kuid meie võimaldame memcachedi kasutamist UNIX socketi kaudu. Selle jaoks, et Prestashopis oleks võimalik seadistada memcachedi kasutamine läbi UNIXi socketi, tuleb teha mõningad koodimuudatused failis controllers/admin/AdminPerformanceController.php . Siinkohal pööran tähelepanu sellele, et sisuhalduse enda koodi muutes võib tekkida olukord, kus hilisema Prestashopi uuendamise käigus tehtud muudatused üle kirjutatakse ja memcachedi enam ei kasutataks. Arendajatel tuleks uurida Prestashopi võimalusi ametliku koodi laiendamise viisi osas ja võimalusel Prestashopi enda koodi funktsionaalsus sel viisil muudatustega üle kirjutada.

Vajalikke muudatusi on võimalik näha siin.

Igaks juhuks ka pilt kui eelnevalt viidatud link ei peaks mingil hetkel toimima.


Muudatuste sisse viimise järel tuleb avada administreerimisliides ja sealt leht Advanced Parameters → Performance. Lehe lõpus on Caching sektsioon, kus tuleb valida Use Cache – Yes ning valida Memcached via PHP::Memcached. Tekib nupp Add Server, kuhu tuleb sisestada

IP address: /www/apache/domains/www.domeen.ee/tmp/memcached.sock
Port: 0
Weight: 1


Kui Test Server vajutamisel lähevad IP Address ja Port väljade taustad roheliseks, siis on memcached serveriga ühendust saadud ja kõik toimib nii nagu vaja. Vajutage 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 nii, 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?

Ärge jätke head võimalust kasutamata ja võtke ühendust meie klienditoega abi@veebimajutus.ee ning paluge ka enda või oma kliendi lehele memcachedi võimalust. Kui aga tekkis küsimusi, siis palume kindlasti teada anda.


Ei leidnud, mida otsisid? Küsi meilt, me aitame!

Helista numbril 683 5188 või kirjuta abi@veebimajutus.ee

Või saada oma küsimus siin, võtame sinuga ühendust nii pea, kui võimalik.

Vale vastus
Cart