woensdag 17 september 2008

Case Studie - extreem upscalen van Shaklee

Shaklee is terecht gekomen op een landelijke (US landelijk dus) talkshow waarbij de site werd getoond. Vantevoren was ze verteld dat hun website zou crashen, want dat gebeurde bij elke website die daar getoond werd. Met 20MIO (20.000.000) kijkers is daar een aardige groep mensen die mogelijk zouden surfen naar hun site. Vóór deze show hebben ze hun infrastructuur onder de loep genomen en ontdekten dat ze 5 jaar niets eraan hadden gedaan,
omdat ze maar zo'n 10% per jaar groeien.

Welke uitdagingen hebben ze zichzelf opgelegt? Het beperken van zo'n beetje alles per transactie. Hieronder hun strategie in een notedop:

Beperken van Server Requests per Transaction
Je kunt de request naar je eigen server beperken door statische content naar andere sites te verplaatsen. Dus plaatjes, flash, video's werden naar gedistribueerde netwerken geporteerd (CDN, Akamai, Limelight).

Beperken van server CPU en geheugen gebruik per transactie
SSL encryptie werd door gespecialiseerde hardware op zich genomen. Alle pagina's werden weer statisch gemaakt, met maar een paar uitzonderingen (standaard is dat tegenwoordig meeste pagina's dynamisch zijn). En het gebruik van Layer 4 load balancing. Ook hebben ze zoveel mogelijk module's uit Apache gestript en er werd níet geclusterd (voor een eenvoudige
webshop was clustering geen voordeel). Session management was uitgezet, omdat de enige belangwekkende informatie zou zijn: product en prijs.

Beperken van netwerkbelasting per transactie
Om te beginnen werd alle HTML geoptimaliseerd dus Dreamweaver eruit en HTML met de hand doen. De plaatjes die gebruikt werden waren zeer strikt qua formaat en geoptimaliseerd voor het web. Verder werd er alleen HTTP1.1 gebruikt en werd de NAS er uit gegooid.

Beperken van zwakke punten in het netwerken
Ze hebben meerdere ISP's genomen waardoor ze meerdere lijnen binnenkregen in hun datacenter en ze hebben een aantal 'slapende' systemen ingezet (routers, switches, firewalls, ethernet cards in de servers).

Beperken van zwakke punten in applicaties
Hun applicaties zijn zo gebouwd dat ze minimaal gebruik maakten van webservices en (verbazingwekkend) hebben ze de database er uit gegooid om deze schakel te elimineren. Verder hebben ze ook de realtime verbindingen met bijvoorbeeld de Creditcard companies en met hun magazijn uitgeschakeld. Ook werd zoveel mogelijk rekenkracht aan de client kant gebruikt (creditcard check met javascript, naam- en adrescheck met javascript (waardoor je ongeveer 0,5% van je klanten misloopt) en een cookie-based shopping cart om het gemis van een dB op te vangen).

Andere dingen
De analysefunctie van de website was uitgezet, met name omdat de pakketleverancier niet kon garanderen dat onder de druk hij niet zou bezwijken. Verder hebben ze het zo gemaakt dat checkout op slechts één pagina komt. En, als extra backup: een pagina met 'sorry' en het telefoonnummer van de tele-winkel. Orders werden gebatched en pas verwerkt zodra het verkeer het toeliet (zodat je bevestigingsmail pas later verwerkt, CreditCard/adres en orders later controleert, etc).

Feathterweight Design Pattern
Ze hebben gebruik gemaakt van het Featherweight DP waarover ik echter op het 'net weinig heb kunnen vinden. Een paar kernpunten eruit zijn: geen externe service calls, zoals adress verificatie. Elke webserver was standalone en zónder cluster management. Stateless server sessions.

Het eindresultaat?
HTML traffic op 60MBit/seconde, grafisch 200MBit/seconde, 8500 requests/seconde op de servers. En dit alles gebouwd in 20 dagen (én getest) met Zend.

Geautomatiseerd websites testen met Selenium

Selenium werd gepresenteerd door Stefan Priebsch en zijn statement is heel duidelijk: automatiseer zoveel mogelijk, want een test zoekt alleen maar uit of de output komt zoals hij voorspeld is.

Hiertoe hebben ze een Firefox plugin gemaakt (die in zichzelf bijna een IDE is) waarmee je een pagina of website geautomatiseerd kunt testen. Het systeem is gebaseerd op het testen van de events die een bepaalde handeling oproept, inplaats van het emuleren van handelingen (dus niet de coördinaten van de muis wanneer hij klikt, maar het specifieke event dat hij afvuurt). Dit heeft als voordeel dat layout van een site veranderd kan worden als de namen maar gelijk blijven, zonder je test te storen.

Behalve de IDE zelf hebben ze ook een Remote Control Server waarmee je, in combinatie met de IDE per browser, meerdere sites kunt testen.

IDE: http://selenium-ide.openqa.org/
RC: http://selenium-rc.openqa.org/

