Centos
Memcached 池 - 中斷導致響應時間延遲增加
我有多個記憶體伺服器,它們通過 Memcached::addServers() api 添加到 PHP 層的虛擬池中。在容錯測試期間,我注意到使其中一個 memcached 伺服器離線導致應用程序的響應時間增加到每個請求 3-6 秒,而通常每個請求需要 0.5-2 秒。
我已經按照這篇博文的建議實施了這些設置:
$memcached = new Memcached(); $memcached->setOption(Memcached::OPT_CONNECT_TIMEOUT, 10); $memcached->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT); $memcached->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true); $memcached->setOption(Memcached::OPT_RETRY_TIMEOUT, 1); $memcached->addServers($servers);
但是,這些設置似乎無法解決延遲增加的問題。解決此問題的唯一方法是將伺服器重新引入池中,然後滯後消失。顯然這不是一個理想的解決方案,因為我們可能需要 15 分鐘來解決生產中的問題(即可怕的凌晨 3 點頁面)。
在研究這個問題時,我確實遇到了這篇文章,它討論了 moxi 的使用,聽起來很有趣,但是在我將另一個層引入我們的應用程序之前,我想知道其他人是如何解決這些滯後問題的?
我最終安裝了twemproxy(Twitter 的 Memcached 代理),因為它會自動彈出無響應的主機。這個 api 解決了我的滯後問題。