Andreas Bergman

Icon

Dela sessioner mellan webbservar i PHP

När jag kom på att jag skulle skriva det här inlägget så tänkte jag skriva det i en önskelista, “saker jag vill se under 2012″, och en av dom var “Vettigt stöd för delade sessioner i ett kluster”.

Men, allt eftersom jag började läsa så såg jag att det är ju redan löst, med funktionen session_set_save_handler eller direkt i php.ini med memcached, då är det session.save_handler som gäller. Som default så använder PHP files, men det finns inbyggt stöd för memcache och det är superenkelt att aktivera.

session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

Klart! Nu sparar PHP alla sessioner till din lokala memcacheburk, skulle du vilja spara det på en extern instans så är det bara att ersätta IP-adressen. Memcache är kanske inte helt optimalt för att spara data in, då det har en tendens att crasha och första datan. Så en kombination av (No)SQL och Memcache hade varit ett bra alternativ, SQL för säkerheten och Memcache för hastigheten, med NoSQL som typ MongoDB så kan man skippa Memcache.

I dokumentationen för PHP finns det bra exempel på hur du själv kan anpassa session_set_save_handler för att använda den backend du vill använda. @ChristofferP påpekade att bland annat PHP ramverket Litihum har stöd för alternativa session stores.

Fördelen med att kunna spara sessionen i ett delat storage är att man kan skippa sticky sessions när man lastbalanserar, och balansera jämnare över klustret. Om det är någon som vet om det finns ett smidigt sätt att inkludera sin egen sessionsklass i WordPress, säg till!

CodeIgniter slutar fungera när jag aktiverar *_Auth

Jag har precis haft en massa problem med att min site som är byggd i CodeIgniter slutar funka så fort jag laddar ett library, jag hann testa med Dx_Auth Tank_Auth och Ion_Auth innan jag kom på vad felet var.

Jag saknade paketet php-mysql på min CentOS maskin.

Det roliga i det hela var att varken PHP, Apache2 eller CodeIgniter sa att något var fel, vilket känns lite skumt faktiskt.

Screenshot på TrunkFish KVM Control integrerat i TrunkFish

Här kommer första screenshoten av TrunkFish KVM Control integrerat i TrunkFish!Lär mer om trunkfish här: http://dwall.in/blogg/trunkfish/varfor-skall-ett-crm-ha-kvm-styrning/

Version 0.1 PreAlpha av TrunkFish KVM Control

Första utkastet till TrunkFish KVM Control är nu klart, det är inte mycket för världen, men ett steg i rätt riktning!

Xen vs KVM

Jag har nu ett par dagar försökt få igång XEN på Debian och Ubuntu, men det har inte gått särskilt bra. Främst av det enkla skälet att Ubuntu uttalat sagt att man väljer att inte aktiva supporta XEN utan KVM. Varför det inte funkar i Debian kan jag inte svara på, men troligen för att XEN enligt rykten är väldigt svårt att underhålla i paketform, om det är sant eller inte låter jag förbli osagt.

Hur som helst så var det kalasenkelt att installera KVM i Ubuntu, så nu lirar det utan problem på laptopen. Visst det kanske inte är det ultimata att installera KVM på en laptop, men det funkar! Nu ska jag börja koda på någon form av webbgränssnitt för att styra KVM, tyvärr så verkar det inte finnas några riktigt bra PHP bindningar för libvirt, men jag har hittat det här (phplibvirt) som ser ut att supporta det jag vill ha.

..mer om .ODT i PHP

