Twemproxy,Twitter 发布的 Redis 代理服务(3)

我认为Twemproxy没有支持批量操作的命令和事物是对的。当然,AFAIK甚至比Redis cluster更严格,反而它对于相同的键允许批量操作。

但是恕我直言按照这种方式,分散的集群带来分散的效率,并且将这个挑战带给了早期的用户,而且花费了大量的资源,从大量的实例中汇总数据,得到仅仅是“能用”的结果,而且你将很快开始有严重的负载问题,因为你有太多的时间花费在数据的传输上。

可是有一些批量操作命令还是支持了的。MGET和DEL是处理的非常好的。有趣的是MGET命令在不同的服务器之间切分请求并且返回一个结果。这一点相当酷,也许我以后不能有更好的性能(看以后的吧)。

无论如何,批量操作和事物的不支持的现状意味着Twemproxy不适用于每个人,特别像Redis cluster本身。特别是它显然不支持EVAL(我认为他们应该支持它!它是多通用的,EVAL被设计可以在代理中工作,是因为键的名字已经明确了)。

有待改进的地方
 ---

错误报告机制并不稳定,发送一个Redis不支持的命令会导致连接被关闭。比如从redis-cli只发送一个‘GET‘并不会报"参数个数不正确”的错误,只会导致连接被挂起。

总体看来,服务器返回的其它错误都可以准确的传给客户端:

redis metal: 10000 > get list
 (错误)类型操作错误,键匹配了错误的值类型

另外一个我想要看到的特性是对自动故障恢复的支持。有很多种替代方案:

1) twemproxy已经能够监控实例错误信息、错误的数量、在检测出足够多的错误的情况下断开节点。但是很遗憾twemproxy不能够拿从节点作为替代方案,这样就可以发送一个SLAVE OFNOONE命令来弃用备用节点,而不用只是断开错误节点。这种情况下twemproxy才是一个具有高可用性的解决方案。

2) 或者,我希望twemproxy能够与Redis Sentinel一起协同工作,定期检查Sentinel配置,如果出现故障则更新服务端配置

3) 另外一种替代方案是提供一种热配置twemproxy的方式,一旦节点出故障,Redis Sentinel就能够切换ASAP代理配置

有很多种替代方案,总体来说,如果能够提供对HA(高可用性)的底层支持就非常棒了。

性能

---

Twemproxy很快,真的很快,接近直接与Redis通讯的速度。我敢说你用的话最多损失20%的性能。

我对性能唯一的意见是可以有更高效的方法把IMHO MGET命令分发到实例之间

如果twemproxy与所有Redis实例的延迟很相似的话(很有可能),在MGETs命令在同一时间发出的情况下,twemproxy很有可能会在同一时间接收到所有节点的命令,所以我希望看到的是当我在所有实例上运行MGET命令的时候,发送的数量和twemproxy接收到的数量是一致的,但是实际上twemproxy在一秒内只接收到了50%的MGET命令。也许是时候重构twemproxy的应答模块了。

结论
 ---

这是个伟大的项目,鉴于Redis Cluster还未发布,我强烈建议有需求的Redis用户试一下Twemproxy

我正打算将它链接到Redis项目网站上,因为我认为Twitter的伙计已经用他们的项目为Redis做了不小的贡献,所以...

这是Twitter赢得荣誉!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/0996dd12c9169ee20adcf2ff713a7e45.html