Drupal nopeammaksi, osa 2/X

Posted on July 3, 2009

0


Tavoitteena on muuttaa erittäin hitaasti toimivat, kehitysvaiheessa olevat verkkosivut julkaisukuntoon. Alustana sivuilla on Drupal 6, tietokantahaut on toteutettu Viewsillä ja aseteltu nodeihin block-osioihin kirjoitetuilla views_embed_view()-funktioilla. Muita moduleita ovat CCK, Date, ImageField, I18N, ICME ja TinyMCE.

Aloitustilanteessa verkkosivut ovat periaatteessa valmiit ja niillä on jonkin verran sisältöä, joka on pääasiassa tekstiä ja muutamia pieniä kuvia. Sivut on siirretty palvelimelle, jossa ne on tarkoitus siirtää tuotantoon. Sivunlataus kestää keskimäärin uskomattomat 15 sekuntia. Palvelimella muistia riittää ja rasitusaste on lähellä nollaa.

Ensimmäinen ja helpoin tapa nopeuttaa toimintaa on kääntää Drupalin oma välimuisti päälle. Asennuksen yhteydessä tulin kuitenkin ensin tarkistaneeksi MySQL:n konfiguraation, josta puuttui tietokannan välimuisti kokonaan. Asetustiedosto on nimeltään my.cnf ja se löytyy tavallisesti /etc -hakemistosta.

cat /etc/my.cnf

Konfiguraatio näkyy ruudulla. Jos parametrit query_cache_type, query_cache_size tai query_cache_limit puuttuvat, ne kannattaa pikapikaa lisätä. Query_cache_type määrittää, onko tietokannan välimuisti päällä. Arvo 1 on päällä, arvo 0 pois päältä ja arvo 2 on päällä vain silloin kuin suoritukseen tuleva SQL-lauseke ehdottaa välimuistin käyttöä. Perus-Drupalin kanssa arvo 1 on sopiva ja voisi myös sanoa että välttämätön. Query_cache_size on välimuistille varattava koko. Suuruus riippuu sivustoista mutta olen käyttänyt arvoa 40 (MB) ja hyvin on tultu toimeen. Query_cache_limit on arvo megabitteinä, minkä suuruiset haut korkeintaan tallentuvat välimuistiin. Oletusarvona on 1 MB, joka lienee käytössä kirjoittamattakin. Drupalin kanssa 1 MB sopii meille. Lisää/korjaa rivit my.cnf:iin käyttämällä vimiä tai muuta tekstieditoria.

query_cache_type=1
query_cache_limit=1
query_cache_size=40

MySQL:n pitää vielä lukea asetukset uudelleen, jotta muutos astuu voimaan:

/etc/init.d/mysql reload (tai restart jos reload ei toimi)

Testisivumme puolittivat juuri sivunlataukseen kuluvan ajan. 7,5 sekuntia on edelleen kelvoton tulos, joten lisätoimia tarvitaan. Palataan takaisin yleensä ensimmäiseksi suoritettavaan vaiheeseen, eli Drupalin oma välimuisti päälle. Asetus löytyy kohdasta admin/settings/performance tai Administration -> Site configuration -> Performance. Caching modeksi kannattaa yleensä laittaa normal ja kaikki pakkausvaihtoehdot päälle, eli Page compression enabled, Block cache enabled, Optimize CSS files enabled ja Optimize JavaScript files enabled. Huomaa, että tämän jälkeen lähdekoodiin tai blockkeihin tehdyt muutokset eivät välttämättä tule näkyviin ennenkuin tältä samaiselta Performance-sivulta on käyty klikkaamassa Clear cached data -nappia.

Tehdään asetusten tallennus ja uloskirjautuminen, Drupalin pääkäyttäjälle (nid 1) ei koskaan tarjoilla välimuistissa olevia sivuja joten sivujen kokeilu pitää suorittaa anonyyminä käyttäjänä tai muuna sisään kirjautuneena käyttäjänä. Pienen klikkailun jälkeen voidaan todeta, että sivut ovat nopeutuneet, mutta sivunlatausaika vaihtelee edelleen 2,5 sekunnista reilusti yli viiteen sekuntiin.

Boosterit käyttöön

Viisi sekuntia jokaisen sivun aukeamiseen ei todellakaan ole tyydyttävä tulos. Tietokantayhteys on nyt kunnossa ja Drupal käyttää oikopolkuja sivun muodostamiseen. Mitä voimme vielä tehdä?

Flowchart

Flowchart

Ylläoleva kuva on napattu ilman lupaa Drupal.orgista ja muiden tietojen puutteessa sen tekijä lienee Jonah Ellison (linkki lähteeseen).

Kuva havainnollistaa loistavasti, miten Authcache-moduli nopeuttaa sivunlatausta. Sivuista tallennetaan HTML-versiot, jotka ovat valmiina lukua varten. Tällaisen toiminnon tuottavia moduleita on useita. Authcache on siitä erilainen, että tässä on mahdollista suorittaa tietokantahakuja sivunlatauksen jälkeen JavaScriptin avulla. Näin HTML-kopioita voidaan käyttää myös sisäänkirjautuneiden käyttäjien palvelemiseen.

Authcache on kuitenkin melko monimutkainen ottaa käyttöön, joten tässä käytämme yksinkertaista Boost-moduulia. Boost tekee sivujen juurihakemistoon cache-kansion, johon tallentuu HTML-versiot kaikista sisäänkirjautumattomien käyttäjien, tässä tapauksessa kaikkien sivujen käyttäjien ylläpitäjää lukuun ottamatta, avaamista sivuista.

Boostin asennuksessa on muokattava sivujen juurihakemistossa olevaa .htaccess-tiedostoa. Asennus sujuu näin:

  1. Lataa ja pura Boost-moduuli modules-kansioon ja ota se käyttöön Drupalin moduulisivulta
  2. Luo juurihakemistoon kansio cache ja tämän sisään kansio omadomain.fi
  3. Anna cache/ ja cache/omadomain.fi/ -kansioihin sopivat käyttöoikeudet Drupalia pyörittävälle käyttäjänimelle (esimerkiksi chown -R omadomain:omadomain cache ja chmod -R u+rwx cache)
  4. Mene Boostin asetuksiin, jotka löytyvät Performance-sivulta
  5. Kopioi .htaccess-asetukset leikepöydälle
  6. Muokkaa .htaccess-tiedostoa (joka löytyy kohdasta omadomain.fi/.htaccess) ja liitä Boostin asetukset oikeaan kohtaan.
  7. Käynnistä Boost sen Drupalin asetussivulta
  8. Kirjaudu ulos ja kokeile sivujen toimintaa

Ensimmäinen sivunlatauskerta anonyyminä käyttäjänä ei eroa tavallisesta sivunlatauksesta. Seuraavissa nopeusero tulee näkyviin: sivunlataus kestää keskimäärin 1,4 sekuntia! Tällä vauhdilla sivut voi hyvillä mielin julkaista.

Boostin asennukseen liittyen cronjobin toimivuus pitää vielä tarkistaa. Cron virkistää HTML-versiot sivuista normaalin cron-ajon tahtiin. Boost neuvoo asettamaan /sites/default/settings.php -tiedoston base_url-muuttujalle arvon, jos ongelmia esiintyy.

Advertisements
Posted in: Drupal