Jag har de senaste dagarna använt systemet i den här posten(http://www.abergman.se/skapa-odt-dokument-med-odtphp/) för att kunna generera dokument on the fly från variabler som jag själv anger, både placeholders i form av %PLACEHOLDER% och fördefinierad text. Allt är databasbaserat och fint.

Jag lärde mig att man inte kan deklarera variabler on-the-fly med php, MEN man kan använda arrayer, jag löste det såhär:

$variabel = data;
$array[$variabel] = $variabel;

Det innebär att $array[data]  = data. Det är ett smidigt sätt när man till exempel vill döpa variabler från värden i en databas. Den här lösningen kommer att användas för att generera bla avtal i Ngcrm.

Skapa .ODT dokument med odtPHP

Tack vare phpklassen odtPHP (http://www.odtphp.com/) så är det superenkelt att skapa ODT-dokument direkt på din server med php.

Du skapar ditt dokument med placeholders, sedan skapar du bara variabler med samma namn i koden, och vips så är det klart! All layout etc gör du direkt i ditt odt dokument som du använder som mall.

CodeIgniter och Twitter

När jag var ute innan idag så funderade jag på om man inte borde integrera twitter med en av våra produkter. Efter lite snabbt googlande hittade jag:

http://www.haughin.com/code/twitter/

Verkar inte alls svårt att göra integrationen på det sättet, underbart!

Benchmarktest Nginx vs Apache2 och Cherokee

Jag ska under natten och morgondagen företa mig att göra benchmarktester av Nginx, Apache2 och Cherokee. De två första är jag väldigt bekant med, men Cherokee bli en ny bekantskap för mig. Cherokee ska jag också passa på att presentera lite mer utförligt och se hur det fungerar med PHP, så det blir en benchmark av WordPress och PHP också, precis om i den här posten: http://www.abergman.se/w3-total-cache-och-nginx/

Precis som förra gången så kommer jag att publicera resultatet dels här och på www.cmsdirekt.se, stay tuned!

HipHop for PHP på Debian (Testing)

I mitt sökande efter bra sätt att optimera prestandan på maskinerna så sprang jag över “HipHop for PHP” som är utvecklat av killarna bakom facebook, som ett sätt för dem att kunna utnyttja sina maskiner bättre. Enligt egen utsago så har de kunnat halvera CPU-belastningen med upp till 50%!

Detta kan de uppnå genom att använda sig av HipHop for PHP som konverterar PHP:t till C++ och sedan kompilerar det, så man kan köra sin PHP-applikation som en demon, antingen direkt på port 80 och slippa ha en webbserver, eller som jag planerar göra; På någon annan obskyr port och använda Nginx som gateway.

Som vanligt när man ska testa något så får man inleda med att installera det, och då HipHop For php är relativt nytt så finns det ännu inga färdiga paket att installera, dessutom så kräver HipHop for PHP en del patchade paket för att funka, så vi är utlämnade till en manuell installation. När jag först skulle installera beroendena så provade jag på Debian Lenny, men tyvärr så fanns inte ett paket som hör ihop med libboost till Stable än, så istället för att försöka haxxa in det manuellt så valde jag att uppdatera burken till testing istället, då kunde jag utan problem dra in alla beroenden.

apt-get install cmake g++ libboost-dev flex bison re2c libmysqlclient14-dev libxml2-dev libmcrypt-dev libicu-dev openssl binutils-dev libcap-dev libgd2-xpm-dev zlib1g-dev libtbb-dev libonig-dev libpcre3-dev git-core autoconf libtool libcurl4-openssl-dev libboost-system-dev libboost-program-options-dev libboost-filesystem-dev

När det här är installerat, så är det dags att ge sig på HipHop for PHP och de paket som måste patchas och installeras manuellt, som jag uppfattar det så är patcharna skickade till respektive projekt för att komma med i paketet, men det verkar inte vara klart än. Först, ladda hem källkoden för HipHop:

mkdir hiphop
cd hiphop
git clone git://github.com/facebook/hiphop-php
cd hiphop-php
export CMAKE_PREFIX_PATH=`/bin/pwd`/../
export HPHP_HOME=`/bin/pwd`
export HPHP_LIB=`/bin/pwd`/bin
git submodule init
git submodule update
cd ..

Sedan är det dags att ladda ner  och patcha libevent.

wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
tar -xzvf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
cp ../hiphop-php/src/third_party/libevent.fb-changes.diff .
patch < libevent.fb-changes.diff
./configure --prefix=$CMAKE_PREFIX_PATH
make
make install
cd ..

Det ska inte vara något problem att kompilera, skulle du köra fast av någon anledning så får du skriva en kommentar så ska jag försöka hjälpa dig! Nästa i tur för att kompileras är ICU4, detta behöver inte patchas utan ska bara installeras.

wget http://download.icu-project.org/files/icu4c/4.2.1/icu4c-4_2_1-src.tgz
tar -xvzf icu4c-4_2_1-src.tgz
cd icu/source
./configure --prefix=$CMAKE_PREFIX_PATH
make
make install
cd ../../

Inga konstigheter där heller, nästa och sista paketet innan HipHop for PHP är libcurl, det är viktigt att komma ihåg -p0 som flagga i patch och att se till att tiden på maskinen är korrekt.

wget http://curl.haxx.se/download/curl-7.20.0.tar.gz
tar -xvzf curl-7.20.0.tar.gz
cd curl-7.20.0
cp ../hiphop-php/src/third_party/libcurl.fb-changes.diff .
patch -p0 < libcurl.fb-changes.diff
./configure --prefix=$CMAKE_PREFIX_PATH
make
make install
cd ..

Så var det dags för det sista innan vi kan testa; Kompilera HipHop for PHP!

cd hiphop-php
cmake .
make

Hela installationsprocessen är ganska straight forward och inga större konstigheter, dock så är den lite tidskrävande om man ska göra den på många maskiner. Hur man sedan använder HipHop återkommer jag med i ett senare inlägg.

För att testa så det fungerar som det ska så ska jag testa HipHop for PHP med ett enkelt “Hello World”-exempel: Läs det här

Källa: http://mediakey.dk/~cc/howto-install-hiphop-for-php-on-ubuntu/ som i sin tur tagit den från http://wiki.github.com/facebook/hiphop-php/building-and-installing-on-ubuntu-910

Den här bloggen

skriver jag, Andreas Bergman, vilket i sig inte bör vara så förvånande. Jag driver en SMS tjänst och jobbar som tekniker/allt i allo på SEA där jag bland annat driftar en stor bloggportal och ett webbhotell. Vi håller även på att bygga ett datacenter.


Jag har några microsoft titlar, ett gäng DELL certifikat och jobbar dagligen med hårt belastade webbservrar. Utöver det jobbar jag också med virtualisering och server/storage. Någon gång ibland säljer jag även server och storagelösningar.

Maila mig gärna om något av ovan, eller annat, jag är ganska trevlig sägs det. andreas@abergman.se.