2 tys requestow na sekunde w PHP (zend + doctrine) :)

0

Hej,

niedawno byłem ofiarą wykop-efektu i stwierdziłem, że czas najwyższy wziąć się za temat cachowania.

Po kilku godzinach zawziętego klepania i testowania wyszło mi takie oto coś:

http://files.ognisco.com/kickasscache/kickasscache-20110608/KickAssCacheApc.php

aby tego użyc trzeba:

  1. mieć moduł apc (php-apc: na ubuntu: apt-get install php-apc)
  2. przykładowy kod, index.php:
<?php require 'KickAssCacheApc.php'; $cache = new KickAssCacheApc(); $cache->capturePage(); // tutaj reszta kodu dowolnej aplikacji w php. Nie chwaliłbym się prostą klasą w php gdyby nie wyniki: **to coś wyciąga ponad 2 tysiące requestów na sekunde! :O** Zadowolony byłbym gdyby było nawet 100req/sec ale nie, aż tyle :D Co do testowania: - Zend Framework, Doctrine, PostgreSQL (o to: http://cyckizrana.pl) - apache benchmark: ab -n 100000 -c 200 http://localhost/cyckizrana/web/cycki-dnia - apache2, php5.3, ubuntu 32bit (standardowa konfiguracja) - core2duo 2.4ghz, 2gb ram, hdd 7500rpm Wyniki: **Requests per second: 2079.79 [#/sec] (mean)** Time per request: 96.164 [ms] (mean) Time per request: 0.481 [ms] (mean, across all concurrent requests) Transfer rate: 36834.99 [Kbytes/sec] received pełny raport jest tutaj: http://files.ognisco.com/kickasscache/kickasscache-20110608/benchmark.txt konfiguracja cache: ttl=5 randomfactor=7 Moglibyście obadać czy też macie takie wyniki z kosmosu? Mam nadzieje, że się to komuś przyda :) Licencja whiskeyware [;
0

Hmmm... sam się miałem zabrać za tworzenie jakiegoś małego cache. Tylko coś zabrać się nie mogę tym bardziej że sądzę że mam bardziej "elementarne" rzeczy do dopracowania. Ale w testach wygląda fajnie. Ciekawi mnie jak spisuje się w porównaniu do tej metody: http://blog.wilgucki.pl/2010/10/statyczny-cache-w-zend-framework.html (Niestety nigdy mi się do tego nie udało skonfigurować apache a szkoda bo wygląda obiecująco :) ). No niby można tu część ustawień papugować z WP Super Cache ale i tak było to dla mnie za trudne na dzień dzisiejszy :/

Jak będę miał chwile to zobaczę jak u mnie testy wypadną :)

0

statyczny cache jest najszybszy bo mozesz uzywac samego lekkiego serwera www bez uruchamiania modulu php, problem raczej jest z uzywaniem tego ze wzgledu na dynamicznosc kontentu i separacje serwera danych od serwera logiki.

a ten moj kickass to goly php + apc i odziwo daje rade ;D

0

2krps? To ma być coś nadzwyczajnego (przy cache'owaniu pełnej strony)? W szczególności, że nie podałeś ile było bez tego mechanizmu. Ja bym wolał postawić varnisha przed tym wszystkim, dać mu agresywny cache i nie martwić się w ogóle o ruch rzędu dziesiątek/setek krps (widziałem jak obsługuje 300krps, przy ruchu z kilku maszyn, nie localhost <-> localhost).

0

bez tego mechanizmu bylo miedzy 5...8 req/s :) oczywiscie ze sa inne metody cachowania, ale to jest goly php ktory mozna uzyc w 3 linijki kodu i ktory jako tako daje rade, cala magia to nie sam cache tylko mutexy :P

0

5-8 normalnego ruchu, czy podczas benchmarkowania z tymi samymi parametrami?

0

podczas benchmarkowania, zrobilem ten cache pod cycki,

bez apc: 5req/sec
z apc: 8req/sec
z apc i kickass cache ale bez mutexow: 500req/sec ale zwieszalo przy odswierzaniu cache
z apc, kickach i mutexem: do +- 2000 req/sec

zalozenie jest takie ze jesli nagle wzrosnie liczba polaczen (wykop efekt) to wtedy wiekszosc odpowiedzi bedzie serwowana z cache, natomiast przy odswierzaniu jest wyscig polaczen ktore pierwsze zrobi locka wiec nawet jezeli wiecej niz jeden request uruchomi reszte aplikacji to nic sie nie dzieje bo naraz bedzie tego znikoma ilosc (testowane przy konkurencyjnosci = 200)

kumpel zrobil test na swojej apce
i z 137 wskoczyl na ponad 4.5k requestow / sec :D

0

zreszta podejzewam ze gdybyscie to wstawili na 4p to zysk bylby widoczny,

ttl = 5 i randomfactor = 7...10

jedynie trzeba by chyba dorzucic sesje do generowania cache id

0

4p jest na tyle dynamiczne, że nie da się cache'ować całej strony jak w tym przypadku. Poza tym każdy user ma inaczej zaznaczone wątki na forum. Do cache nadawałyby się raczej tylko artykuły, które IMO generują jakieś 10-20% ruchu, więc zysk byłby marginalny. Cacheowanie fragmentami może by przyniosła większy zysk, ale może być to trudne.

Do forum trzeba zastosować zupełnie inne rozwiązanie (przeniesienie części logiki na stronę klienta), a jako że mamy dedyka to nie ma sensu pakować warstwy cache do php'a, skoro dokładnie to samo (a nawet więcej) może zrobić jakieś dedykowane narzędzie do cacheowania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1