FastCGI si WinCache ca mecanisme de accelerare a performantei

FastCGI si WinCache ca mecanisme de accelerare a performantei

Performanta PHP pe Windows a fost imbunatatita constant. In prezentarea lui Ilia Alshanetsky (Core PHP Developer) de la conferinta CooFoo 2010 (10-12 martie 2010) referitoare la PHP 5.3, acesta afirma ca performanta a fost imbunatatita pe Windows cu 40%. Prezentarea o gasiti la adresa: http://ilia.ws/files/Confoo2010_PHP53.pdf .

FastCGI reprezinta o alternativa la Common Gateway Interface (CGI), un protocol de interfatare intre aplicatii externe si serverele web. In cazul CGI, pentru fiecare cerere web sunt rulate executabile care sa proceseze cererea si sa genereze raspunsul dinamic. FastCGI ofera un mecanism prin care un singur proces este reutilizat pentru mai multe cereri.

Cerinte FastCGI

  • Windows Server 2008 R2, Windows Server 2008, Windows Vista sau Windows 7
  • IIS 7

Instalare FastCGI si PHP

1. Adaugati protocolul CGI din Control Panel > Programs and Features > Turn Windows features on or off. In acest mod activati atat CGI cat si FastCGI.

2. Descarcati ultima versiune de PHP de la adresa: http://www.php.net/downloads.php

3. Editati fisierul php.ini si modificati urmatoarele setari:

  • fastcgi.impersonate = 1
  • cgi.fix_pathinfo=1
  • cgi.force_redirect = 0.

4. Configurati IIS 7 sa rezolve cererile PHP

Pentru a configura IIS 7 sa permita aplicatii PHP este necesar sa realizam o mapare care sa spuna serverului IIS sa treaca cererile PHP prin protocolul FastCGI.

a) Deschideti IIS Manager si selectati Handler Mappings

b) Selectati Add Module Mapping si specificati urmatoarele setari:

  • Request path: *.php
  • Module: FastCGIModule
  • Executable (optional): C:\[Calea spre directorul unde e instalat PHP]\php-cgi.exe
  • Name: PHP_via_FastCGI

Puteti verifica daca FastCGI este instalat corect in lista de module din IIS Manager.

Mai multe detalii despre configurarea FastCGI puteti gasi pe site-ul php.net:

Windows Cache Extension

Windows Cache Extension (prescurtat WinCache) reprezinta un accelerator PHP care este folosit pentru a mari viteza de rulare a aplicatiilor pe platforma Windows si Windows Server. Windows Cache Extension salveaza versiunea compilata a scriptului rulat in memorie, facandu-l disponibil de fiecare data cand acelasi script este executat, marind astfel performanta.

Puteti descarca Windows Cache Extension de la urmatoarele adrese:

  • WinCache 1.1 Beta pentru PHP 5.2 – x86
  • WinCache 1.1 Beta pentru PHP 5.3 – x86

WinCache reprezinta o alternativa la acceleratoare PHP ca:

O comparatie a metodelor folosite de 3 dintre acceleratoare (pe langa WinCache) le gasiti mai jos:

WinCacheAPCXCacheeAccelerator
wincache_ucache_getapc_fetchxcache_geteaccelerator_get
wincache_ucache_setapc_storexcache_seteaccelerator_put
wincache_ucache_addapc_add
wincache_ucache_existsxcache_isset
wincache_ucache_deleteapc_deletexcache_unseteaccelerator_rm
wincache_ucache_clearapc_clear_cachexcache_clear_cacheeaccelerator_clear
wincache_ucache_incapc_incxcache_inc
wincache_ucache_decapc_decxcache_dec
wincache_ucache_casapc_cas
wincache_ucache_infoapc_sma_infoxcache_infoeaccelerat

Facilitati WinCache

  • suport pentru PHP 5.2 si PHP 5.3
  • cache-ul de fisiere configurabil
  • cache-ul opcode configurabil
  • cache pentru caile relative
  • functii pentru a obtine informatii despre starea cache-ului (wincache_fcache_fileinfo, wincache_fcache_meminfo)

