Archiv für MyOOS Performance

Simple Cloud vereinfacht Cloud Computing mit PHP

Bei Simple Cloud (Simple API for Cloud Application Services) handelt es sich um ein Open-Source API, mit der der Zugriff auf verschiedene Cloud-Services aus PHP heraus über eine standardisierte Schnittstelle ermöglicht wird.

D.h., ein Wechsel des Cloud-Services sollte zukünftig bei Nutzung dieser API keine Änderungen im Quellcode mehr notwendig machen.

Zur Zeit unterstützt Simple Cloud Adapter für File-Storage (Windows Azure blobs, Rackspace Cloud Files, Nirvanix Storage Delivery Network und Amazon S3), Document-Storage (Windows Azure tables und Amazon SimpleDB) und Simple-Queue Dienste (Amazon SQS und Windows Azure Queues).

Weitere Informationen

Simple Cloud
PHP-Magazin
heise.de

Tags: , , , ,

Der “Expires”-Header

In dem Artikel “Speed Up: Optimierungstipps für Ihre Seiten” fasst Nelly Brekardin bei Dr. Web einige Tipps für die Optimierung von Websites zusammen.

Für unser Projekt war vor allem der Punkt “Die richtigen HTTP-Header senden” hilfreich. Hier wird beschrieben, wie man mit Hilfe der .htaccess Konfiguration die HTTP-Header Expires und Cache-Control sendet.

Adam stellte im MyOOS Forum (Anmeldung erforderlich)

# Configure ETags
<FilesMatch "\.(jpg|jpeg|gif|png|mp3|flv|mov|avi|3pg|html|htm|swf)$">
    FileETag MTime Size
</FilesMatch>

ETags im .htaccess

vor.

Vladimir Simovic stellt in dem Artikel WordPress-Websites beschleunigen 4: ein Zwischenergebnis seine Erfahrungen mit

# ExpiresHeader: verhindert bedingte GET-Anfragen
<IfModule mod_expires.c>
   ExpiresActive on
   ExpiresDefault "access plus 35 days"
</IfModule>

zur Verfügung.

Wir verwenden nun im MyOOS Projekt

# Apache file caching and expiration.
    <FilesMatch "\.(jpg|jpeg|png|gif|ico|swf|css|js|txt)$">
        <IfModule mod_expires.c>
            # Enable expirations.
            ExpiresActive On
            # Cache all files for 35 days after access (A).
            ExpiresDefault  "access plus 35 days"
        </IfModule>
        <IfModule mod_headers.c>
            Header unset ETag
            FileETag None
        </IfModule>
    </FilesMatch>

Erfahrungsberichte sind willkommen. Meinungen… Tipps und auch Anleitungen. Alles mit dem Ziel,
unser Shop-System zu verbessern!

Tags: ,

Drizzle macht Fortschritte

Jay Pipes, Monty Taylor, Eric Day, Stewart Smith und Lee Bieber haben Oracle verlassen und wechseln zum US-Provider Rackspace. Alle Fünf arbeiteten zuvor bei MySQL an Drizzle und wollen das auch in Zukunft in Diensten von Rackspace tun. Der MySQL-Fork Drizzle ist auf reine Webanwendungen zugeschnitten, extrem modular aufgebaut und verzichtet auf viele Funktionen, die MySQL im Hinblick auf den Einsatz als Unternehmensdatenbank in den letzten Jahren erhalten hat. Stattdessen steht bei Drizzle die Verarbeitung sehr vieler paralleler Anfragen auf Multicore-Systemen im Vordergrund.

Quelle: Golem.de

Viele Funktionen wurden in Module ausgelagert, so dass sie leicht ausgetauscht werden können. Beispielsweise wurden Log-in und Authentifizierung ausgelagert, andere Funktionen bleiben von vornherein außen vor, darunter Stored Procedures, Views, Triggers, Query Cache und Prepared Statements. Auch die verfügbaren Feldtypen wurden reduziert.

Drizzle ist über die Projekt Seite erhältlich
http://drizzle.org/

 in

Die Drizzle PHP Extension ist leider noch in der Beta-Phase.
PECL: http://pecl.php.net/package/drizzle
und seit 7 Monaten ruht augenscheinlich die PHP Extension

1
print 'Version: ' . drizzle_version() . "\n\n";
1
2
3
4
5
6
7
print "##########################\n";
print "Testing function interface\n";
print "##########################\n";
 
$drizzle= drizzle_create();
if (!$drizzle)
exit(0);

Zur O’Reilly MySQL User’s Conference soll Drizzles Cherry veröffentlicht werden.

Tags: ,

Sphinx Search

Sphinx Search Engine, die – wie sie sich selber nennt – “Free open-source SQL full-text search engine” ist ein gutes Tool, um die Volltextsuche auf dem eigenen Server zu beschleunigen.

Installing Sphinx on Windows

Wir entpacken die Zip – Datei an
C:\Sphinx\

