Period5-分布式节点

        在迭代的第五个阶段,我们需要实现与远程节点的通信过程。这包括实现HTTP的客户端部分,以及根据一致性哈希算法选择节点。我们需要实现的流程大致如下:

         那么这个阶段结束后的缓存结构图应该如下:

  

        解释下这个新的结构,一致性哈希的整体结构以及各个节点应该提前注册到HTTPPool上,HTTPPool同时兼作为peerpicker的实现类,注册到各group上。这样做的目的最终是为了实现第一个图中的过程(2),因为核心过程均位于Group中,比如get和load过程。查询缓存大致过程基本如下:在本地查不到之后,先尝试从其他节点获取,因为HTTPPool注册到了group上,作为peerpicker接口的实现类,我们可以使用HTTPool的pickpeergetter方法选择到哈希环上对应的节点,并找到访问的peergetter,使用group名字和key查询缓存的value。当然,上述过程不发生在哈希环取出本地节点的情况,这种情况直接调用降级方法。

        对了,还有一点需要注意,那就是在哈希环结构与其他节点的注册和选择过程中需要加锁,这是因为并发情况下注册和选择可能存在问题,我们需要保证这两个操作的原子性。 

       那么分布式缓存部署后的运行流程是什么样子的呢?我们可以看下图所示:

        我们对外暴露9999,在启动最后一台机器(如8003)时在对应机器上启动此端口号进行监听,对应的机器从group查询时查询不到,会路由到哈希环上的负责节点,对应的负责节点比如是8001,8001会调用降级方法进行本地加载,加载后放入缓存,后续只要没有被淘汰就可以直接从缓存中取到。那么将返回值返回给8003后,8003不会进行保存,会直接从9999返回给客户端。需要注意的是,如果哈希环中的负责节点也没有找到value,9999(最后一台机器)对应进程会亲自再调用降级方法进行一次降级加载。当然,这种情况出现的可能性是非常小的,除非是8001调用时出现了网络异常或是8001调用时调用的服务端恰好出现异常,对于这种情况,9999(最后一台机器)对应进程会加载并保存这个值。当然,这种情况的出现还有可能就是因为key是不存在的,那这时即使进程进行降级加载,发现没有正常拿到值,也不会进行保存,直接返回空值及对应错误信息。

        但是,目前也是存在一些问题的 ,就比如我们同时大量请求请求同一个key,那会同一时间会发生多次网络调用,对于性能有较大影响。在下一个迭代周期会解决这个问题。

       

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值