<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SysEleven - Hosting für Fortgeschrittene &#187; Blog</title>
	<atom:link href="http://www.syseleven.de/category/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.syseleven.de</link>
	<description></description>
	<lastBuildDate>Tue, 24 Jan 2012 16:33:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Endlich: Datenbankskalierung in OXID</title>
		<link>http://www.syseleven.de/blog/2146/endlich-datenbankskalierung-in-oxid/</link>
		<comments>http://www.syseleven.de/blog/2146/endlich-datenbankskalierung-in-oxid/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 10:29:25 +0000</pubDate>
		<dc:creator>Andreas Mauf</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[oxid]]></category>
		<category><![CDATA[Skalierung]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=2146</guid>
		<description><![CDATA[Seit nunmehr drei Jahren beschäftigen wir uns intensiv mit der Performance-Steigerung von OXID-Shops und haben in dieser Zeit so einigen lahmen wieder Beine gemacht. Heute sind wir besonders stolz darauf, dass wir nun auch die letzte Skalierungsbarriere meistern konnten: Datenbankskalierung bei OXID.]]></description>
			<content:encoded><![CDATA[<p>Seit nunmehr drei Jahren beschäftigen wir uns intensiv mit der Performance-Steigerung von OXID-Shops und haben in dieser Zeit so einigen lahmen wieder Beine gemacht. Heute sind wir besonders stolz darauf, dass wir nun auch die letzte Skalierungsbarriere meistern konnten: Datenbankskalierung bei OXID.</p>
<h2>OXID-Setups bisher</h2>
<p>OXID-Shops bestehen bisher oftmals aus mehreren PHP-Applikation-Servern und &#8211; jetzt kommt der Knackpunkt &#8211; einem Datenbank-Server.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/Single-DB.gif" alt="" title="Single-DB" width="425" height="481" class="aligncenter size-full wp-image-2147" /></p>
<h2>Warum nur ein Datenbank-Server?</h2>
<p>Leider unterstützt OXID nativ nur eine Datenbank. Für viele kleine Shops reicht das völlig aus. Bei unseren Zöglingen jedoch wird die Datenbank zum Bottleneck. Wenn die Datenbank überlastet ist, helfen auch keine weiteren Applikation-Server mehr. Der einzige Ausweg ist dann ein größerer Datenbank-Server. Aber was, wenn es keinen größeren Server mehr gibt? Mehr als 24 CPU-Kerne gibt es heute nun mal nicht zu kaufen. Wem also der größte Datenbankserver nicht ausreicht, muss <a href="/blog/1934/oxid-super-cache-mehr-power-fur-den-shop/">erfinderisch werden</a>. In der Version 5.0 wird OXID dieses Problem angehen, wir freuen uns schon sehr auf diese Änderung. Für alle Performancehungrigen, die nicht bis dahin warten können (oder wollen), haben wir bereits heute eine Lösung!</p>
<h2>Zukünftige OXID-Setups bei SysEleven</h2>
<p>Durch eine SysEleven-Erweiterung in OXID können Datenbankanfragen des Shops nunmehr auf mehrere Server verteilt werden. Für die Echtzeit-Synchronisation der Datenbank-Server nutzen wir das altbekannte MySQL-Feature &#8220;Master-Slave-Replikation&#8221;.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/DB-Scaling.gif" alt="" title="DB-Scaling" width="425" height="481" class="aligncenter size-full wp-image-2148" /></p>
<p>In dem hier dargestellten Setup werden die Anfragen von zwei Datenbank-Servern abgearbeitet. Dadurch erhöhen wir die Gesamtkapazität (nicht die Geschwindigkeit) des Shops und kommen dem <a href="http://www.oser.org/~hp/bsyII/node6.html">horizontalen Skalieren</a> wieder einen Schritt näher. Einziger Nachteil der Master-Slave-Replikation ist, dass man in der Slave-Datenbank nur lesen darf (read only), Änderungen der Daten müssen immer auf dem Master erfolgen. </p>
<h2>Wie viel bringt es?</h2>
<p>In einer Referenzmessung konnten wir die CPU-Belastung im Datenbank-Master auf die Hälfte reduzieren, sobald Abfragen auch vom Slave abgearbeitet wurden.</p>
<p><br/><img src="http://www.syseleven.de/wp-content/uploads/DB-CPU-Graphs.gif" alt="" title="DB-CPU-Graphs" width="425" height="573" class="aligncenter size-full wp-image-2149" /></p>
<p>Je besser die Last verteilt werden kann, umso höher ist die Kapazität des Shops, d.h. umso mehr gleichzeitige Besucher können bedient werden. Wem die zusätzliche Power von einem Datenbank-Slave nicht ausreicht, kann einfach mehrere Slaves verwenden.</p>
<h2>Welche Queries werden auf die Slaves ausgelagert?</h2>
<p>Wie bereits erwähnt, dürfen die Slaves nur lesen und keine Daten verändern. Zudem gibt es Queries, z.B. während des Bestellprozesses, die zwingend auf dem Master ausgeführt werden sollten. Wir müssen also aufpassen, welche Queries wir vom Master und welche von den Slaves verarbeiten lassen. Üblicherweise unterscheidet man an dieser Stelle ganz simpel zwischen lesenden (select) und schreibenden (insert, update, delete, replace) Queries. Das reicht uns jedoch nicht: Wir wollen keine gleichmäßige Verteilung, sondern den bestmöglichen Performancegewinn. Um das zu realisieren, ist es entscheidend, die richtigen Queries auf die Slaves auszulagern. Eine Query, die beispielsweise nur 5% der gesamten MySQL-Rechenzeit ausmacht, kann gerne auf dem Master bleiben, wenn dafür eine andere Query, die für 30% der Rechenzeit verantwortlich ist, verteilt werden kann. Wir suchen also die &#8220;teuren&#8221; Queries! Dazu erstellen wir ein individuelles <a href="/blog/1906/performance-profliling-bei-syseleven/">MySQL-Profiling</a> für Ihren Shop und ermitteln die 5 oder 10 &#8220;teuersten&#8221; Queries. Meistens machen diese Queries summiert mehr als 70% oder 80% der gesamten MySQL-Rechenzeit aus.</p>
<h2>Wann bekommt Ihr OXID-Shop den SysEleven-Faktor?</h2>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/2146/endlich-datenbankskalierung-in-oxid/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Video-Contest Büro-Befahrung</title>
		<link>http://www.syseleven.de/blog/2132/videocontest-buero-befahrung/</link>
		<comments>http://www.syseleven.de/blog/2132/videocontest-buero-befahrung/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 13:58:46 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Fun & Stuff]]></category>
		<category><![CDATA[Büro]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[RC Buggy]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=2132</guid>
		<description><![CDATA[Projekt: Mach Dein Büro zur Rennstrecke. Wir haben ein iPhone auf unseren RC Buggy geschnallt und haben damit ein paar Runden durchs Büro gedreht.]]></description>
			<content:encoded><![CDATA[<p>Die Weihnachtszeit ist vorbei. Im E-Commerce bedeutet das: Durchatmen und einen Gang zurückschalten. Wir nutzen die Zeit, um auf andere Gedanken zu kommen und widmen uns auch mal einem Spaßprojekt.<span id="more-2132"></span></p>
<h1>Mach Dein Büro zur Rennstrecke!</h1>
<p>Wir haben ein iPhone auf unseren <a href="http://www.modellbaumeile.com/">RC Buggy</a> geschnallt und damit ein paar Runden durchs Büro gedreht. Mit einigen Hindernissen und einem &#8220;Feature&#8221; auf der Rennstrecke haben wir den Schwierigkeitsgrad erhöht. ;-)</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/Buggy-Cam.jpg" alt="" title="Buggy-Cam" width="425" height="319" class="aligncenter size-full wp-image-2133" /></p>
<h1>SysEleven-Büro-Befahrung</h1>
<p><iframe width="420" height="236" src="http://www.youtube.com/embed/JS6A0hON04M?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<h1>Outtakes</h1>
<p><iframe width="420" height="236" src="http://www.youtube.com/embed/5hkjc9xbqd8?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<h1>Mach mit!</h1>
<p>Wenn Ihr Lust habt, dann macht doch einfach mit. Es ist simpel und macht <strong>sehr</strong> viel Spaß. Postet Eure Videos auf <a href="http://facebook.com/SysEleven">facebook.com/SysEleven</a> oder schickt uns einen Link zum Video.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/2132/videocontest-buero-befahrung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weihnachten bei SysEleven</title>
		<link>http://www.syseleven.de/blog/2118/weihnachten-bei-syseleven/</link>
		<comments>http://www.syseleven.de/blog/2118/weihnachten-bei-syseleven/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 10:15:29 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Fun & Stuff]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[private Cloud]]></category>
		<category><![CDATA[Weihnachten]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=2118</guid>
		<description><![CDATA[Da ist sie wieder, die Weihnachtszeit - die Zeit der Besinnlichkeit und der Vorfreude. Es wird gebacken, gelacht und Glühwein getrunken. Aber nicht in unserer Welt...]]></description>
			<content:encoded><![CDATA[<p>Da ist sie wieder, die Weihnachtszeit &#8211; die Zeit der Besinnlichkeit und der Vorfreude. Es wird gebacken, gelacht und Glühwein getrunken. Aber nicht in unserer Welt. In der Welt des E-Commerce herrschen andere Spielregeln. Für die Artisten des E-Commerce Wanderzirkus gibt es Überstunden statt Glühwein und Urlaubssperre statt Familienessen. Weihnachtszeit &#8211; Ausnahmezustand.<span id="more-2118"></span></p>
<p>Wir bei SysEleven tun alles dafür, um Euch Shopbetreibern während dieser Zeit zumindest eine Sorge abzunehmen. Die Arbeitsteilung ist dabei ganz simpel: Ihr konzentriert Euch auf das Business, wir kümmern uns um die Server. In der SysEleven Private Cloud können wir jedem Server während des Betriebs <a href="/ueberuns/flexible-performance/">mehr Power</a> geben, damit wir ruckelfrei durchs Weihnachtsgeschäft kommen.</p>
<p>Die Erleichterung wird sofort sichtbar, so sehen glückliche Server aus:</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/cpu.gif" alt="" title="cpu" width="425" height="676" class="aligncenter size-full wp-image-2119" /></p>
<p>Im Namen des gesamtem SysEleven-Teams wünsche ich Euch allen eine erfolgreiche und sorgenfreie Weihnachtszeit. Und jetzt keine Blogs mehr lesen, sondern ab an die Arbeit, die Kunden warten auf die Pakete.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/2118/weihnachten-bei-syseleven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatische Performance-Optimierung von Webseiten</title>
		<link>http://www.syseleven.de/blog/2007/automatische-performance-optimierung-von-webseiten/</link>
		<comments>http://www.syseleven.de/blog/2007/automatische-performance-optimierung-von-webseiten/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 14:10:10 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Ankündigungen]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[mod_pagespeed]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=2007</guid>
		<description><![CDATA[Mit einem Apache-Modul werden dir wichtigsten Anpassungen zur Optimierung der Renderzeit einer Webseite automatisch angewendet. Die Seite muss dafür nicht verändert werden.]]></description>
			<content:encoded><![CDATA[<p>Auf der <a href="http://velocityconf.com/velocityeu/" target="_blank">Velocity Europe Konferenz</a> hatte ich die Gelegenheit das Entwicklerteam von &#8220;mod_pagespeed&#8221;, einer sehr interessanten Software zu treffen. Bereits seit geraumer Zeit gibt es eine Best Practices Liste für die Performance-Optimierung von Webseiten. Die aktuellste Sammlung dieser Regeln, an die sich idealerweise jede Webseite halten sollte, stammt von Google und heißt <a href="http://code.google.com/intl/de-DE/speed/page-speed/docs/overview.html" target="_blank">&#8220;Pagespeed&#8221;</a>.</p>
<p>Der Vollständigkeit halber möchte ich darauf hinweisen, dass es sich bei diesen Maßnahmen um die Optimierung der Renderzeit handelt. Damit ist die Zeit gemeint, die der Browser benötigt, um eine Seite vollständig, also inklusive aller Elemente, Bilder, Javascript usw. darzustellen. Es geht hierbei explizit nicht um die Zeit, die der Webserver benötigt um z.B. Datenbankabfragen auszuführen. Die Pagespeed-Regeln gelten ab dem Zeitpunkt, an dem der Webserver den HTML-Quellcode der Seite an den Browser übertragen hat.</p>
<h4>Wie viel bringt es?</h4>
<p>Bevor man sich die Mühe macht 31 Regeln anzuwenden, lohnt sich eine Schätzung wie viel mehr Geschwindigkeit überhaupt erreichbar ist. Das kostenlose Online-Tool &#8220;Webpagetest&#8221; bietet eine sehr ausführliche und besonders ansehnliche Vorschau auf den möglichen Geschwindigkeitsgewinn:</p>
<p><object width="420" height="236"><param name="movie" value="http://www.youtube.com/v/YNKi24rxjl0?version=3&#038;feature=oembed"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/YNKi24rxjl0?version=3&#038;feature=oembed" type="application/x-shockwave-flash" width="420" height="236" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Für Eure Webseite könnt Ihr diesen <a href="http://www.webpagetest.org/compare" target="_blank">Test hier ausführen</a>. </p>
<h4>So einfach ist das?</h4>
<p>Wenn ich mich an die Regeln halte, wird meine Webseite schneller. So einfach ist das. Das heißt aber leider nicht, dass auch die Umsetzung einfach ist. Einige der Regeln sind recht anspruchsvoll, die Umsetzung ist aufwendig und wird Zeit und Geld kosten.</p>
<h4>Automatische Anwendung der Pagespeed-Regeln</h4>
<p>Jetzt kommt der spannende Teil dieses Blogposts: Es gibt ein kostenloses Webserver-Modul, dass die wichtigsten der Pagespeed-Regeln <del datetime="2011-11-13T13:09:17+00:00">automagisch</del> automatisch anwendet. Die Seite muss dafür nicht verändert werden. Oder mit anderen Worten: Es kostet weder Zeit noch Geld. ;-) Das Modul gibt es derzeit für Apache und heißt &#8220;mod_pagespeed&#8221;. Ich habe die Entwickler ein wenig ausgefragt und erfahren, dass bereits über 70.000 Webseiten dieses Modul benutzen. Dabei ist zu beachten, dass &#8220;mod_pagespeed&#8221; nicht mit jeder Webseite kompatibel ist. Die Quote liegt jedoch derzeit bei nur knapp 2%.</p>
<h4>Los geht‘s</h4>
<p>SysEleven hat &#8220;mod_pagespeed&#8221; getestet und unterstützt es ab sofort. Wir freuen uns darauf mit Euch zusammen auszuprobieren, wie viel schneller Eure Webseite noch werden kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/2007/automatische-performance-optimierung-von-webseiten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Umzug zu SysEleven</title>
		<link>http://www.syseleven.de/blog/1998/umzug-zu-syseleven/</link>
		<comments>http://www.syseleven.de/blog/1998/umzug-zu-syseleven/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 10:26:53 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=1998</guid>
		<description><![CDATA[So funktionieren Umzüge zu SysEleven: In zwei Phasen stabilisieren und verbessern wir die Performance Ihrer Webseite.]]></description>
			<content:encoded><![CDATA[<p>Viele unserer Kunden kommen zu uns, weil sie mit ihrer Webseite eine Skalierungsgrenze erreicht haben. Wir sind spezialisiert darauf, Seiten und Shops mit außergewöhnlichen Herausforderungen schneller und gleichzeitig ausfallsicher zu machen. Dabei ist jedes Projekt sehr individuell, die Anforderungen reichen von Einhunderttausend  Zugriffen pro Stunde über  Ladezeiten von unter 0,5 Sekunden, bis hin zu Shops mit mehreren Millionen Artikeln. Für jeden Umzug erstellen wir einen individuellen Installations-, Test- und Migrations-Workflow. Eins ist jedoch bei allen Umzügen zu uns gleich: Die zwei Phasen des SysEleven-Umzugs.</p>
<p>
<h1>Phase 1: Umzug auf ein stabiles und skalierbares Hosting-Konzept </h1>
</p>
<p>In dieser Phase installieren wir Ihre Webseite ohne Änderungen auf den SysEleven Systemen. Das primäre Ziel in dieser Phase ist die Stabilisierung der aktuellen, noch nicht verbesserten Performance der Seite. Das bedeutet, dass die Geschwindigkeit auch bei Peaks konstant bleibt.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/stabilisierung.gif" alt="" title="Stabilisierung der Performance" width="435" height="171" class="aligncenter size-full wp-image-1999" /></p>
<p>In dieser Grafik ist die Ladezeit einer Webseite dargestellt. Vor dem Umzug sieht man die übliche Berg- und Talfahrt. Je nachdem ob es grad viele oder wenige Besucher gab, war die Seite schnell oder entsprechend langsam. Seit dem Umzug ist die Ladezeit annähernd konstant.</p>
<p>
<h1>Phase 2:Verbesserung der Geschwindigkeit</h1>
</p>
<p>Sobald wir die Performance Ihrer Webseite stabilisiert haben, kümmern wir uns in der zweiten Phase um die Verbesserung der Ladezeiten. Hierfür ermitteln wir mit unseren Monitoring-Tools Performance-Messwerte während des Live-Betriebs. In der Regel erstellen wir in dieser Phase ein detailliertes Performance Profil Ihrer Webseite. Die daraus gewonnen Erkenntnisse bilden die Grundlage für unsere Verbesserungsvorschläge.  Daraus resultiert ein konkreter Maßnahmenkatalog, der je nach Art der jeweiligen Aufgabe von uns oder in enger Zusammenarbeit von Ihrer Agentur oder Ihren Entwicklern umgesetzt wird.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/performance.gif" alt="" title="Steigerung der Performance" width="435" height="171" class="aligncenter size-full wp-image-2000" /></p>
<p>Diese Grafik veranschaulicht die zweite Phase des Umzugs zu SysEleven anhand eines konkreten Beispiels: Die Ladezeit lag vor der Umsetzung der von uns vorgeschlagenen  Maßnahmen bei durchschnittlich einer Sekunde und konnte auf unter 0,2 Sekunden verbessert werden.</p>
<h1>Wann bekommt Ihre Webseite den SysEleven-Faktor?</h1>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/1998/umzug-zu-syseleven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OXID Super Cache: Mehr Power für den Shop</title>
		<link>http://www.syseleven.de/blog/1934/oxid-super-cache-mehr-power-fur-den-shop/</link>
		<comments>http://www.syseleven.de/blog/1934/oxid-super-cache-mehr-power-fur-den-shop/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 17:57:14 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[Super Cache]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=1934</guid>
		<description><![CDATA[Katapultieren Sie die Performance Ihres Shops in neue Dimensionen. Die durchschnittliche Ladezeit von 0,1 Sekunde ist gut für Ihre Kunden und Ihr Google-Ranking - und schlecht für Ihre Mitbewerber.]]></description>
			<content:encoded><![CDATA[<p>Gemeinsam mit OXID Solution Partner <a href="http://shop.fatchip.de/OXID-eShop-Module/OXID-Modul-Supercache.html" target="_blank">FATCHIP</a> haben wir den OXID Super Cache entwickelt. Mit dem OXID Super Cache katapultieren Sie die Performance Ihres Shops in neue Dimensionen. Die durchschnittliche Ladezeit des HTML-Codes beträgt 0,1 Sekunde. Das ist gut für Ihre Kunden und Ihr Google-Ranking &#8211; und schlecht für Ihre Mitbewerber.</p>
</p>
<h1>Wirkungsweise</h1>
<p>Der OXID Super Cache wird vor die eigentlichen Shop-Server geschaltet und kann dort einen wesentlichen Teil des Traffics abfangen und beschleunigen. Die Lastverteilung und Wirkungsweise ist in den beiden folgenden Grafiken dargestellt.<br />
<img src="http://www.syseleven.de/wp-content/uploads/nocache.gif" alt="" title="Lastenverteilung ohne Super Cache" width="435" height="602" class="aligncenter size-full wp-image-1985" /></p>
<p>Alle Anfragen an den Shop werden von PHP und MySQL bearbeitet und bei jedem einzelnen Seitenaufruf aufs Neue berechnet, zusammengebaut und zum Schluss ausgegeben. Web- und Datenbankserver sind ständig belastet.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/Sys11-Supercache.gif" alt="" title="Wirkungsweise SysElven Super Cache" width="435" height="700" class="aligncenter size-full wp-image-1939" /></p>
<p>Der OXID Super Cache speichert das fertige HTML und liefert es ab dem zweiten Aufruf derselben Seite direkt aus. Nur noch ein Bruchteil der Anfragen schlagen auf Web- und Datenbank-Server durch. Das entlastet die Systeme und sorgt für mehr Performance und steigert die Kapazität.</p>
</p>
<h1>Zahlen und Fakten</h1>
<p>Durch den OXID Super Cache werden die Server nicht nur entlastet, der Cache ist auch sehr viel performanter als ein Webserver und kann die Seiten um ein Vielfaches schneller ausliefern. Die spezielle Abstimmung auf höchste Performance macht den Super Cache sogar noch schneller als den OXID Dynamic Content Cache in der Enterprise Edition.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/seitenladezeit.gif" alt="" title="SysEleven Super Cache: Seitenladezeit" width="435" height="300" class="aligncenter size-full wp-image-1940" /></p>
<p>Durch den Einsatz des OXID Super Caches können Sie die Seitenladezeit auf ca. 0,1 Sekunde verringern. Dieser Wert wird hauptsächlich durch die Geschwindigkeit der DSL-Verbindung begrenzt, direkt am Cache gemessen beträgt die Seitenladezeit sogar nur 0,01 Sekunde.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/queries_per_second.gif" alt="" title="SysEleven Super Cache: Queries per Second" width="435" height="320" class="aligncenter size-full wp-image-1942" /></p>
<p>Alle Seitenaufrufe, die direkt vom Super Cache ausgeliefert werden, verursachen keine einzige Abfrage in der Datenbank.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/hits_per_second.gif" alt="" title="SysEleven Super Cache: Hits per Second" width="435" height="300" class="aligncenter size-full wp-image-1943" /></p>
<p>Der Super Cache ist auf hohen Durchsatz optimiert und kann im Vergleich zu Webservern ein Vielfaches an Seiten pro Sekunde ausliefern. Das ist besonders wichtig bei High-Traffic-Kampagnen wie zum Beispiel TV-Werbung, sehr großen Newsletter-Verteilern oder Ein-Tages-Gutscheinaktionen.</p>
</p>
<h1>Wie viel bringt der Super Cache?</h1>
<p>Die folgende Grafik zeigt die Erfolgsquote des Cachings bei einem unserer Kunden. 64% aller Seitenaufrufe werden aus dem Cache ausgeliefert. Das bedeutet, mehr als die Hälfte aller Zugriffe sind rasend schnell und verursachen keine Last auf den Servern. Die Shop-Server müssen sich nur noch um die Hälfte der Zugriffe kümmern.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/SuperCache_Hitrate.gif" alt="" title="SuperCache_Hitrate" width="425" height="293" class="aligncenter size-full wp-image-1961" /></p>
</p>
<h1>Intelligentes Caching</h1>
<p>Die Idee einzelne Elemente nicht jedes mal neu zu berechnen, sondern zwischenzuspeichern ist nicht neu. Ganz im Gegenteil, simples Caching kann heutzutage fast jede Software. Das besondere am OXID Super Cache ist die intelligente Cacheverwaltung. Wenn sich ein Artikel ändert oder ausverkauft ist, werden automatisch alle Seiten aus dem Cache entfernt, auf denen der Artikel zu sehen ist. Dadurch sind Sie nicht mehr wie bisher üblich an Cache-Laufzeiten gebunden, sondern Änderungen werden sofort sichtbar. </p>
<h1>Referenz-Installation</h1>
<p>Überzeugen Sie sich selbst von der Performance des OXID Super Cache. Bei unserem Kunden <a href="http://www.schuhtempel24.de/" title="http://www.schuhtempel24.de/" target="_blank">http://www.schuhtempel24.de/</a> können Sie ausprobieren wie schnell Ihr Shop sein könnte. Mit über 1 Million Seitenaufrufen pro Tag zählt Schuhtempel24 zu den High-Traffic OXID Installationen. Unser Super Cache macht den Shop schneller als die Konkurrenz erlaubt.</p>
<p><a href="http://www.schuhtempel24.de/" target="_blank"><img src="http://www.syseleven.de/wp-content/uploads/Schuhtempel24.de_.jpg" alt="" title="Schuhtempel24.de" width="425" height="328" class="aligncenter size-full wp-image-1973" /></a></p>
</p>
<div class="special-outer"><div class="special-inner">
<h1>Key Features: OXID Super Cache</h1>
<ul>
<li>0,1 Sekunde Ladezeit</li>
<li>Entlastung der Server</li>
<li>Cache-Daten im RAM (= turbo schnell)</li>
<li>intelligente Erkennung welche Aufrufe gecacht werden dürfen</li>
<li>automatische Aktualisierung bei Änderungen</li>
<li>Verwaltung im OXID Admin-Interface </li>
<li>individuelle Cachezeiten je Seitenart</li>
<li>API für eigene Erweiterungen</li>
<li>Kompatibel zu allen OXID 4.x Versionen</li>
</ul>
<p></div></div><br />
<img src="http://www.syseleven.de/wp-content/uploads/fatchip_syseleven.gif" alt="" title="fatchip_syseleven" width="435" height="80" class="aligncenter size-full wp-image-1949" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/1934/oxid-super-cache-mehr-power-fur-den-shop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Performance-Profliling bei SysEleven</title>
		<link>http://www.syseleven.de/blog/1906/performance-profliling-bei-syseleven/</link>
		<comments>http://www.syseleven.de/blog/1906/performance-profliling-bei-syseleven/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 12:40:26 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Profiling]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=1906</guid>
		<description><![CDATA["Bei uns hört die Dienstleistung nicht auf, wenn die Lampe am Server grün leuchtet" - Lesen Sie in diesem Blogbeitrag wie wir bei SysEleven die Performance Ihrer Webseite analysieren.]]></description>
			<content:encoded><![CDATA[<p>&#8220;Bei uns hört die Dienstleistung nicht auf, wenn die Lampe am Server grün leuchtet&#8221; &#8211; das ist nicht nur einer der Sätze, mit denen ich in letzter Zeit am Liebsten zitiert werde, sondern auch der Titel einer neuen Blogreihe, in der ich erklären möchte, was bei SysEleven anders ist als bei herkömmlichen Hostinganbietern. Wir haben eine besondere Einstellung zu dem was wir tun und wie wir es tun &#8211; wir nennen das den SysEleven Faktor.</p>
<p>Im heutigen Teil dieser Reihe geht es um die Steigerung der Performance von Webseiten oder E-Commerce Shops. Manche unserer Kunden nennen das „Serverpower“ oder gerne auch „Vollgas Hosting“. Und da haben wir auch schon das Missverständnis: Natürlich gehören zu einer schnellen Webseite auch schnelle Server &#8211; aber nicht nur. Die Performance der Software ist ebenso wichtig. Die besten und schnellsten Server machen Ihre Webseite nicht schneller, wenn die Software mit angezogener Handbremse fährt &#8211; und umgekehrt genauso.</p>
<blockquote><p><span style="font-size:1.2em;">Die Performance einer Webseite wird durch das schwächste Glied der Kette bestimmt und nicht etwa durch die schnellste Komponente des Setups, wie viele irrtümlich glauben.</span></p></blockquote>
<p>Die erste und wichtigste Teilaufgabe bei der Optimierung von Webperformance lautet also: Finde das schwächste Glied der Kette. Fachleute nennen das den Flaschenhals bzw. das Bottleneck. Je mehr Änderungen es beispielsweise an einem Online-Shop gab und je mehr Köche den Brei gerührt haben, umso komplexer und schwieriger wird die Suche nach dem Bottleneck. Erschwerend kommt hinzu, dass es laut unserer Erfahrung im Grunde nie ein einzelnes, sichtbares Bottleneck gibt. Meistens finden wir eine Verkettung „unglücklicher Umstände“ und „gewachsener Strukturen“, die gemeinsam die Performance in den Keller ziehen. Nicht selten finden wir sogar Features, die schon lange nicht mehr benutzt werden, aber immer noch aktiv sind und Last erzeugen.</p>
<p>
<h1>Was ist das Ziel?</h1>
</p>
<p>Das Ziel des Performance-Profilings ist die Identifikation der Bottlenecks. Als Ergebnis dieser Analyse sollte ein Maßnahmenkatalog mit konkreten Verbesserungsvorschlägen und Aufgaben vorliegen. Im Übrigen gehört zum SysEleven Faktor auch, dass es an dieser Stelle eine strikte Trennung gibt: Wir helfen dabei die Bottlenecks zu finden und liefern eine Anleitung wie sie behoben werden können. Die hardware- bzw. serverseitige Umsetzung erfolgt direkt durch uns und die softwareseitige Umsetzung erfolgt durch die Agentur des Kunden bzw. durch die Entwickler, die das jeweilige Setup viel detaillierter kennen. Das beste Ergebnis lässt sich erzielen, wenn Hostinganbieter, Agentur und Entwickler zusammenarbeiten.</p>
<p>
<h1> Wie finden wir die Bottlenecks?</h1>
</p>
<p>Zunächst erfolgt eine Bestandsaufnahme: Server, Software, Versionsnummern, Konfigurationen, aktuelle Auslastung, Besonderheiten. Für die detaillierte Untersuchung der Performance unterteilen wir das Setup in zwei Kategorien: Komponenten und Seitentypen. Die einzelnen Komponenten etwa eines Shops sind die Shopsoftware (z.B. PHP), die Datenbank (z.B. MySQL) und externe Webservices (z.B. Suchanbieter). Jede dieser Komponenten kann Bottlenecks verursachen und wird deshalb einzeln analysiert und getestet. Im zweiten Schritt unterscheidet man zwischen verschieden Seitentypen, bei einem Shop sind das meist die Startseite, Kategorieseite, Produktseite und die Suche. Jeder dieser Seitentypen hat individuelle Funktionen und Anforderungen &#8211; und damit auch potentiell individuelle Bottlenecks.</p>
<p>
<h1>Seitenladezeit</h1>
</p>
<p>Einer der sichtbarsten Indikatoren für die Performance der Webseite ist die Seitenladezeit. Als Referenzwerte für eine spätere Erfolgsmessung wird die Ladezeit jedes Seitentyps einzeln gemessen:<br />
<img src="http://www.syseleven.de/wp-content/uploads/curl.gif" alt="" title="Seitenladezeit" width="386" height="125" class="aligncenter size-full wp-image-1908" /></p>
<p>
<h1>Bottlenecks in MySQL finden</h1>
</p>
<p>Bei der Analyse von MySQL unterscheiden wir im Wesentlichen zwischen zwei Arten von Last:</p>
<ul>
<li>Den Datenbankabfragen, die ein einzelner Aufruf eines Seitentyps verursacht.</li>
<li>Der Gesamtauslastung aller Datenbankabfragen während des Livebetriebs.</li>
</ul>
<p>Für jeden der ermittelten Seitentypen wird analysiert, welche Datenbankabfragen bei einem einzelnen Seitenaufruf ausgeführt werden. Die „teuersten“ Queries kommen auf die Merkliste für eine genauere Untersuchung. Ich habe schon so Einiges gesehen und bin dennoch immer wieder überrascht wie viele Datenbankabfragen von einem einzigen Seitenaufruf verursacht werden können. Mehrere Hundert sind hier leider keine Seltenheit! Da gibt es oft  &#8211; ich formuliere es mal so &#8211; Verbesserungspotential. ;-)</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/SQL-Profile.png" alt="" title="SQL-Profile" width="434" height="196" class="aligncenter size-full wp-image-1912" /></p>
<p>In diesem Beispiel hat ein einzelner Aufruf der Startseite eines Online Shop 296 Datenbankabfragen verursacht, hier gibt es sicher den einen oder anderen Ansatzpunkt für eine genauere Untersuchung.</p>
<p>Die Gesamtbelastung der Datenbank wird untersucht, indem alle Datenbankabfragen, idealerweise während einer Lastspitze, in einem Logfile protokolliert werden. Aus diesem Logfile wird ein Query-Profil erstellt. Das ist eine nach Rechenzeit sortierte Liste ähnlicher Queries. Dabei ist die Verteilung der verbrauchten Rechenzeit relevant und nicht etwa die Ausführungszeit der einzelnen Queries. Dauert eine Abfrage beispielsweise sehr lange, wird aber nur selten ausgeführt, hat sie wenig Einfluss auf die Gesamtperformance. Uns interessiert also vielmehr, wieviel Anteil an der gesamten Datenbankrechenzeit auf ähnliche Queries entfallen.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/sql_profile.gif" alt="" title="sql_profile" width="427" height="233" class="aligncenter size-full wp-image-1915" /></p>
<p>Hier sieht man zum Beispiel, dass die obere Query (nur der Anfang ist dargestellt) 32,5% der gesamten MySQL-Rechenzeit ausgemacht hat. Diese Query ist somit unser Kandidat #1 auf dem Prüfstand ist. Ob es zusätzlich auch Queries gab, die 10 Sekunden gedauert haben, im Testzeitraum aber nur dreimal aufgerufen wurden, ist in der Gesamtbetrachtung der Performance unerheblich.</p>
<p>
<h1>Zwischenstand</h1>
</p>
<p>Bevor es an das PHP-Profiling geht, lohnt sich an dieser Stelle eine Zwischenrechnung, die für jeden der anfangs ermittelten Seitentypen einzeln angewendet wird:</p>
<p>Seitenladezeit &#8211; Summe der Zeit aller MySQL-Queries &asymp; Ausführungszeit in PHP</p>
<p>Das Ergebnis entspricht nur sehr grob der PHP-Ausführungszeit, dennoch können wir den Wert an dieser Stelle als Entscheidungsgrundlage benutzen, ob sich jeder weitere Aufwand überhaupt noch lohnt oder ob die Bottlenecks bereits gefunden sind.</p>
<p>
<h1>Bottlenecks in PHP finden</h1>
</p>
<p>Für das Profiling in PHP gelten im Grunde dieselben Regeln wie für MySQL. Jeder Seitentyp wird einzeln untersucht. Auch hier ist besonders die Verteilung interessant. Welche Klasse oder Methode verursacht wie viel Prozent der gesamten Ausführungszeit?</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/php_profile.gif" alt="" title="php_profile" width="425" height="266" class="aligncenter size-full wp-image-1918" /></p>
<p>
<h1>Fazit</h1>
</p>
<p>Die Performance einer Webseite zu steigern ist einfach &#8211; wenn man vorher die tatsächlichen Bottlenecks gefunden hat. Sehr oft begegnen uns Projekte, bei denen alle möglichen Best-Practices angewendet wurden und die Seite dennoch unbefriedigend langsam ist. Kein Wunder, wenn an den echten Bottlenecks vorbei-optimiert wurde. Der Erfolg bleibt aus und der Frust ist groß. Ein detailliertes Performance-Profiling ist zwar sehr komplex und aufwendig, es rentiert sich aber sehr schnell durch echte Ergebnisse.</p>
<p>
<h1>Wann bekommt Ihre Webseite den SysEleven Faktor?</h1>
</p>
<p>SysEleven ist spezialisiert auf High-Performance-Webseiten und wir sind stolz auf jedes einzelne bei uns betreute Projekt. Wir freuen uns persönlich über jede neue Herausforderung. Derzeit liegt der Rekord bei 1440 MySQL Queries für einen einzigen Seitenaufruf.</p>
<p>Wer bietet mehr? ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/1906/performance-profliling-bei-syseleven/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Neue Anschrift, neue Rufnummer</title>
		<link>http://www.syseleven.de/blog/1886/neue-anschrift-neue-rufnummer/</link>
		<comments>http://www.syseleven.de/blog/1886/neue-anschrift-neue-rufnummer/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 16:54:40 +0000</pubDate>
		<dc:creator>Andreas Mauf</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Neues]]></category>
		<category><![CDATA[Kreuzberg]]></category>
		<category><![CDATA[Umspannwerk]]></category>
		<category><![CDATA[Umzug]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=1886</guid>
		<description><![CDATA[Mit tatkräftiger Unterstützung verließen wir vergangenen Samstag unsere Büros am Hackeschen Markt. In diesem Rahmen haben wir auch neue Rufnummern erhalten.]]></description>
			<content:encoded><![CDATA[<p>Mit tatkräftiger Unterstützung verließen wir vergangenen Samstag unsere Büros am Hackeschen Markt. In diesem Rahmen haben wir auch neue Rufnummern erhalten.</p>
<p><a href="http://www.syseleven.de/wp-content/uploads/IMAG01241.jpg"><img src="http://www.syseleven.de/wp-content/uploads/IMAG01241-420x251.jpg" alt="" title="IMAG0124#1" width="420" height="251" class="aligncenter size-medium wp-image-1887" /></a></p>
<p>Nach fast 9 Jahren wurde es Zeit für eine Veränderung. Vor allem der steigende Platzbedarf hat uns dazu bewegt nach neuen, größeren Büroräumen zu suchen. Nach zahlreichen Besichtigungen fiel die Wahl auf das alte Umspannwerk in Kreuzberg. Vielleicht weniger zentral gelegen bietet es uns doch eine schöne und großzügige Fläche für all unsere aktuellen und zukünftigen Mitarbeiter.</p>
<p>Das <a href="http://www.luise-berlin.de/lexikon/frkr/u/umspannwerk_paul_lincke_ufer.htm">Umspannwerk</a> wurde 1924 bis 1928 erbaut. Es befindet sich direkt am Paul-Linke-Ufer.</p>
<blockquote><p>Die Fassaden der Stahlskelettbauten wurden im expressionistischen Stil bzw. im Stil der Neuen Sachlichkeit gestaltet und mit buntglasierten Eisenklinkern versehen. Der seitliche Turmbau brachte dem Gebäude den Beinamen &#8220;Kathedrale der Elektrizität&#8221; ein.</p></blockquote>
<p><a href="http://www.syseleven.de/wp-content/uploads/IMAG01912.jpg"><img src="http://www.syseleven.de/wp-content/uploads/IMAG01912-420x251.jpg" alt="" title="IMAG0191#2" width="420" height="251" class="aligncenter size-medium wp-image-1902" /></a><br />
<br/><br />
Zur Jahrtausendwende wurde das Gebäude kernsaniert und enthält neben modernen Büroflächen auch eine loungige Bar im Souterrainbereich sowie eine Eventhalle.</p>
<p>Das Hosting für Fortgeschrittene operiert nun also aus der <strong>Ohlauer Str. 43 in 10999 Berlin</strong> Kreuzberg. Nahegelegene U-Bahnstationen sind die Schönleinstraße (U8) und der Görlitzer Bahnhof‎ (U1). Sie erreichen uns ab sofort unter der <strong>Telefonnummer 030/233 2012 -0</strong>. Der technische Support hat die Durchwahl 30.</p>
<p>PS: Du willst auch bei uns arbeiten? <a href="http://www.syseleven.de/?tag=Stellenausschreibung">Bewirb Dich</a>! </p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/1886/neue-anschrift-neue-rufnummer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP RAM-Verbrauch in Logfile protokollieren</title>
		<link>http://www.syseleven.de/blog/1820/php-ram-verbrauch-in-logfile-protokollieren/</link>
		<comments>http://www.syseleven.de/blog/1820/php-ram-verbrauch-in-logfile-protokollieren/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 12:18:46 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Logfile]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RAM]]></category>
		<category><![CDATA[Tipps]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=1820</guid>
		<description><![CDATA[So können Sie den RAM Verbrauch einer PHP Applikation im Apache Logfile protokollieren.]]></description>
			<content:encoded><![CDATA[<p>
Beim Debugging eines aktuellen Problems, fiel uns auf, dass PHP Prozesse auf dem betroffenen Drupal Application Server ungewöhnlich viel Arbeitsspeicher verschlungen haben. Üblicherweise rechnen wir mit zwischen 20 und 60  MB pro Apache (PHP) Prozess. Hier fanden sich Ausreißer mit teilweise über 200 MB.
</p>
<p><br/><br />
<img src="http://www.syseleven.de/wp-content/uploads/2011/07/Prozessliste.gif" alt="" title="Prozessliste" width="430" height="144" class="aligncenter size-full wp-image-1821" /><br />
<br/></p>
<p><h1>Zuordnung zu URLs</h1>
<p>In der Prozessliste fehlt uns jedoch eine entscheidende Information: Welche URL hat diesen Prozess ausgelöst, der außergewöhnlich viel Arbeitsspeicher verbraucht? Was wir suchen ist eine Zuordnung zwischen dem Prozess und der im Browser aufgerufenen URL. Da alle Zugriffe auf die Webseite im Apache Logfile protokoliert werden, liegt Nahe an dieser Stelle anzusetzen.
</p>
<p>
Unser Ziel ist also, innerhalb der Applikation den maximal verbrauchten Arbeitsspeicher zu ermitteln und den Wert an Apache zu übergeben, damit dieser im Logfile protokoliert werden kann. Wir nutzen hierfür die beiden PHP Funktionen memory_get_peak_usage() und apache_note():<br />
<code><br />
# get the maximum ram<br />
$debug_ram = memory_get_peak_usage();</p>
<p># make it visible to apache<br />
apache_note("x-php-ram", $debug_ram);<br />
</code>
</p>
<p><h1>Implementierung in die Applikation</h1>
<p>Wir wollen natürlich nicht in der Applikation suchen, an wie vielen Stellen wir den Code einfügen müssen, damit wir bei jedem Aufruf den RAM-Verbrauch messen können. Für unsere Debugzwecke machen wir uns eine globale Funktion zu nutze: In der <strong>php.ini</strong> können wir definieren, dass am Ende von jedem PHP Aufruf zusätzlicher Code ausgeführt wird:
</p>
<p><code><br />
; Automatically add files<br />
;auto_prepend_file =<br />
auto_append_file = /var/www/x-php-ram.php<br />
</code></p>
<p><h1>Implementierung in Apache</h1>
<p>Um die Werte auch wirklich im Logfile zu sehen, verändern wir das Logfileformat in Apache:</p>
<p><code><br />
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" PHP-RAM: %{x-php-ram}n" combined_memory</p>
<p>CustomLog /var/log/apache2/access.log combined_memory<br />
</code>
</p>
<p><h1>Ergebnis</h1>
<p>Jetzt sehen wir wie viel Arbeitsspeicher jeder einzelne Aufruf einer Webseite verbraucht hat:
</p>
<p><code><br />
/ PHP-RAM: 91106128<br />
/fotos/deutschland-besiegt-kanada PHP-RAM: 110486240<br />
/page/hitfinder PHP-RAM: 81736024<br />
/fotos/wetten-dass-abschied PHP-RAM: 96412776<br />
/shows/schreckliche-urlaubsmode PHP-RAM: 98604800<br />
/musik PHP-RAM: 95526032<br />
</code></p>
<p>
In diesem konkreten Fall hat uns diese Debug-Information leider nicht weitergeholfen. Es gab keine Ausreißer, im Grunde haben alle Aufrufe ungewöhnlich viel Arbeitsspeicher verbraucht. In dieser Drupal-Installation sind sehr viele Module installiert, so dass tatsächlich viel RAM verbraucht wird. Durch den Einsatz von <a href="http://pecl.php.net/package/APC">APC</a> konnten wir letztendlich den RAM-Verbrauch auf die Hälfte reduzieren und das Problem entschärfen. Dazu aber mehr in einem anderen Blogpost&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/1820/php-ram-verbrauch-in-logfile-protokollieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lastverteilung und Caching mit Nginx</title>
		<link>http://www.syseleven.de/blog/1756/lastverteilung-und-caching-mit-nginx/</link>
		<comments>http://www.syseleven.de/blog/1756/lastverteilung-und-caching-mit-nginx/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 09:49:03 +0000</pubDate>
		<dc:creator>Andreas Mauf</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Lastverteilung]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Proxy]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=1756</guid>
		<description><![CDATA[Nginx (sprich "engine x") ist ein sogenannter Reverse Proxy. Dieser kann sowohl die Last auf mehrere Anwendungsserver verteilen, aber auch Dateien zwischenspeichern und diese selbst an den Browser ausliefern.]]></description>
			<content:encoded><![CDATA[<p>Nginx (sprich &#8220;engine x&#8221;) ist ein sogenannter Reverse Proxy. Dieser kann sowohl die Last auf mehrere Anwendungsserver verteilen, aber auch Dateien zwischenspeichern und diese selbst an den Browser ausliefern.</p>
<h2>Lastverteilung</h2>
<p>Als klassischer Loadbalancer wird <a href="http://wiki.nginx.org/Main">Nginx</a> an vorderster Front der Serverarchitektur eingesetzt und erhält somit alle eingehenden Anfragen der Webseitenbesucher. Die Verteilung auf die dahinter liegenden Anwendungsserver erfolgt im Rundlauf-Verfahren (<a href="http://de.wikipedia.org/wiki/Round_Robin_(Informatik)">Round Robin</a>) oder unter Berücksichtigung von Parametern wie der Gewichtung. </p>
<pre class="brush: plain; title: ; notranslate">
upstream appserver {
  server app1.webseite.tld weight=5;
  server app2.webseite.tld weight=5;
}

location / {
  proxy_pass http://appserver;
}
</pre>
<h2>Zwischenspeicherung</h2>
<p>Die Anwendungsserver sind meist mit PHP-Modulen dick bepackt und haben daher einen großen Speicher-Fußabdruck. 20 bis 30 MB sind da keine Seltenheit. Der Nginx im Vergleich dazu hat meist nur rund 5 MB. Es macht daher Sinn vor allem statische Dateien wie Bilder, CSS und Javascripte für mind. 24 Stunden zwischenzuspeichern und die Anwendungsserver damit zu entlasten. Über die <code>location</code>-Anweisung kann gesteuert werden, welcher Teil der Webseite wie gecached werden soll.</p>
<pre class="brush: plain; title: ; notranslate">
proxy_cache_key $host$request_uri;
proxy_cache_path /var/www/cache/images  levels=1:2 keys_zone=images:500m;

location /images {
  proxy_cache images;
  proxy_cache_valid 24h;
  proxy_pass http://appserver;
}
</pre>
<p>Möchte man einen Eintrag im Zwischenspeicher vorzeitig löschen, etwa um eine neue CSS-Datei zu veröffentlichen, benutzt man entweder Versionsnummern, die an die URL per GET angehängt werden, oder das &#8220;<a href="http://labs.frickle.com/nginx_ngx_cache_purge/">ngx_cache_purge</a>&#8220;-Modul und eine spezielle Lösch-URL nach dem Schema &#8220;http://www.webseite.tld/cache-purge/?url=www.webseite.tld/images/bild1.jpg&#8221;.</p>
<pre class="brush: plain; title: ; notranslate">
location ^~ /cache-purge/ {
  allow 127.0.0.1;
  deny all;
  proxy_cache_purge images $arg_url;
}
</pre>
<h2>Auswertung</h2>
<p>Um eine <em>Hit Rate</em>, also die Anzahl der Anfragen, die direkt aus dem Zwischenspeicher bedient werden konnten, im Verhältnis zur Summe aller Anfragen zu berechnen, sollte das Protokoll im Nginx aktiviert und weitere Infos ergänzt werden: Konnte die Anfrage aus dem Cache bedient werden? Welcher Anwendungsserver hat die Anfrage verarbeitet und wie lange hat er dafür benötigt.</p>
<pre class="brush: plain; title: ; notranslate">
log_format proxy '[$time_local] Cache: $upstream_cache_status $upstream_addr $upstream_response_time $status $bytes_sent $proxy_add_x_forwarded_for $request_uri';

access_log /var/log/nginx/webseite.tld.access_log proxy;
</pre>
<div id="attachment_1795" class="wp-caption aligncenter" style="width: 430px"><a href="http://www.syseleven.de/wp-content/uploads/2011/06/nginx-hits.png"><img src="http://www.syseleven.de/wp-content/uploads/2011/06/nginx-hits-420x93.png" alt="" title="Nginx, Cache-Hits pro Sekunde" width="420" height="93" class="size-medium wp-image-1795" /></a><p class="wp-caption-text">Nginx, Cache-Hits pro Sekunde</p></div>
<h2>Schmankerl</h2>
<p>Nutzt die Webseite SSL macht es Sinn auch diesen Prozess in den Proxy auszulagern. So entfällt auf allen Anwendungsserver die SSL-Konfiguration, das Laden des SSL-Moduls und natürlich auch der Aufwand durch die Aushandlung der SSL-Verbindung.</p>
<pre class="brush: plain; title: ; notranslate">
ssl on;
ssl_certificate /etc/ssl/private/webseite.tld.crt
ssl_certificate_key /etc/ssl/private/webseite.tld.key;
</pre>
<p>Die Komprimierung von Text-Dateien spart erheblich Übertragungszeit und Netzwerktraffic, belastet allerdings auch den Prozessor und sollte daher ebenfalls auf den Proxy ausgelagert werden. Denn dieser benötigt selbst kaum Rechenleistung.</p>
<pre class="brush: plain; title: ; notranslate">
gzip on
gzip_types text/plain application/xml;
gzip_disable &quot;MSIE [1-6]\.&quot;
</pre>
<div id="attachment_1810" class="wp-caption aligncenter" style="width: 430px"><a href="http://www.syseleven.de/wp-content/uploads/2011/06/nginx-cpu.png"><img src="http://www.syseleven.de/wp-content/uploads/2011/06/nginx-cpu-420x141.png" alt="" title="Nginx, CPU-Auswertung, 2x Xeon @ 2.33GHz" width="420" height="141" class="size-medium wp-image-1810" /></a><p class="wp-caption-text">Nginx, CPU-Auswertung, 2x Xeon @ 2.33GHz</p></div>
<h2>Fazit</h2>
<p>Der Nginx hat sich als bei SysEleven als Proxy bewährt. Er ist robust und vielseitig konfigurierbar. Statische Dateien kann er leicht und effektiv zwischenspeichern und selbst ausliefern. Mit weiteren Modulen wie FastCGI, Memcached und SSI kann er zum wahren Multi-Talent werden. Doch dazu später mehr.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/1756/lastverteilung-und-caching-mit-nginx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

