Mik*_*ell 24 php memcached caching twemproxy
设置简单:
我有以下twemproxy配置:
default:
auto_eject_hosts: true
distribution: ketama
hash: fnv1a_64
listen: 0.0.0.0:22122
server_failure_limit: 1
server_retry_timeout: 600000 # 600sec, 10m
timeout: 100
servers:
- vcache-1:11211:1
- vcache-2:11211:1
Run Code Online (Sandbox Code Playgroud)
twemproxy节点可以解析所有主机名.作为测试的一部分,我取消了vcache-2.理论上,每次尝试与vcache:22122接口时,twemproxy都会联系池中的服务器以方便尝试.但是,如果其中一个缓存节点关闭,那么twemproxy应该从池中"自动弹出"它,因此后续请求不会失败.
由应用程序层决定是否使用vcache:22122尝试失败的接口是由于基础结构问题,如果是,请再试一次.但是我发现在重试时,正在使用相同的故障服务器,因此不会将后续尝试传递给已知良好的缓存节点(在本例中为vcache-1),而是将它们传递给弹出的缓存节点(vcache) -2).
这是尝试重试的php代码片段:
....
// $this is a Memcached object with vcache:22122 in the server list
$retryCount = 0;
do {
$status = $this->set($key, $value, $expiry);
if (Memcached::RES_SUCCESS === $this->getResultCode()) {
return true;
}
} while (++$retryCount < 3);
return false;
Run Code Online (Sandbox Code Playgroud)
- 更新 -
链接到Github上打开的问题以获取更多信息:问题#427
我看不出你的配置有什么问题。如您所知,重要的设置已就位:
default:
auto_eject_hosts: true
server_failure_limit: 1
Run Code Online (Sandbox Code Playgroud)
该文档表明连接超时可能是一个问题。
仅依赖客户端超时会产生不利影响,因为原始请求在客户端到代理的连接上已超时,但在代理到服务器的连接上仍然处于挂起和未完成状态。当客户端重试原始请求时,这种情况会进一步恶化。
在 twemproxy 第一次尝试失败并从池中删除服务器之前,您的 PHP 脚本是否关闭连接并重试?timeout也许在 twemproxy 中添加一个低于PHP 中使用的连接超时的值可以解决该问题。
从你在 Github 上的讨论来看,虽然听起来像是对健康检查的支持,也许还有自动弹出,但在 twemproxy 中并不稳定。如果您正在针对旧软件包进行构建,您可能最好找到一个已经稳定了一段时间的软件包。mcrouter(有有趣的文章)合适吗?
| 归档时间: |
|
| 查看次数: |
895 次 |
| 最近记录: |