PHP使用memcache長串連作為RPC用戶端需要注意的地方

來源:互聯網
上載者:User

標籤:style   blog   color   使用   os   io   cti   div   

memcache擴充版本 3.0.8

一. retry_interval

$retry_interval 某個rpc伺服器端失敗後容錯移轉的時間,retry_interval的時間內,該節點會被一直標記為不可用,隔離掉,為小於0的數一直隔離。

int mmc_server_valid(mmc_t *mmc TSRMLS_DC) /*    checks if a server should be considered valid to serve requests {{{ */{    if (mmc != NULL) {        if (mmc->tcp.status >= MMC_STATUS_DISCONNECTED) {            return 1;        }        if (mmc->tcp.status == MMC_STATUS_FAILED &&            mmc->tcp.retry_interval >= 0 && (long)time(NULL) >= mmc->tcp.failed + mmc->tcp.retry_interval) {  
       //這裡用目前時間和故障發生時間+隔離時間作對比 return 1; } } return 0;}

 

二.重試策略

請求某個節點逾時或者失敗會有一次重試的機會,但是當伺服器重啟以後,貌似沒有做重試,只是標記了串連狀態為不可用。當第二次用到這個串連的時候才會重建串連,這樣重啟前有多少串連,就會有多少請求不可用。

/* read more data from socket */if (php_stream_eof(mmc->readreq->io->stream)) {  //伺服器端主動中斷連線的情況,stream讀到EOF    result = mmc_server_failure(mmc, mmc->readreq->io, "Read failed (socket was unexpectedly closed)", 0 TSRMLS_CC);    if (result == MMC_REQUEST_FAILURE) {        /* take server offline and failover requests */        mmc_server_deactivate(pool, mmc TSRMLS_CC);    }    if (result == MMC_REQUEST_RETRY) {        mmc_select_retry(pool, mmc, mmc->readreq TSRMLS_CC);    }}break;

紅字是我後加的,原來擴充雖然標記了result為MMC_REQUEST_RETRY,但是沒做重試。簡單的方法也可以在擴充中再new Memcache(),addServer一次。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.