Andere handige weetjes:
Continuous Integration met Cruisecontrol en phpundercontrol en het gebruik van PhPUnit en kijk ook eens naar KVM als alternatief voor VMWare.

Met Selenium kun je dus diverse Browsers, OS'en, Databases, configuraties en versies testen met slechts één pakket. Ziet er goed uit.

PHP op Windows

De derde presentatie die ik volg expliciet over Microsoft en Open Source. Garrett Serack werkt voor het Open Source Lab van Microsoft. Microsoft, zo geeft hij aan, is aan het veranderen.

PHP op Windows bestaat al een jaar of 10 zelfs. Het draait namelijk op Apache en IIS en biedt veel ondersteuning voor Windows Features. PHP binnen Windows wordt meestal gebruikt in een ontwikkelomgeving maar daarna meestal buiten een Windows omgeving gedeployed.

Microsoft accepteert dat PHP belangrijker (in meerdere of mindere mate gedwongen en/of geassisteerd door de community) wordt en is bezig te onderzoek hoe het beter kan draaien op Windows. Actueel voorbeeld hiervan is FastCGI voor IIS waardoor PHP stabieler én sneller draait (standaard op Windows Server 2008) en te downloaden voor XP en Vista.

SQL Server is een ander voorbeeld waarbij de community betrokken is geworden en waarbij ook het SQL Server team van MS native support voor PHP in SQL Server heeft gebracht. De code van deze driver is te vinden op CodePlex met een OS licence.

Verder legt hij uit dat er een proces binnen Microsoft is ontstaan voor het geven van patches aan de community voor hun Open Source producten. ADODB is hier een voorbeeld van.

PHP5.3 wordt voor Windows een belangwekkende update. Elke afhankelijke library is bijgewerkt. Leuk om te weten: PHP5.3 is gecompileerd met Visual C++ in Visual Studio 2008 en verkrijgbaar in x86 én x64 versies.

Windows SDK: http://tinyurl.com/6z57rv
FastCGI: http://iis.net/php
PHP 5.3 builds: http://snaps.php.net/

Na deze presentatie begin ik er inmiddels van overtuigd te raken dat het Microsoft menens is met de steun voor PHP.

PHP voor desktop applicaties - PHP-GTK2

Wederom door Elisabeth Smith. PHP op de desktop? Nou, ja dus. Je bent namelijk niet altijd online, hebt voor sommige applicaties (zoald 3D en animaties) teveel bandbreedte nodig, data kan gewoon té gevoelig zijn om online te bewaren, embedded software doet het niet altijd goed en Browsers zijn gewoon onbetrouwbaar.

Nadelen van PHP ontwikkelen op de desktop is vooral snelheid, distribueren, veiligheid en het gebruik van threading.

Een paar mogelijkheden zijn PHP-GTK2 en Winbinder (alleen voor PHP4 deze laatste). Er zijn ook nog wat programma's in ontwikkeling zoals PHP-QT, Win::Gui en WxWidgets.

Elizabeth gaat dieper op GTK in en begint met een installatie-hulp die niet in de GTK documentatie te vinden is: http://oops.opsat.net/doc/install.html

Hierna was ik haar kwijt, ik hoop dat Robert aanvullingen kan geven. :)

Meer info op http://callicore.net/php-gtk/php-gtk-twitter.zip en ../php-on-the-desktop.pdf

Server onafhankelijk PHP programmeren

Eddo Rotman heeft me meegenomen op een reis door de wondere wereld van serveronafhankelijk programmeren. Het voorbeeld dat hij aandraagt (PHP code die wel locaal draait maar dan niet op hosting provider X of Y) sprak mij erg aan.

Hij geeft gedurende de presentatie een 3voudige demo met een site op 2 apache configuraties en op IIS7 laten zien dus het was goed aanschouwelijk!

Constanten
PHP_EOL, DIRECTORY_SEPARATOR, PATH_SEPARATOR en PHP_INT_MAX zijn al in PHP ingebouwd.

Als voorbeeld, dus niet
fopen ('data\datafile.xml');
maar
fopen ( 'data' . DIRECTORY_SEPARATOR . 'datafile.xml');

Directives
Deze kunnen door verschillende distributies verschillen geïnterpreteerd worden.
Tags kunnen verschillen geïnterpreteerd worden, afhankelijk of asp_tags[off] staat bijvoorbeeld. Gebruik dus altijd volle tags , want die werkt altijd. Ook register_globals en magic_quotes_gps zouden uit kunnen staan, als veiligheidsmaatregel. Ook errors moet je zelf afvangen, voor als display_errors of error_reporting op off staat. max_execution_time, upload_max_filesize en include_path moet je ook rekening mee houden.

Gebruik dan ook een stricte php.ini bestand, gebaseerd op php.ini-recommended. Pas verder de PHP_INI_ALL en PHP_INI_USER runtime aan om te doen wat je wil.

