PHP and the dollar sign

Fully agree - bine, contextul era :laughing:

Jokes aside, chiar daca most web apps sunt crude CRUD machines - felul cum organizezi codul sa se muleze ok pe problem’s domain este departe de trivial.

Eu vorbeam in general. Dar chiar si asa, uneori performanta conteaza, fiecare ciclu de procesor conteaza.

Exemplu concret: i-am facut unui client un magazin de lenjerie de damă (tocmai era vorba pe undeva de lenjerie de dama :slight_smile:).

Cerinta: sa poate fi hostat pe un VPS de 100$ pe an, dar sa reziste la peak-uri de aproximativ 300-400 de conexiuni pe minut, cand ruleaza reclama la TV.

Concluzie: nu exista solutii de MVC sau framework-uri capabile sa serveasca cateva zeci de conexiuni pe secunda, fara sa iasa fum din VPS.

Rezolvare: realizat un MVC foarte thin (exact cu metoda $class = new $class_name), care face fix ce trebuie pe partea de content dinamic, un daemon scris in C care colecteaza asincron statisticile, contentul static in ramdisk si servit prin nginx.

Si uite asa, cu un pic de planificare poti sa faci o “amarata” de aplicatie web sa ruleze pe un ciuruc de VPS de doi bani :slight_smile:

De curiozitate cum ai masurat limitele? si cu ce framework-uri le-ai comparat, de atlfel what about caching?

N-am facut masuratori exacte. M-am bazat pe experienta din trecut, am avut de-a face cu CakePHP/CodeIgniter/Yii ca MVC-uri, si Magento/OpenCart ca framework-uri de magazin online. Vazand ce greu se misca pe masini mult mai puternice decat VPS-ul in cauza, am estimat ca nu avem nicio sansa cu ele. E putin probabil sa imbunatateasca cache-ul ceva.

Chiar si cu MVC-ul meu thin au fost cateva glitch-uri initial, la peak foarte mare load average-ul s-a dus undeva extrem de sus, dar din cauza HDD-ului si MySQL-ului (aveam I/O wait foarte mare). Am mai adaugati niste indecsi pe ici pe colo, am mutat contentul static pe ramdisk si am pus un nginx sa-l serveasca si problema s-a rezolvat instant. Acum nici nu se simte traficul, daca nu vezi log-urile cum “vâjâie” nici nu-ti dai seama ca e trafic maxim.

You can get a VPS la 5$ cu SSD (which have tons of IOPS) - bugetul tau e undeva la 8$ pe luna - ce configuratie are VPS-ul tau?

CPU 3.5GHz, 1GB RAM, 15 GB HDD, probabil SSD, nu stiu exact. Oricum e shared, chiar daca are viteza mare tot are o oarecare latenţă. 200MB din ram este folosit ca ramdisk pt contentul static. In plus, e important ca VPS-ul sa fie in Grecia, unde sunt clientii, deci nu pot sa aleg orice locatie si orice hoster.

latency: un packet roundtrip catre un VM pe DO in Frankfurt are latenta ~20ms iar in browser full response time este de ~50ms - deci pare cat de cat real rezultatul.

bandwidth: more info here se pare ca la DO este 10Gbps

Not sure ce bw. are VPS-ul din Grecia insa pt. 20ms extra latency - nu suna atat de rau un VPS extern + restul de cash pot fi folositi un CDN.

Bine pana nu le compari pe ambele with some real world load testing nu poti trage linie direct dar totusi partea cu server cat mai aproape de clientii tai, pt. distante mici (read: EU zone) mi se pare un fel de mit.

P.S.

  • serverele de la emag sunt in UK iar pt. assets folosesc Akamai care ofc. it resolves to Bucharest IPs ( < 50ms)
  • olx in Polonia? wth + CDN prin Elvetia
  • pcgarage - full Romania (nota: comparativ cu emag se misca execrabil < 5000 ms)
  • okazii - full Romania (nota: comparativ cu emag se misca execrabil < 200ms)
  • Digi24 - US/California via Google Cloud care de fapt este Google Project Shield special pt. jurnalism -> pretty frekin’ cool insa sunt kinda slow 500ms
3 Likes

Eu sunt ceva mai conservator. O conexiune locala e o conexiune locala. N-ai de unde sa stii ce fel de peering ofera providerii clientilor. Si oricum sunt genul obsedat de eficienta si viteza, toate aplicatiile mele sunt proiectate sa consume cat mai putin RAM si CPU. Filosofia mea de viata este ca orice aplicatie de tip server nu ar trebui sa aiba nevoie de mai mult de 256M de RAM si CPU la 500 MHz :slight_smile:

The perks of being a lone wolf. Can’t say I agree with custom frameworks and performance above all programming, but hey - you seem to love what you’re doing so GG. :slight_smile:

Ați luat-o rău pe arătură! Titlul este “PHP and the dollar sign”.

Părerea mea este: Și ce dacă? Să te plângi că PHP folosește $ pentru a defini o variabilă este EXACT același lucru cu a te plânge că PHP nu-i Ruby! …sau PHP nu-i Python! …sau PHP nu-i X, Y sau Z!
Următorul topic de genul ăsta ar trebui deschis de un utilizator de Python și să se numească “PHP and the curly braces” în care cineva să se plângă de faptul că PHP folosește acolade pentru a delimita blocuri de cod.

La fel de bine aș putea și eu să mă plâng despre lipsa acoladelor în Python! Sau aș putea să mă plâng de unless-ul din Ruby, unde nu este întotdeauna evident că execuția unei expresii s-ar putea să fie condiționată. Când citesc cod urmat de unless mă simt ca atunci când cineva îmi spune Îți aduc un tort, după care îți fac și-un masaj iar dup-aia mergem la un film unless n-am chef

Cu toate astea, nu m-a văzut nimeni începând o discuție nouă despre nu știu ce chestie minoră din nu știu ce limbaj pe care nici măcar nu-l folosesc! O fi având PHP-ul multe probleme, dar dolarul chiar nu este una dintre ele!

11 Likes

is bad practice to use it with an else clause or where it doesn’t read naturally :slight_smile:

Jokes aside, desi discutia a luat-o intr-adevar rau pe aratura insa chiar am ramas cu multe din ea - it tickled my brain si am mai descoperit cate ceva despre Perl and friends.

O discutie despre curly braces chiar ar fi productiva

le scriem asa:

function foo() {
  // code
}

sau asa?

function bar() 
{
 // code
}

and why?

1 Like

Apăi dacă eu îs Captain Obvious, atunci tu ești Major Troll! :laughing:

4 Likes

Ionuț, you’re fine.

Cât despre paranteze eu scriu:

function something()
{
  if ($undefined) {
    echo 'V-am ras!' . PHP_EOL;
  }
}
// Why not both?
2 Likes