seitenreport
Avatar seitenreport
Themenersteller
Inhaber
TYPO3 Senior Developer
Content Gott (1772 Beiträge)

Neu: Mehr Speed durch den Einsatz von memcache + Tutorial

am 05.04.2011, 14:57 Uhr eröffnete seitenreport folgenden Thread
Internes    5143 mal gelesen    3 Antwort(en).

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

georg123
Avatar georg123
Diplomökonom (Pensionär)
Content Halbgott (569 Beiträge)
am 05.04.2011, 20:28 Uhr schrieb georg123

seitenreport schrieb:
(...)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



WOW! Respekt, ich staune fast ehrfürchtig. Vermutlich wird diese Programmierung heftig abgekupfert- und wie bei Ex- Dr. Gutenberg wird NICHT zitiert, woher das Wissen stammt, meint Fritz.


http://georg-hh.freimaurerei.de

Freiheit-Gleichheit-Brüderlichkeit, Toleranz und Humanität:
Dafür stehen und danach streben Freimaurer

seitenreport
Avatar seitenreport
Inhaber
TYPO3 Senior Developer
Content Gott (1772 Beiträge)
am 05.04.2011, 21:27 Uhr schrieb seitenreport

georg123 schrieb:

(...) Vermutlich wird diese Programmierung heftig abgekupfert- und wie bei Ex- Dr. Gutenberg wird NICHT zitiert, woher das Wissen stammt, meint Fritz.


Hallo Fritz,

na ich denke, er war da eher die Ausnahme als die Regel.

Vor allem soll die Seitenreport-Mitgliedschaft ja allen etwas bringen. Mir bringt sie zusätzliche Referenz und zusätzliches Geld ein (hier buchen) und allen Usern ein wachsendes Web-KnowHow + bessere Websites.

Vor allem sollte man auch immer etwas zurückgeben von dem was man kann (man selbst hat ja auch irgendwann durch irgendwen seine Sachen erst erlernt - und selbst als Autodidakt wie ich - ist und war man nie gänzlich von seiner Umwelt unabhängig).

Allerdings ist die Zielgruppe eines solchen Tutorials natürlich klein, da nicht jeder die benötigten Einstellungen an seinem Webhosting-Paket/VDS/Rootserver vornehmen kann. Dennoch: wer sich z.B. mit TYPO3 befasst oder TYPO3 Leistungen sogar für Kunden anbietet, kommt um diese Dinge nicht herum. Bei anderen großen Systemen wie Magento oder Joomla ist das natürlich ähnlich. :wink:

Beste Grüße,
Matthias


SEO Analyse und Website-Check mit Seitenreport

ptra
Avatar ptra
Designerin (Print & Web)
Content Meister (473 Beiträge)
am 05.04.2011, 21:51 Uhr schrieb ptra

seitenreport schrieb:
... vor allem soll die Seitenreport-Mitgliedschaft ja allen etwas bringen... vor allem sollte man auch immer etwas zurückgeben von dem was man kann. Beste Grüße, Matthias



So war ja eigentlich auch mal das Internet gedacht: Gegenseitiges (Mit)Teilen von Wissen. Vielen Dank, dass du uns an deinem KnowHow teilhaben läßt! Ich kann gar nicht so viele Bookmarks setzen, um das alles nach und nach abzuarbeiten.

Gruß. Petra


Gegen die Infamitäten des Lebens... (siehe Hermann Hesse) http://www.universoom.de

  • 1


« zurück zu: Internes

Das Seitenreport Forum hat aktuell 5276 Themen und 36111 Beiträge.
Insgesamt sind 48364 Mitglieder registriert.