Core Functions
Omdat PHP van origine op Linux is ontwikkeld kan er nog wat achtergebleven zijn wat anders werkt op Windows bijvoorbeeld. Denk hierbij aan setlocale(), chmod(), is_link() , proc_open() en shell_exec(). Voor tijd kun je bijvoorbeeld date_default_timezone_set("GMT"); doen.
Ook handig zijn sys_get_temp_dir() en tempnam() die je kan helpen runtime informatie op te halen over de server.
Er zouden ook extentions kunnen missen waardoor je bepaalde functies mist. Vang dit dan op met function_exists() en extention_loaded().

disable_functions en disable_classes kunnen in de directive staan, daarvoor ook is function_exists() te gebruiken, die dan false teruggeeft.

Frameworks
De meeste frameworks zullen over het algemeen betrouwbaar zijn qua cross-server coding. Gelukkig is het allemaal OS dus kun je kijken of dat klopt.. :)

Bootstrapping
Gebruik een bootstrap.php om op diverse zaken te controleren en die ventueel af te vangen.

Kort en goed: wees je bewust hiervan!

Stand van zaken AJAX

Deze after lunch keynote van Dion Almaer gaat in op het gebruik van AJAX (RIA's) in de tegenwoordige en toekomstige tijd. Eén van de belangrijke dingen die hij aangeeft is dat er veel te maken heeft met de verwachtingen; door de huidige ontwikkelingen op grafisch gebied gaan de verwachtingen van gebruikers omhoog en zul je dus ook mooiere dingen moeten maken, zelfs als de functionaliteit van de site daar niets mee te maken heeft.

Balangrijk om te onthouden is dat de User Interface opgebouwd is uit Visual Design én Interaction Design. Voorbeeld van hoe het niet moet, is Vista.

Een leuk open source project is Google Gears is een systeem dat background treads in browsers kan aansturen waardoor je de user experience vergroot op het gebied van reactiesnelheid. Demo helaas niet gezien, weer een demo die niet werkt. (sidenote: belangrijke les van dit seminar: demo's werken niet, hou me tegen als ik dat ooit eens wil gebruiken).

Een nieuwe HTML5 standaard die er aan komt is Canvas die enorm veel snelle grafische mogelijkheden heeft vanuit de browser. Deze kan in IE geïmplementeerd worden in Flash en via Silverlight, en google schijnt er een bridge voor gemaakt te hebben; het bestaat al voor Safari (SquirrelFish) en Firefox (TreaceMonkey); Google heeft Chrome V8.

Verder liet hij zien hoe je met een Wii in een Javascript Dartgame kunt spelen. Ja, Javascript, dus in een browser!

Het is echter niet alleen client side dat belangrijk is. De Google App Engine ondersteunt nu all Python RIA Backends.

Leuke en informatieve presentatie!

Digitale Identiteit

Rob Richards is onze huis-neuroot die wat dingen vertelt over digitale identiteit en de zaken die daarmee te maken hebben. Hij geeft duidelijk aan wat de problemen zijn met digitale identiteiten, met name het bewijzen dat je bent wie je zegt dat je bent.

Ander problemen zijn dat je veel moet onthouden en goochelen me je logins en wachtwoorden, dat je informatie ergens wordt opgeslagen, dat jij als gebruiker geen idee hebt wie of wat jouw informatie gebruikt, dat authenticatie heel divers is en steeds opnieuw wordt uitgevonden.

Iets om te onthouden is bijvoorbeeld de 7 Laws Of Identity. Ook is het goed om na te denken over verschillende soorten van identiteit die je uit wil geven.

OpenID
Dit nieuwe initiatief maakt dat je Singe Sign On kunt gebruiken en toch je privacy kunt behouden. Het is gedecentraliseerd (dus niet afhankelijk van één instituut), geeft jou controle over je informatie, zorgt dat je minder info aan individuele sites hoeft te geven en kan je volop laten genieten van wat het Web biedt zonder aan privacy in te boeten. Het is overigens een volkomen gratis en OS community initiatief.
Het gebruikt een URL om je te verificeren, het is volkomen hardware onafhankelijk (wel makkelijk, niet veilig) en vrij eenvoudig.

OpenID (voor versie 2.0) is nog niet perfect. Je kunt nog steeds Phishen en Pharmen, XCC, CSRF doen en diverse andere nare zaken, plus dat jouw OpenID provider elke site weet waar je komt.

OpenID 2.0 kan hier beter mee omgaan en heeft wat voordelen. Zend OpenID propositie hier.

Information Cards
Een alternatief is Information Cards waarmee je Identities kunt aanmaken online, vergelijkbaar met een aantal identiteiten (pasjes) in een portemonnee. Het biedt unieke identifiers per site, heeft phishing bescherming, een x509 certificaat en gbruikt complexe technologieën (waar OpenID simpele techniek gebruikt). Het lijkt beter te zijn maar is nog erg beperkt qua verspreiding. MicroSoft doet hier veel mee met Windows Cardspace.

Al met al een leuke kennismaking met Identities en ik ga zeker iets er mee doen zelf de komende tijd!