Kopieren searchd.exe aus dem Verzeichnis
C:\Sphinx\bin\
nach
C:\Sphinx\

Konfiguration von Sphinx

Wir editieren: C:\Sphinx\sphinx.conf.in und speichern als C:\Sphinx\sphinx.conf

# die Datenquelle
source src1
{
# data source type. mandatory, no default value
# known types are mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc
type = mysql

##########
{

Einstellungen für die Datenbank-Verbindung

sql_host = localhost
sql_user = root
sql_pass =
sql_db = test
sql_port = 3306 # optional, default is 3306

Für den ersten Testen legen wir die Datenbank test mit den Beispieldaten aus C:\Sphinx\example.sql an.

Definition des Indexes

# Aus welcher Quelle? (oben definiert)
index test1
{
# document source(s) to index
# multi-value, mandatory
# document IDs must be globally unique across all sources
source = src1

Wohin mit den Dateien?
path = @CONFDIR@/data/test1

# docinfo
# Drei Möglichkeiten: are “none”, “inline” and “extern”
#
# “none” keine Informationen zum Artikel werden gespeichert
#
# “inline” Infos landen in doclist Datei (nur über 50 Mil. Atikel sinnvoll)
#
# “extern” Infos landen in getrennter Datei
#
# Wohin mit DocInfos? “extern”, weil unter 50 000 000 Artikel!
docinfo = extern

# morphology = stem_en, stem_ru, soundex
# morphology = libstemmer_german
# morphology = libstemmer_sv
# (Ähnlichkeit anhand von Endungen)
# Bei soundex wird die Aussprache beachtet: google und googl sind gleich
# none -> Keine Ähnlichkeiten suchen
morphology = none

# Pfad zur Stoppwort-Datei (Datei mit Wörtern,
# die nicht indexiert werden sollen wie: “und”, “der”, “die”, “das”, “ein” )
#
# stopword files list (space separated)
# optional, default is empty
# contents are plain text, charset_table and stemming are both applied
#
stopwords = @CONFDIR@/data/stopwords.txt

Den Betrieb aufnehmen…

C:\Sphinx> C:\Sphinx\searchd --install --config C:\Sphinx\sphinx.conf
--servicename SphinxSearch

FATAL: OpenSCManager<> failes: code=5, error=Zugriff verweigert
Bei dieser Meldung die Zugriffsrechte unter Windows ändern. (Rechte Maustaste)

http://robert.kolatzek.org/wblog/34/sphinx-search-engine-installation-und-betrieb-eine-einleitung

Tags:

HipHop beschleunigt PHP Software

HipHop wandelt PHP-Code in C++ um, der anschließend mit g++ in nativen Maschinencode übersetzt und ausgeführt wird. Dabei umfasst HipHop einen Code-Transformer, eine Reimplementierung des PHP-Runtime-Systems und neu geschriebene Versionen häufig genutzter PHP-Erweiterungen, die von den durch HipHop vorgenommenen Optimierungen profitieren.

Haiping Zhao auf facebook Developers

Einführungsveranstaltung im Facebook-Firmensitz in Palo Alto

Quelle: golem.de und PHP Magazin

MariaDB release – Alternative zu MySQL

MySQL-Distribution integriert diverse Projekte aus dem MySQL-Umfeld

Die MySQL-Distribution MariaDB ist in einer ersten stabilen Version erschienen und soll MySQL in bestehenden Installation ersetzen. Dahinter steht Monty Program, das Unternehmen von MySQL-Gründer Michael “Monty” Windenius.

http://askmonty.org/wiki/index.php/MariaDB

Quelle: golem.de

Tags: ,

Gearman

Gearman ist ein System für die Verteilung von Arbeit auf andere Maschinen. Es sendet Funktionsaufrufe an für die Aufgabe besser geeignete Maschinen, sorgt für die parallele Arbeit an Aufgaben und den Lastausgleich vieler Funktionsaufrufe und sorgt sich um Funktionsaufrufe zwischen unterschiedlichen Programmiersprachen.

http://gearman.org/index.php?id=getting_started

<?php
$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("resize", "my_resize_function");
while ($worker->work());
 
function my_resize_function($job)
{
  $thumb = new Imagick();
  $thumb->readImageBlob($job->workload());
 
  if ($thumb->getImageHeight() > 600)
    $thumb->scaleImage(0, 600);
  else if ($thumb->getImageWidth() > 800)
    $thumb->scaleImage(800, 0);
 
  return $thumb->getImageBlob();
}
?>

Gearman: Build Your Own Distributed Platform in 3 Hours
PDF Gearman: Build Your Own Distributed Platform

* What Gearman is, and how it can be used to scale your application.
* Common architectures used in existing installations.
* Client APIs, including PHP, Perl, C, and MySQL UDFs.
* Basics of getting a simple system installed and running.
* Building database-driven URL mining application.
* Building your own Map/Reduce cluster.
* Persistent queues and replication for reliability.
* Statistics, monitoring, and tuning your applications.
* More use cases as time permits.

Quelle
http://en.oreilly.com/oscon2009/public/schedule/detail/8206

http://gearman.org/

Tags:

Produktbilder im Shop optimieren

In meinem Shop verwende ich bei der Produktauflistung Bilder in der Größe 234 x 351.

Hier ein Beispiel
04070906 in

Sie trägt auf dem Foto das Herren T-Shirt “Lieber Harald, kannst Du mir nicht etwas von Dir schicken… ” aus meiner Produktion.

http://www.r23.de/Maenner–T-Shirts/Entwuerfe-von-r23/Lieber-Harald-c-55_62_63.html

Die Datei ohne Optimierungen hat eine Größe von
83.16 KB (85152 Bytes)

04070906 in
http://www.r23.de/images/alt/04070906.jpg

Gerade für das Laden von statischen Bildern macht die Verwendung von Cookies kein Sinn und erhöht nur sinnlos den Trafic. Erstelle eine Sub-Domain und lade die statische Komponenten von dort. Ein weiterer Grund statische Komponenten von einer Cookie-freien Domain zu laden ist, dass einige Proxies keine Inhalte cachen wenn sie mit Cookies angefordert werden.

Ich verwende in meinem Shop den Image-Server unter der Adresse http://image01.r23.de/. wer die Möglichkeit hat kann seine Bilder zusätzlich über einen High Performance Webserver wie z.B. lighttpd ausliefern.

Die neue Adresse für den Image Server sind bei MyOOS Versionen bis 2.1 Änderungen an der Funktion
oos_image und an den Smarty Plguins erfoderlich.

Nach dem Umzug auf den Image Server erfolgt die Datei Optmierung.

Baseline oder pregressives speichern?

Laden von baseline JPEG,

Baseline in
Baseline JPEG-Dateien werden bei der Anzeige im Web zeilenweise aufgebaut.

Progressive in

Bei “progressive JPEG” werden ähnlich dem GIF-Format in der Variante “interlaced”, zuerst eine vollständige, aber noch undeutliche Fassung der Grafik am Bildschirm aufgebaut. Das erste, noch nicht ganz deutliche Bild kann bereits am Bildschirm angezeigt werden, nachdem etwa 15% der Grafikdatei an den aufrufenden Web-Browser übertragen wurden. Quelle Selfhtml

Bei Produktbildern werden wir im Shop progressive JPEG.

DPI-Dichte: Das ist die Punktdichte (dpi = dots per inch). Bei JPEG-Dateien, die wir im Shop verwenden genügt ein Wert zwischen 70 und 100 dpi.

Kompressionsfaktor: Je höher der Kompressionsfaktor, desto schlechter die Bildqualität. Je geringer der Kompressionsfaktor, desto größer die Datei.

Mit convert konvertiert man die Bilder in ein anderes Format.
http://www.linuxwiki.de/ImageMagick
http://www.imagemagick.org/script/index.php

convert datei.jpg -quality 90 /quality/datei.jpg

35.09 KB (35932 Bytes)

04070906 in

jpegtran -copy none -progressive -outfile datei.jpg 'quality/datei.jph;
33.24 KB (34036 Bytes)
04070906 in

Die Programme für die Reduzierung die ich hier verwendet habe gibt es auch für Windows

* ImageMagick
* jpegtran (with lossless crop)

Neben diesen gibt es eine große Zahl an Programmen, mit denen man seine Fotos verkleinern kann. Natürlich ist es ein gewisser Extra-Aufwand, sich eines dieser Programme herunterzuladen, zu installieren und sich zumindest in die Grundfunktionen einzuarbeiten.

Wir übernehmen gerne die Bildoptimierung für deinen Shop. Einfach eine unverbindliche Anfrage per
E-Mail senden. Unsere Arbeit ist modern, preiswert und
bringt Kunden.

Tags: ,

Server-Appliance beschleunigen MySQL und memcached

Schooner Information Technology kündigt mit der Appliance for MySQL Enterprise und der Appliance for Memcached seine beiden ersten Produkte an.

Als Appliances werden Geräte bezeichnet, die von Ausstattung, Konfiguration und Service-Optionen für einen bestimmten Einsatzzweck entwickelt wurden. Wie der Name schon sagt, soll die Appliance for MySQL Enterprise MySQL-Datenbanken beschleunigen, während die Appliance for Memcached für die Software memcached entwickelt wurde.

Wie man memcached im MyOOS Shop Projekt verwendet haben wir hier beschrieben
Memcache mit MyOOS

Vor wenigen Tagen wurde ein Update von memcached veröffetnlicht.

Tags: ,

Neue Memcached-Versionen veröffentlicht

Das Caching-System memcached
steht als Bugfix-Release in der Version 1.2.7 zur Verfügung.

Link
http://code.google.com/p/memcached/

Tags: ,