Windows Cache Extension include 5 componente:

  • Cache Opcode PHP – Pe un server web, engine-ul PHP citeste, parseaza, compileaza si executa un script PHP de fiecare data cand acel script este cerut de catre clientul Web. Cache-ul PHP Opcode stocheaza scriptul compilat in memorie in asa fel incat poate fi reapelat foarte repede in momentul cand acel script este executat in mod repetat. O mare parte din timpul de procesare a unei cereri este detinut de generarea opcode-ului. Astfel ca prin intermediul acestei solutii se salveaza 50-70% din timpul de executie a cererii.
  • Cache fisier – Chiar daca cache-ul PHP Opcode este activat, PHP trebuie sa acceseze din nou scriptul de pe server. Windows Cache Extension include un cache pentru fisiere care permite stocarea continutului fisierelor PHP in memorie, ceea ce reduce in mod semnificativ operatiile realizate de engine-ul PHP. Astfel ca in momentul in care un fisier este accesat pentru prima data, continutul fisierului este stocat in cache. Cand fisierul este deschis din nou, un pointer la continutul fisierului din memorie este returnat. Testele efectuate pe aplicatii populare gen WordPress sau Drupal au aratat ca operatiile cu fisierul sunt reduse in acest fel cu 80-90% pentru fiecare cerere noua.
  • Cache cai relative – Codurile PHP includ in mod frecvent cai relative. Fiecare din aceste cai relative trebuie transformate in cai absolute. Cand aplicatia PHP foloseste foarte multe fisier PHP si are de accesat multe cai relative apar probleme de performanta. Cache-ul pentru caile relative stocheaza maparea dintre caile relative si cele absolute.
  • Cache utilizator (din WinCache 1.1) – Codurile PHP pot folosi memoria pentru a salva obiecte si variabile din PHP care sunt stocate in cache-ul utilizator.
  • Manipularea sesiunilor (din WinCache 1.1)– Aceasta facilitate permite pastrarea datelor sesiunilor in memoria partajata care duce la evitarea stocarii datelor de sesiuni in sistemul de fisiere, imbunatatind in acest mod performanta. Se poate activa din php.ini setand
    • session.save_handler = wincache

Comparatii

1) Pe site-ul ibuildings.com gasim un benchmark legat de performanta Wincache. Mark Van der Velden compara performanta WordPress si SilverStripe pe 2 platforme:

  • Microsoft Windows Platform Installer (WebPI) – cu si fara WinCache
  • Zend Server – cu Optimizer+ si fara Optimizer+
TestulWordPress
(cereri/sec)
FactorSilverStripe
(cereri/sec)
Factor
WebPI53.36x154.06x1
Zend Server55.66x157.66x1
WebPI + WinCache122.52x2.3108.69x2.0
Zend Server + Zend Optimizer+119.02x2.1111.04x1.9

Observam o imbunatatire folosind WinCache cu WebPI, in timp ce WebPI + WinCache are rezultate relativ la fel cu Zend Server + Zend Optimizer+.

2) De asemenea, Ruslan Yakushev (Project Manager in echipa Microsoft IIS) face cateva comparatii interesante in prezentarea lui, PHP Performance on Windows folosind WordPress 2.9.2.

O prima comparatie realizata este intre CGI si FastCGI. Se observa o diferenta semnificativa de la 2 RPS (cereri pe secunda) la o medie de 17 RPS.

De asemenea, in urmatorul grafic, se poate observa numarul de procese CGI comparat cu numarul de procese FastCGI.

Ruslan adauga in ecuatie si prima versiune de WinCache 1.0, unde de asemenea se observa o imbunatatire de la 17 cereri pe secunda la 44 cereri pe secunda printr-o simpla modificare in php.ini:

extension = php_wincache.dll

WinCache 1.1 aduce imbunatatiri prin cache-ul utilizator ajungand la 62 cereri pe secunda.

Resurse

PHP.net – http://www.php.net/manual/en/book.wincache.php
http://www.ksingla.net/2010/03/comparing-wincache-user-cache-apis-with-other-caches/
PHP Performance on Windows – http://www.slideshare.net/ruslany/php-performance-on-windows
PHP5.3 == Awesome! – Ilia Alshanetsky – http://ilia.ws/files/Confoo2010_PHP53.pdf
http://www.iis.net/expand/FastCGI
http://www.iis.net/expand/wincacheforphp

Share this post

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.