5

Mam klasę dostępu do danych, które określa się trzy pula połączeń phpcassa na konkretyzacji tak:phpcassa pula połączeń

 

try { 
    $this->cache = new ConnectionPool(
    BSCACHE_KEYSPACE, 
    explode(',', BSCACHE_SERVERS), 
    null, null, null, null, null, 
    array(
     'username' => BSCACHE_USERNAME, 
     'password' => BSCACHE_PASSWORD 
    ) 
); 
    $this->indexCache = new ConnectionPool(
    INDEXCACHE_KEYSPACE, 
    explode(',', INDEXCACHE_SERVERS), 
    null, null, null, null, null, 
    array(
     'username' => INDEXCACHE_USERNAME, 
     'password' => INDEXCACHE_PASSWORD 
    ) 
); 

    $this->metaCache = new ConnectionPool(
    METACACHE_KEYSPACE, 
    explode(',', METACACHE_SERVERS), 
    null, null, null, null, null, 
    array(
     'username' => METACACHE_USERNAME, 
     'password' => METACACHE_PASSWORD 
    ) 
); 
} catch (Exception $e) { 
    return array($this->error['connection']); 
} 
 

Niedawno używane kod śledzenia funkcji na serwerze php Zend, aby zrobić trochę wydajność audyt na tej klasie i zauważył, że konfiguracja tych trzech pul połączeń trwa ~ 100 ms. To dużo czasu na utratę konfiguracji połączenia, ponieważ każde połączenie jest używane tylko raz lub dwa razy na wystąpienie tej klasy.

Ktoś wie o jakichś sprytnych sztuczkach, które pozwoliłyby mi raz zbudować te pule połączeń i udostępnić je pomiędzy instancjami klasy? Może jest jakiś prosty sposób, aby to zrobić od razu do bardziej zaawansowanych twórców PHP?

UPDATE: była "sukcesem" buforowanie pula połączeń przy użyciu APC, a następnie dowiedzieć się więcej na trwałych połączeń i odkrył plik connection.php tego phpcassa'S (linia 59 v 0.8.a.2) brzmi tak:

 

$socket = new TSocket($host, $port); 
 

... cóż, TSocket ma trzeci (opcjonalny) parametr $ persist, który domyślnie przyjmuje wartość false. Ale kiedy zmieniam linię 59 w phpcassa, aby ustawić $ persist na true, moje testy regresji idą do mnie piekło. Sposób, w jaki zawodzą, sprawia, że ​​wygląda na to, że gdzieś trafiam w limit "maks. Połączeń" (prawdopodobnie konfiguracja Kasandra), więc teraz się nad tym zastanawiam.

Odpowiedz

1

W końcu nie zepsułem z parametrem TSocket $ persist ... zamiast tego skompilowaliśmy bibliotekę oszczędnościową, która jest dostarczana z phpcassa i włączoną apc (nie jawnie buforowałem pul połączeń, ale apc to buforowanie kodu opcode itp.). Pomiędzy tymi dwoma zmianami, moje czasy konfiguracji puli połączeń dla trzech pul spadły do ​​jednocyfrowego zakresu milisekund ... co oznacza, że ​​mam inne wąskie gardła.

Powiązane problemy