UniFi 电脑 UniFi® 软件定义网络(SDN)平台是一款跨越不同区域的网络设备端到端系统,全部都通过一个管理界面控制
UniFi(APP) 手机 无需安装 UniFi® 控制器即可通过 UniFi® 手机应用管理 UniFi® AP
进军行业:UBNT的无线AP、控制器软件去给客户提供无线网络解决方案
分配服务器功能:
1、根据自主的负载均衡算法,平均分配设备连接的设备服务器
2、设备服务器上报数据的收集与统计
设备服务器
1、所有设备均匀连接到各设备服务器,保持tcp长连接,配置可快速下发。
2、设备服务器可根据当前负载状况动态增加减少,而不影响其他设备
服务器正常使用。
3、某台设备服务器宕机,设备将重新连接到其他正常服务器,用户几乎无感知
各数据存储的说明:
存储方式 特点 存储数据
mysql 1、持续化存储,存放到磁盘。数据不会丢失。
2、可配置主从数据库。方便数据同步、备份
3、读取数据慢,性能较差 有较强关系逻辑的数据,
操作频率不高
数据可靠性高
如:项目管理、设备绑定
redis
1、存放在内存,可支持持续化。
2、读取数据速度快,性能好。
3、对于存放关联性的数据存储不好, 数据操作频率较高
有较高性能需求
如:状态信息
磁盘 1、存储资源大,性价比较大读取效率一般要高于数据库 数据比较大
数据相对独立
如:备份文件、配置文件
路由设备因为需要及时上报、及时响应,其通信协议同之前不变,采用tcp长连接方式与服务器维持消息通道。
服务器的数据展示包括有app端和web端。web端肯定使用http(s)协议;app端由于是即开即用且同web端的接口有很多重复部分,而且android和ios平台上针对于http(s)的开发套件和库也非常完善,所以我们决定app端也使用http(s)作为通信协议。
都是基于项目来管理设备。各设备的状态信息若从设备直接获取,会比较慢。所以采用状态信息从云服务器获取,各设备定时更新状态信息。这样即可以较快的获取到信息。且状态数据信息也相对有效。为了减少服务器的压力。状态信息上报设计为如下策略:
1)、触发式设备状态信息上报,由云服务器触发设备上报相关的状态信息。当app或者服务器web进行云管理时,触发设备定时上报设备信息.15s上报一次,默认上报3分钟,上报时间可由服务器下发配置。
2)、某些信息是需求显示历史记录,如wan速率、无线总速率、在线设备数等。数据上报间隔ucloud中设置为15s,但可以由服务器更改,当前服务器配置的上报时间间隔为20分钟一次以减缓服务器压力。该数值由服务器从配置中读取,下发到ucloud中,ucloud获取时间间隔,并用该间隔开启定时器,定时上报数据。
设备云管理模式和本地管理模式,
两种模式的配置同步方式不一样。
云管理模式:用户可通过app或云服务器web页面管理设备。包括配置下发、状态获取等。本地则不能进行设备的管理。设备的配置以云端为准。当设备配置与云端不同时,则同步云端的配置到设备。
本地模式:用户只能在本地对设备进行配置操作。云端可以获取设备的配置信息和状态信息,但是不能对设备进行配置操作。如果本地有配置修改。15s上报一次配置信息。云服务器会保存两份配置信息,本地配置和云配置。该模式时只会使用本地配置。当切换为云模式时会去服务器同步云配置。
1. 设备端连上服务器后会向服务器发送自身的设备信息和账号项目等相关信息
2. 服务器收到数据后根据sn查数据库并比对数据
a). 若设备上报的cloud_id长度大于0,且等于数据库中的cloud_id则同步成功,
不进行其他操作。
b). 若数据库中cloud_id为0,而设备上报的cloud_id大于0,且项目id等于0,则服务器产生消息添加提醒推送给用户,。
c). 若数据库中cloud_id为0,而设备上报的clooud_id长度和项目id值都不为0则通知设备解绑
d). 若数据库中cloud_id长度大于0,而上报的cloud_id等于数据库中的cloud_id但是项目id等于0时,此时不产生消息提示,而是直接将账号信息同步到设备,设备绑定到之前的项目中。
3. 项目id为0的时候说明当前设备未添加到项目中,此时如果数据库没有绑定关系则直接添加消息提醒,若有绑定关系,则看设备上报的云平台唯一码是否与数据库中的一致,一致则直接同步绑定信息到设备,不一致则检查设备上报的唯一码在数据库中是否有效,有效则向该用户推送消息提醒。
App和Web使用互联网流行的nginx作为负载均衡器,如果在负载均衡中想要一些额外的功能比如说:限流、黑白名单、客户端类型统计等,可以使用openresty替换掉nginx,它的功能更强大
WEB服务器(http服务器)主要用于APP与WEB页面的接入。所有的请求都将连接到WEB服务器处理。Web服务器开发技术采用的nginx+openresty框架。该服务器主要有两个方面的作用:一是为了避免可能存在的攻击情况,网关处需要对http(s)请求做接入控制;二是对后端的应用服务器做负载均衡。
在不同的 WLAN 应用场景,要尽量保证用户能快速连接网络,需要实现无线用户的负载均衡。当某个 AP接入的用户过多时,用户体验下降,新用户无法接入,已经接入用户可能掉线,单个用户速率很低。负载均衡是指AC或者AP收集各个节点的负荷信息,进行相关算法决策,对分配给各节点的任务进行重新调度(进程迁移或任务调度),平衡各个AP的负荷差异, 最大化地利用网络资源。作用如下:(1)提高网络的整体吞吐量及频带利用率,充分利用资源;(2)减小拥塞AP的接入延迟,在线单个用户的带宽提高;(3)提高空闲AP的吞吐量,平分整个系统负担。
IMS云平台主要是解决用户逐一单台配置设备的繁琐,能满足快速配置一套网络解决方案,包括路由器、交换机、AP等。用户可以通过手机APP和WEB页面进行远程多台设备统一配置。大大减少设备的配置成本。并支持项目的概览,可以对一个项目中的所有设备
统一管理。对于后期的设备的维护和统计数据分析。提供很大帮助。
为了满足用户的需求和用户体验,则IMS云平台需求满足配置下发的生效的及时性,高并发时服务器的稳定性,呈现给用户的数据的可靠性。
基于上述的要求,IMS云平台需求大量的配套服务器。根据不同的实现功能分成不同的服务器。这些服务器从逻辑上讲是多台,物理上可能是一台。这个可能要根据当前具体的资源消耗来确定(cpu、内存、磁盘等)。可动态调整配置。设备服务器、应用服务器和数据服务器都可以根据需求动态增加,从而满足逐步增长的业务处理。
总体框架如下图:
总体设计图
服务器的开发分为:分配服务器,设备服务器,数据服务器,监控服务器,WEB
服务器,应用服务器。各服务器都有自己的功能,来保证IMS
云平台的正常稳定运行。
分配服务器是整个系统的核心,使用统一域名xxx.xxx.com。整个系统各种设备(路由器、交换机、AP)都通过解析该域名得到分配服务器的IP地址,然后建立相应连接,根据负载均衡将设备需要连接到的设备服务器的IP地址发给设备。这样软AC与服务器连接的IP是动态变换的,也可以保证设备服务器的动态增加和减少。
注意:Redis是一个进程,这里的Redis是指的调用Redis API。
分配服务器的模块划分:
上报信息给监控服务器,上报的数据采用Redis 的 发布订阅机制。
管理设备服务器组上报的数据处理,设备服务器状态、在线接入的设备数的统计等信息。
将所有的软AC请求分配给设备服务器。可以通过设备服状态,负载状态等负载均衡。
4 多线程处理模块
处理所有设备请求连接,进行设备的认证流程处理。
设备服务器主要实现对所有软AC的管理,设备服务器之间相对独立。设备服务器所管理的软AC信息会上传到分配服务器中。当某一台设备服务器出现故障时,分配服务器删除连接到这台设备服务器的软AC信息。
每台设备服务器有一个公网IP,设备服务器启动时通过配置的分配服务器的IP地址进行连接,获得网络拓扑后,和分配服务器进行连接。这里可能会有几种情况:
适用于一些比较大的节点。
设备服务器还要接受所有软AC的连接请求并将软AC信息上报到分配服务器。软AC与设备服务器保持长连接,当APP/WEB用户通过应用服务器找到软AC所属的设备服务器后,和APP/WEB的数据通道也就打通了。设备服务器就会担任着代理转发的任务以及后期一些云服务的主要工作,对性能的要求极高。
设备服务器模块划分:
管理所有连接该设备服务器的设备信息(IPCOM支持IMS的设备)
上报软AC信息给分配服务器。
上报设备服务器本身的状态。
确定APP/WEB和软AC的绑定关系后,负责处理转发命令,转发APP/WEB和软AC的通信消息数据。
4 逻辑功能模块
处理发送给服务器的命令,比如认证,上传,通知等功能的实现。
为了实现对全网数据的掌控,我们将分配服务器的数据上报给监控服务器,监控服务器里需要内置数据库,负责将一些重要数据备份。将接收到的分配服务器的日志信息,状态信息,写入相应的数据库。
WEB服务器(http服务器)主要用于APP与WEB页面的接入。所有的请求都将连接到WEB服务器处理。Web服务器开发技术采用的nginx+openresty框架。该服务器主要有两个方面的作用:一是为了避免可能存在的攻击情况,网关处需要对http(s)请求做接入控制;二是对后端的应用服务器做负载均衡。
Web服务器模块划分:
1 配置模块
主要是对访问控制模块的参数配置。比如限制速率、IP限制等;负载均衡模块中应用服务器的新增和删除。满足负载均衡的要求。
2 访问控制模块
负责对接入请求的限制。包括总速率限制和IP黑名单功能:
WEB限速表示限制每秒请求数,具体分为总接入限速和ip限速。总接入限速表示WEB网关的每秒接入请求有一个上限值,ip限速表示WEB网关对于固定ip的接入请求有一个上限值。
IP黑名单表示对特定IP做访问控制,禁止该IP访问WEB业务。
3 负载均衡模块
对于将请求转给后端应用服务器时做负载均衡。基于openresty框架下的upstream模块开发的。通过对请求源ip hash后取模来选取服务器,然后把请求转发到该服务器进行处理。当后端有多个应用服务器时,能够将请求分摊到各服务器上,减少应用服务器的压力。
应用服务器是整个平台的业务处理中心。所有的APP/WEB请求都会转发应用服务器进行处理。设备服务器的数据上报也会发送到应用服务器进行处理。应用服务器对外提供了多种协议RPC接口:http(https)和tcp。
APP/WEB接入为http(https)协议,采用GO语言自带的gin框架。根据不同请求注册不同的实现函数来完成业务处理。设备服务器与应用服务器的数据通信采用自己实现的TCP协议RPC。保证两个服务器的双向通信。
应用服务器可以根据业务处理的压力情况进行动态的增加和减少。能达到灰度操作,对于当前的业务处理不会有影响。对于用户来说是无感知的。应用服务器不直接对数据库做操作。所有数据库相关操作都会发给数据服务器去处理。
应用服务器模块划分:
1 接入模块
负责处理接收APP、WEB页面、设备服务器发送的请求。http(https)使用gin框架来处理,对请求的token的有效性验证;tcp协议使用套接字监听端口来接收设备服务器的请求。
2 配置模块
主要是读取和解析应用服务器的配置文件,包括所监听的端口,连接数据服务器的IP、端口等。
软AC云平台包括的是:软AC、WEB、服务器之间的交互。WEB通过服务器做为中转。对软AC进行统一的管理。那么它们的具体的数据流程是什么呢?
软AC云平台连接协议有两种TCP和HTTP/HTTPS(APP本地扫描是使用udp广播包,用于设备发现,不用于数据交互)。
1)软AC与服务器为tcp长连接。一旦建立就保持连接,心跳包维持连接。
2)设备服务器与应用服务器为tcp连接。通过封装RPC进行通信
3)APP/WEB、WEB服务器、应用服务器为HTTP/HTTPS连接。
4)应用服务器、数据服务器、数据库(mysql/redis)为tcp连接,通过调用封装RPC通信.
●APP/WEB配置数据(如图中1号虚线):
1)与软AC无关模块,如账号系统、方案生成、项目管理等业务。处理完成后,直接将数据写到服务器上。
数据流向:APP/WEB—>WEB服务器—>应用服务器—>数据服务器—>数据库
2)与软AC有关,如解绑等业务。
数据流向:APP/WEB—>WEB服务器—>应用服务器—>数据服务器—>数据库
———>设备服务器—>软AC ●APP/WEB数据获取(如上图3号虚线)
APP/WEB的数据获取,为了保证数据能及时返回,所有的数据都是从服务器上直接获取。
数据流向:APP/WEB—>WEB服务器—>应用服务器—>数据服务器—>数据库
●软AC数据上报(如上图2号虚线):
软AC向服务器上报数据,目前就控制器详情
数据流向:软AC—>设备服务器->应用服务器->数据服务器->数据库
1) 项目管理
软AC云平台引入项目的概念,即对多台设备统一管理的集合。账号与软AC绑定,一个账号下可以管理多个软AC。
2)云模式与本地模式
设备端有两种管理模式:云模式和本地管理模式。
云模式:APP和远程WEB页面可以软AC进行管理。目前就对控制器的解绑。本地是无法接触软AC和服务器之间绑定关闭
本地管理模式:用户只能在本地对设备进行配置操作。云端可以获取设备的配置信息和状态信息,但是不能对设备进行配置操作。本地配置也会触发式上报到服务器上。该规则不会覆盖云服务器本身的规则。
3)数据上报
当前由软AC项目采用定时上报数据控制器详情数据,后续会根据压力做出调整
4)软AC的sn
软AC连接云服务器后会分配一个sn作为唯一标识,用于确定软AC、账号之间的绑定关系。
主要介绍下软AC云平台逻辑相对比较重要和复杂的功能。
设备初始默认关闭控制器维护,此时未连接到控制器。想要连接到控制器步骤如下:
注:当设备和控制器存在绑定关系时,若设备或控制器一方断开了TCP连接,当控制器再次发起扫描操作时,控制器收到设备信息后不用再手动选择是否绑定,默认直接发起绑定(借此实现断线重连)
流程图:
当软AC控制器选择和服务器连接后,服务器会将根据软AC分配的sn以及对应的云账号进行一个关系绑定。该绑定关闭只能有web端去选择遗忘解绑,软AC端可以做到切换绑定账号,但无权限去删除服务器保存的绑定关系。
注:账号可以在不同电脑上同时登录,同一电脑不能同时启动两个软AC客户端。
上报分为两部分:设备上报给控制器,软AC上报给服务器
设备上报控制器 数据大致分为两部分,统计模块和射频优化模块
统计模块包含:设备状态,无线等终端数统计,日志信息,告警信息,丢包统计以及关联失败事件。由设备在绑定后定时上报,时间间隔1分钟
射频优化模块:由控制器触发射频优化后,设备执行优化操作,若30s内为未返回优化结果则优化失败。
软AC向服务器上报控制台的详情,采用定时上报,时间间隔1分钟
负载均衡是比较常见的技术,目前负载均衡的常用算法有以下几个:
负载均衡器按照请求顺序轮流分配到后台服务器上,均衡地对待每一台服务器。
其不适合作为IMS中消息中心负载均衡算法的原因是这种算法忽略了后台机器的真实负载状况,会造成业务服务器的真实压力不均衡,并且当有新机器加入的时候不能快速地进行负载均衡。
负载均衡系统按照随机函数,根据后台服务器列表的大小值来随机选取其中一台进行访问。随着调用次数增大,其实际效果越来越接近平均分配,达到轮询法的效果。
其不适合作为IMS消息中心负载均衡算法的原因也同轮询法一样。
它是根据客户端ip,通过哈希函数计算得到一个哈希值,然后根据哈希值确定后端服务器地址的序号。采用这种算法进行负载均衡,相同的IP地址,如果服务器列表不变,将映射到同一个后台服务器进行访问。
其不适合作为IMS消息中心负载均衡算法的原因也同轮询法一样。
不同的后台服务器可能机器的配置和当前系统的负载并不相同,因此其抗压能力也不一样。对不同的机器赋予不同的权重,按照权重使用轮询法选取后台服务器。
其不适合作为IMS消息中心负载均衡算法的原因是因为只使用权重值并不能很好的对系统负载做整体的预判,还需要对数据做额外的处理才行。
其和加权轮询法类似,也是根据后台服务器的配置和负载来计算权重。不同的是它使用随机法选取后台服务器。
这种算法比较契合消息中心的业务逻辑,适合作为IMS消息中心的负载均衡算法。
使用加权随机法最重要的是计算权重值,由于权重值是动态变化的,所以我们使用数据服务器上报的速率值来计算权重值,具体的计算过程如下:
需要注意的一点是:应用服务器只会同一台数据服务器建立连接,当有新的应用服务器上线时,数据服务器的业务速率并不会平滑增加,而是会出现跳变的现象。
在不同的 WLAN 应用场景,要尽量保证用户能快速连接网络,需要实现无线用户的负载均衡。当某个 AP接入的用户过多时,用户体验下降,新用户无法接入,已经接入用户可能掉线,单个用户速率很低。负载均衡是指AC或者AP收集各个节点的负荷信息,进行相关算法决策,对分配给各节点的任务进行重新调度(进程迁移或任务调度),平衡各个AP的负荷差异, 最大化地利用网络资源。作用如下:(1)提高网络的整体吞吐量及频带利用率,充分利用资源;(2)减小拥塞AP的接入延迟,在线单个用户的带宽提高;(3)提高空闲AP的吞吐量,平分整个系统负担。
负载均衡模块设计思路是基于接入式负载均衡和切换式负载均衡。当AP负载较重时,拒绝该 AP 与新加入的终端关联,新加入网络的终端只好寻找其他负载较轻的AP进行连接,从而在一定程度上实现负载的均衡调度。AP之间通过AC进行有线连接,通过负载均衡机制相互传递负载相关信息参数,根据这些信息,判断出各AP之间的负载状况进行负载均衡决策。
在客户端成功连接AP前进行客户端连接数和流量统计判断是否超过阈值可连接,若超过阈值,AP拒绝客户端的连接请求,若没有超过阈值,AP处理并连接客户端的连接请求。
负载均衡的实现依赖于AC端的决策和AP端的信息采集。其中AP端的射频管理主要负责AP相关信息的采集及与AC端信息收集分析模块交互;AC端的信息收集分析模块与负载均衡信息交互处理构成了负载均衡决策。
AP数据采集(AP实时向AC上报自身信息)->分析(AC实时或定时对收集数据进行分析评估)->决策(AC根据负载均衡算法决策,更新AP决策)->执行(AP 执行AC 下发的配置,进行网络资源调优)。
AP侧的数据采集模块定时向AC通告自身状态信息,包括频段繁忙情况、收发包统计、用户接入数、AP流量及负荷、邻居AP状态信息等动态数据;AC侧的负载均衡模块对AP上报数据做分析,当检测到某AP拥塞或信道繁忙时,如果邻居范围内存在空闲且可接入的AP,将向该AP发送拥塞指令;AP收到AC均衡调度指令后,禁止响应后续工作站的探测请求以及关联请求(该过程的目的是引导客户端关联至邻居未拥塞的AP上),直至收到AC的解除拥塞指令才允许新的无线客户端关联(此过程中终端可能在关联上合适的AP之前需要不断尝试连接不同AP花费掉时间,降低了用户体验度)。
AC对整个网络的负载进行集中决策控制,必须要收集所有AP的负载状态信息,所以AP务必要将负载信息通告给AC。AP采集的信息包括:连接会话的客户端数目,AP实时流量,工作信道,信道使用率,信号强度,信道带宽,可接入用户数,SNR等。
分析流程图(1)如下:
流程图(1)
当前负载均衡决策判断条件最大连接数,最大流量的处理。最大连接数通过设置AP同时接入STA数目;最大流量通过AP侧统计当前STA业务处理流量;信道利用率是信道实际用量与信道容量的比值,通过AP获取并计算;信号强度由AP将参数返回给AC。
当前已连接AP的连接数负载达到80%时不再让客户端接入(此时的80%是预设参数,需在调试中不断确认);当已连接AP与邻居AP的连接数负载差值在10%(此时的10%是预设参数,需在调试中不断确认)内时考虑流量负载(类似于连接数负载预设参数)、信道利用率负载以及信号强度负载,当这几个参数指标差值都在10%范围内时无需进行踢除用户进行负载切换,以免影响用户体验。决策中的阈值设定需要在实际环境中进行调整。
AP通过判断执行决策中的参数指标是否允许客户端接入和客户端接入后踢除已连接客户端进行负载调整,其中踢除客户端的参数暂定为流量和信号强度(其中动态调整后续优化)。流程图(2)是客户端扫描连接上线前的过程。
客户端关联流程图(2)如下:
流程图(2)