Router服务

    • 控制Cache服务进行主备切换。
    • 当集群性能不足或容量不够的情况下,提供数据迁移的调度功能。

      原理

      由于数据分布在多个cache服务器上,客户端访问数据时,就需要通过路由来快速定位要访问的数据位于哪个cache服务器。具体来说就是客户端Proxy根据Router提供的路由信息,去定位业务的key落到哪个Cache服务上。这个路由信息就是一张路由表,下面是一个路由表的例子:

    数据的路由是基于路由表的。但由于机器性能不足,或者容量不够的情况下,数据需要从一台机器迁到另一台机器,路由表也需要做相应的变动。这个过程就叫做数据迁移。
    但这个过程中业务还在读写,不能在迁移过程中屏蔽业务的所有读写操作。所以数据迁移的重要目标的就是业务无感知。

    1. 迁移流程先通知目的组,把要迁移的页范围锁住,然后做些数据清理的动作;
    2. 然后通知迁移源组,把要迁移的页范围锁住不可写,然后从内存读取数据,把数据发送到目的组,完成之后返回给router;
    3. router收到迁移完成之后,把最新路由信息推送给源组和目的组,然后修改DB和内存的路由表信息。

    其中Proxy是通过定时获取路由的变更状态来获取最新的路由。当迁移结束到proxy获取到最新的路由有一个时间窗口,这个时候proxy还会访问到旧的cache。
    这时由于cache拥有最新的路由信息,会判断请求是否属于本cache负责,如果发现请求不属于本cache,会回复路由错误的信息给proxy,proxy就随后立即更新路由信息再次访问。
    通过这样的方式来保证路由变更不会影响业务数据的一致性。

    主备机以及镜像会定时向RouterServer发送自身的心跳信息,心跳超时后即会启动自动切换检测流程,满足一定条件后便会执行自动切换。

    1. 判断Cache主机心跳超时。
    2. 判断备机心跳没有超时。
    3. 向Cache主机发送探测包,确认主机没有响应。
    4. 向备机发送探测包,确认备机存活。
    5. 通知备机断开与主机之间的连接。
    6. 修改路由信息并同步新的路由到Proxy,切换完成。