简要设计说明
一、验证服务器
验证服务器位于CDN网络中,用于客户端合法性校验。
1. 禁止高危客户端(唯一标识)连接。(高危客户端列表)
2. 解密客户端连接请求。
3. 时间戳校验(三分钟有效)。
4. 校验通过后向调度服务器发送请求。
二、调度服务器
调度服务器不直接面向客户端,主要实现以下功能:
1. 地址池管理
所有的节点服务器注册到zookeeper,通过zookeeper监控节点。
2. 分配节点服务器IP给客户端
a. 该id为首次登录,从地址池中根据算法挑选出三条记录,发送给客户端。
b. 该id为非首次登录,若分配的ip有任一一个可用,则发送历史ip。若分配的ip都不可用,则标记该用户为高危用户(要求分配ip的算法不会分配同一批ip给一个客户端)。
三、 节点服务器(隧道server)
1. 提供隧道接入口
2. 注册zookeeper临时节点。
四、 客户端SDK
1. 获得手机唯一标识
2. 加密所有连接数据。
3. 解析节点服务器IP,并建立隧道连接。
# 需求说明
## 一、客户端合法性校验
服务端持有私钥,数据均以私钥加解密;客户端持有公钥,数据均以公钥加解密。服务 端接收到客户端请求后,解密该请求,当解密出的数据符合条件后方可进行连接。
## 二、中转机 ip 分配### 1、中转机池
将大量的中转机连接信息分组,形成不同的中转机池。通过中转机池的切换策略(如时 间维度:一周切换一次中转机池,中转机存活数维度:中转机存活数量<50)来切换中转机 池。
### 2、ip 分配
通过组合算法将中转机池中的所有中转机连接信息组合(如三台中转机为一组合,可配置),从组合中挑选未分配的组合(要求组合中至少存在一台中转机存活)发送给客户端。
### 3、分配信息缓存
分配信息缓存到 redis 中。如果客户端重复请求,且缓存中的中转机存在一台可用,则直接从缓存中提取信息发送给客户端。如果都不可用,则重新进行 ip 分配,并更新缓存。缓存信息需要设置超时时间(可配置)。