jodis

本文介绍了阅读Jodis代码的心得,Jodis作为Codis的数据源封装,利用Zookeeper监控Codis Proxy并实现负载均衡。在使用中发现Jodis监听的节点存在与Codis Proxy实际行为不一致的情况,导致在未手动添加Proxy的admin地址到dashboard时,连接可能不可用。建议改进监听路径以解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天读了下jodis的代码。
配合codis使用的。
其主要着眼点是数据源,对jedispool做了封装。
通过zookeeper上注册的codis proxy个数创建相应个数的jedispool封装为RoundRobinJedisPool,并监听节点的变化,proxy的地址会传回来,可以及时增删配置的jedispool。
但不能根据proxy自定义的配置除host,port之外的其他jedispool配置。

然后每次获取连接的时候就可以做负载均衡了,依次轮询所有jedispool拿连接。

自己封装codis的客户端时可以参考这个思路。


Update:

jodis监听的节点,参见保存在zookeeper的jodis目录下节点数据,再看源码的CodisProxyInfo类,可以知道其监听的是/codis3/codis-demo/jodis。
但这里应该监听的是/codis3/codis-demo/proxy。
proxy在启动后,除非在codis的dashboard界面手动加入此proxy配置的admin地址,否则proxy会一直waiting online。
但/codis3/codis-demo/jodis路径下会新增这个proxy的信息,虽然jodis的源码中判断了proxy是否online,但是就测试来看即使没有在dashboard手动加入此proxy的admin,注册在jodis路径下的proxy信息中的state值仍未onlien,这样判断就失效了。
这样造成的结果是:

Caused by: java.util.NoSuchElementException: Unable to validate object

在对象池validateObject逻辑中, codis对jedis的ping命令的返回了异常:

这里写图片描述

直到在dashboard添加了admin地址,这段时间应用拿到的连接不可用。
应用还需要自己处理这种异常。

所以可以修改CodisProxyInfo类,需要proxy_addr字段。
监听/codis3/codis-demo/proxy路径,这样可以避开这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值