?
探活模块
shenyu网关对服务的活跃探测,避免将请求转发到失活的机器上面,并在给定次数的失败探测时候,将服务下线。
shenyu网关包含的活体探测点
- SoulAdmin对服务机的活体检测
SoulAdmin对下游服务探活
在websocket的时候,进行服务数据的注册,并将服务器的数据ip等放置在各个selector当中,保存在数据库。之后在类UpstreamCheckService当中,对这些注册的服务器进行探活。
启动
-
参数初始化
- 在初始化组件UpstreamCheckService时,会初始化几个探活参数,checked:是否进行探活,zombieCheckTimes:僵尸服务检测次数(在一次探测失败后,判定为僵尸服务,再进行四次探测,如果依旧失败,则从服务器列表移除) scheduledTime:探测间隔时间:默认10s 调用setup()方法,进行定时探活的开启
-
启动定时线程
定时任务
- scheduled()方法
ZOMBIE_SET:僵尸服务列表
UPSTREAM_MAP:服务列表
checkZombie:检查僵尸服务
check:检查所有服务
首次进入时,僵尸服务列表为空,所以先看check()方法 -
遍历所有服务,进行连通性检查,使用方法checkUrl()
这里判断,如果使用http或者https的话,获取ip+端口,如果没有端口,则根据协议判断443或者80
checkIP检验ip的格式,isHostConnector和isHostReachable检查联通
InetAddress.getByName:在给定主机名的情况下确定主机的IP地址,如果参数为null,获得的是本机的IP地址
isReachable:发送及监听ICMP包 - 如果连通成功,则回到check方法,修改服务状态,如果连通失败,修改服务状态,并且添加到僵尸服务Set集合当中
- 更新处理器updateHandler
重新设置UPSTREAM_MAP,只将连通的放置进去,并且更新数据库,并通过publishEvent发布到各个监听服务当中
SoulBootstrap-websocket同步,探测同步对象(对soul-admin群探活)
soulbootstrap启用websocket向souladmin同步数据,会启动探活程序
-
在配置文件中配置websocket方式同步数据时,配置urls,spring启动时调用WebsocketSyncDataService的构造器 -
将会开启一个以urls的服务数量为大小的定时线程
在启动websocket连接后,将所有的soul-admin的websocket连接添加到clients集合当中
遍历clients,各开启一条线程,进行活跃性的探测,如果client的状态为关闭,则进行重连,并打印日志,如果为未关闭,则发送ping,进行探测,每10s执行一次。
Divide插件对下游服务的探活
divide插件用于对请求的分发,此处探活默认关闭,需要在启动参数设置开启,探活用于对下游服务的活跃性检测,减少分发到非活跃服务的次数
- 在UpstreamCacheManager类的初始化时,会调用其构造器,在构造器中,开启对下游服务的探活
开启核心线程数为1,延迟30s,并且每30s执行一次scheduled方法的定时线程池。 - 调用scheduled方法
对UPSTREAM_MAP里面所有的服务进行探活,并将所有活跃的服务放置到UPSTREAM_MAP_TEMP当中。
其他使用到探活机制的还有
Soul-admin:http长轮训,数据变化监听,更新本地缓存
consul方式同步数据
?