Neu: Mehr Speed durch den Einsatz von memcache + Tutorial
Seitenreport verfügt nun über einen eigenen Memcache-Daemon. Memcache wird u.a. von Google und Facebook eingesetzt, um bei einer hohen Anzahl von Abfragen den Flaschenhals MySQL etwas aufzuweiten, sprich die Anwendung performanter zu machen.
Laut apache ab konnte die Seitenreport Performance dadurch in etwa verdoppelt werden. Ferner konnte die CPU Last von durchschnittlich 8% auf 0,2% gesenkt werden, so dass für kommende rechenintensive Anwendungen fast die gesamte CPU Leistung zur Verfügung stehen wird. Memcache hält Daten im Arbeitsspeicher und spart dadurch MySQL Zugriffe.
Installation unter Debian:
1) Das Paket php-dev herunterladen und compilieren
[sh]
# wir holen uns das neueste
# PHP 5.3.6 und
# installieren es mit allen
# wichtigen Erweiterungen
# curl, mysql, multibyte, bcmath usw.
wget ftp.de.debian.org/debian/pool/main/p/php5/php5_5.3.6.orig.tar.gz
tar xvf php5_5.3.6.orig.tar.gz
cd php5_5.3.6.orig
make clean
./configure --with-libxml-dir --with-openssl --without-sqlite3 --with-zlib --enable-calendar --with-curl --with-libxml-dir --with-gd --with-gettext --enable-mbstring --with-mysql --disable-phar --enable-soap --enable-zend-multibyte --with-zend-vm=CALL --without-pdo-sqlite --enable-bcmath
make
make install
[/sh]
2) Memcache herunterladen und compilieren
[sh]
wget memcached.googlecode.com/files/memcached-1.4.5.tar.gz
tar xfv memcached-1.4.5.tar.gz
cd memcached-1.4.5
make clean
phpize
./configure
make
make install
[/sh]
3) memcache.ini (/etc/php5/conf.d/memcache.ini) bearbeiten
[sh]
[memcache]
memcache.dbpath="/var/lib/memcache"
memcache.maxreclevel=0
memcache.maxfiles=0
memcache.archivememlim=0
memcache.maxfilesize=0
memcache.maxratio=0
memcache.protocol=ascii
[/sh]
4) zusätzlich für TYPO3: /etc/php5/conf.d/t3memcache.ini
[sh]
memcache.allow_failover=1
memcache.chunk_size=32768
memcache.default_port=11211
memcache.hash_function=fnv
memcache.hash_strategy=consistent
memcache.max_failover_attempts=20
[/sh]
5) memcache Extension in der php.ini bekannt machen:
[sh]
echo "extension=memcache.so" >> /usr/locate/lib/php.ini
[/sh]
Der Pfad zur php.ini kann abweichen, bitte im phpinfo vorher nachschauen, welche php.ini geladen und in Verwendung ist.
6) Wer Plesk verwendet, muss die Verwendung des neu compilierten PHPs noch bekannt geben (hier am Beispiel für PHP über FastCGI):
[sh]
nano /var/www/cgi-bin/cgi_wrapper/cgi_wrapper
[/sh]
Pfad zum PHP-Binary entsprechend ändern
7) Apache Neustart
[sh]
/etc/init.d/apache2 restart
[/sh]
8) Testen
phpinfo aufrufen entweder in php über phpinfo() oder per Shell über php -i. Hier sollte es nun einen neuen Bereich "memcache support" geben, der auf enabled steht.
9) Sicherheit
Der memcache-Daemon muss explizit abgesichert werden, da er selbst über keine Sicherheitsfunktionen verfügt. Dies am Besten über die IP-Tables (Firewall)
[sh]
IPTABLES=/sbin/iptables
$IPTABLES -A INPUT -m tcp -p tcp -s ERLAUBTE_IPS --dport 11211 -j ACCEPT
$IPTABLES -A INPUT -m tcp -p tcp --dport 11211 -j DROP
[/sh]
Port entsprechend abändern. ERLAUBTE_IPS ersetzen mit den IP-Adressen, die Zugriff auf den memcache erhalten sollen (Auf einen Memcache-Daemon kann von beliebigen Websites aus zugegriffen werden). In der 2. Zeile werden alle Zugriffe verweigert, die nicht den ERLAUBTEN_IPS entsprechen.
10) Verwendung in PHP
<?php
$memc = memcache_get($memcache, $id);
if(!$memc) {
$result = mysql_query('SELECT abc FROM '.$tbl_xyz.' WHERE id = $id');
$cache = mysql_fetch_assoc($result);
memcache_set($memcache, $id, $cache, MEMCACHE_COMPRESSED, '3600'); // 1 Std.
$memc = memcache_get($memcache, $id);
}
# Beim Ändern der Daten
$result = mysql_query('SELECT abc FROM '.$tbl_xyz.' WHERE id = $id');
$cache = mysql_fetch_assoc($result);
memcache_replace($memc, $id, $cache, MEMCACHE_COMPRESSED, '3600');
# basierend auf:
# forum.pctweaks.de/coding/20075-memcache-mit-php-benutzen.html
?>
11) Verwendung in TYPO3
In TYPO3 aktiviert man die Verwendung von memcache wie folgt in der localconf.php:
<?php
# Memcache in TYPO3 aktivieren
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations'] = array (
'cache_hash' => array(
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'backend' => 't3lib_cache_backend_MemcachedBackend',
'options' => array(
'servers' => array('tcp://localhost:11211'),
)
),
'cache_pages' => array(
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'backend' => 't3lib_cache_backend_MemcachedBackend',
'options' => array(
'servers' => array('tcp://localhost:11211'),
)
),
'cache_pagesection' => array(
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'backend' => 't3lib_cache_backend_MemcachedBackend',
'options' => array(
'servers' => array('tcp://localhost:11211'),
)
),
);
$TYPO3_CONF_VARS['SYS']['useCachingFramework'] = '1';
# Memcache in TYPO3 aktivieren //
?>
Der Port 11211 kann dabei natürlich je nach Konfiguration (Sicherheit!) variieren.
Alles in allem also gar nicht schwer und bringt enorme Vorteile. Memcache wird u.a. auch bei Google und Facebook eingesetzt.
Beste Grüße,
Matthias
SEO Analyse und Website-Check mit Seitenreport
Beitrag erstellen
EinloggenKostenlos registrieren