一种基于NGINX实现ACS系统的高效调度分流方法与流程

本发明涉及数据决策,具体是一种基于nginx实现acs系统的高效调度分流方法。
背景技术:
1、tr069是一种网络设备数据沟通协议,用途广泛。
2、目前,tr协议是用于cpe和自动配置服务器acs之间的通讯协议。该协议提供了一套机制,包括cpe的可靠的自动配置,同时将一些其他的cpe管理功能合并到同一个公共的平台框架上。
3、acs系统中,纳管cpe的数量,会话响应速度,和会话连接安全,是三个重要指标,因此,需要通过分布式架构支撑系统,高效的调度就变得尤为重要。此外,因为业务需要,acs系统要能直接远程配置cpe,如何保证acs,cwmp,cpe之间的会话连接稳定,也是调度过程中的一个痛点。
4、常见的调度方式的四种方式:
5、round_robin:轮循,一个轮一个
6、weight_round_robin:加权轮循,一个轮一个,但是权重比不一样
7、ip_hash:同一个ip请求,会调度到同一服务器上
8、最小连接:请求会调度到当前连接数最小的服务器上
9、在实际的工作中有两种会话连接方式:
10、(1)cpe发起连接:
11、cpe可以在任何时候使用预定的统一域名地址向acs系统发起建连。cpe必须向acs发起建连并发送inform rpc method,包括:
12、a)cpe初始安装时第一次接入网发起建连;
13、b)上电或者重启;
14、c)心跳,每一个通知周期间隔;
15、d)当被optical scheduleinform method所指示需要执行时;
16、e)cpe接收acs的有效链接请求;
17、f)acs的url发送改变;
18、g)一个在发生改变时需要发起一个inform的参数发生了变化;
19、h)被acs通过setparameteratributes method所标示为active notification的参数由于一个外部原因发生改变。由acs自己通过setparametervalues使得参数发生的改变必须不能引起一个新的会话的发起。如果一个参数在cpe能够成功的发起会话执行这个通知之前发生了多次修改,cpe只需要上报一次通知。如果一个参数在会话运行过程中由于内部因素发生了改变,一个新的会话将会在本会话结束后发起并建连(它必须不能影响当前会话);
20、i)一旦一个不正常终结的会根据会话重新建立规程发起重建时。
21、ps:当cpe或acs没有存在等待处理的消息时,cpe必须不能继续维护这个到acs的链接,会话终止。
22、(2)acs可以在任何时候使用连接请求机制请求cpe发起一个到acs的连接。cpe需要支持此机制,同时acs侧也支持此机制。此机制包括:
23、a)连接请求必须是一个到cpe指定的url的http get,且url值在cpe上面是一个有效的只读参数。这个url的通道值应该是有cpe随机生成的,所以它是唯一地对应某个cpe;
24、b)连接请求必须使用http,而不是https;
25、c)连接请求的http get里面不应有数据。cpe应该忽略里面所有可能存在的数据;
26、d)cpe在执行之前必须使用digest-authentication来对acs进行认证;
27、e)cpe必须允许来自任何源地址的拥有针对这个目标cpe的正确的认证参数的连接请求;
28、f)cpe通过http状态码“200(ok)”或“204(not content)”来响应一个经过正确认证的连接请求。cpe必须在认证成功后并在开始发起这个会话之前立刻发送这个响应。同时,http响应中的消息体长度必须是0;
29、g)为了避免cpe被服务攻击,cpe应该限制在某个时间内它能接受的连接请求数。如果由于这个原因cpe拒绝了一个连接请求,cpe必须给这个连接请求响应一个http 503(invalid server)。在这种情况下,cpe不应该在响应报文中包括hht的retry-after头;
30、h)如果cpe对一个连接请求鉴权成功并跟上面的描述一样做了回应,并且它并不已经在会话过程中,则它必须在发送响应后的30秒内根据inform里面的“6connectionrequest”eventcode中包含的acs地址尝试建立一个会话;
31、i)如果acs收到一个连接请求的成功响应,但是在30秒内cpe还无法根据inform里面的“6connection request”eventcode中包含的acs地址成功建连,则acs可以给cpe重新发起这个请求连接;
32、j)如果cpe在成功鉴权并响应了一个连接请求后,且在跟这个acs建立一个会话之前收到了一个或者多个其他的成功鉴权的连接请求,cpe必须给每个连接请求返回一个成功的响应,但是必须不能为这些其他的连接请求建立其他的会话,不管在这段时间内收到了多少个连接请求;
33、k)如果cpe已经跟acs建立会话时收到一个或多个的请求,它必须不能过早地终止当前的会话,而必须选择用http 503状态码响应,或者当前会话结束后,跟inform里面的“6connection request”eventcode中包含的地址发起一个新的会话;
34、l)cpe必须不能因为由于上述描述的原因之外的其他原因来拒绝一个被完全鉴权过的连接请求。如果cpe由于某个上面描述的原因而拒绝这个连接请求,它必须不能给这个连接请求发起一个到acs的会话。
35、现有方法一,二,四,最常见的调度方法,包括:
36、在当前的调度场景时,轮循机制虽然能保证每个cwmp接收到的请求十分均衡,但容易导致cpe与acs之间会话不安全。
37、假如,acs通过cwmp-1实例对cpe连接发起会话请求,cpe会响应并尝试与acs建立一个对话。如果当前调度由于是轮循机制,把cpe的响应轮循到cwmp-2实例中,这样cwmp-1实例收不到cpe的响应,最终导致会话不安全。
38、现有方法三,是一种根据ip_hash调度的方法,如果是同一个ip客户端的请求,ip_hash会把请求始端调度到统一服务器上。ip_hash是根据ip地址的前几位进行检测的。
39、在ip_hash的调度场景时,能够很好的保证acs与cpe的会话安全,但随着纳管的cpe数量的增加,容易发生请求倾斜,cpe请求全部集中在几个cwmp服务实例中,其他cwmp服务实例则空载。最终导致,acs与cpe会话响应慢和资源利用率低的情况。
40、通过上述分析,现有调度方式不能很好满足acs系统,存在的问题及缺陷,为:调度方法的均衡性能和响应速度,与acs和cpe会话安全,与服务器利用率之间很难同时满足。
41、解决以上问题及缺陷的难度为:
42、保证acs与cpe会话安全,在分布式架构中,保证acs与cpe的会话,在一段时间内,始终通过同一个cwmp实例执行,但执行的cwmp不是固定的,应该是动态的,是最优选择。
43、防止请求倾斜,在保证上述问题解决的前提下,尽量避免一个cwmp实例执行过多的会话请求。
44、解决以上问题及缺陷的意义为:
45、本发明将利用redis+nginx+lua组合实现动态路由表,来解决acs与cpe会话请求的调度问题和数据下发隔离功能;
46、本发明利用繁忙因子解决会话请求倾斜问题。
技术实现思路
1、本发明要解决的技术问题就是克服以上的技术缺陷,提供一种基于nginx实现,满足acs与cpe进行tr协议交互的高效调度方法、系统,所述系统管理包括以下一项或多项的组合:信息获取,参数配置,性能监控,性能告警,故障诊断。
2、本发明提供了一种临时路由表,在保证acs与cpe会话连接安全的前提下,尽可能地提升会话响应速度和系统利用率。本发明提供了一种繁忙因子,防止了出现连接倾斜。本发明提供了一种动态增减cwmp实例,提高了系统的可扩展性。
3、本发明是这样实现的,一种基于nginx实现的acs与cpe之间tr通讯协议的调度方法,包括:安全访问校验,基于繁忙因子选择cwmp服务,防止请求连接偏斜,并基于动态路由表调度的连接请求方式。
4、进一步,所述基于nginx实现的acs与cpe之间tr通讯协议的调度方法,当cpe发起连接具体包括:
5、步骤一,当cpe对acs发起连接请求,先通过dns对cpe内配置的统一url进行解析得到ip,然后对ip发起连接请求;
6、步骤二,服务端的nginx获取并开始处理cpe发起的请求;
7、步骤三,dispatch获取请求cpe的ip并查看是否第一次访问;如果第一次访问,则通过后端对cpe的型号,品牌是否纳管进行校验;
8、步骤四,当校验通过或者非第一次访问,dispatch会去请求路由表,如果cpe的ip存在路由表中,则直接通过临时动态路由表找到的cwmp进行响应;如果不存在,则通过繁忙因子选择最优的cwmp进行响应;
9、步骤五,响应结束后,把新的路由信息写入或者更新进临时动态路由表中,并设置有效时长。
10、进一步,当acs发起连接时,在业务场景中通常有3种情况,一种是日常任务,包括cpe注册,升级等操作,都是由acs建立任务,由cwmp执行与cpe之间通讯;第二种情况,则是cpe故障处理,一般acs要对指定的cpe进行操作;包括:
11、步骤一,当acs要对指定cpe进行操作的时候,acs先查看路由表,如果访问的cpe存在,则直接从路由表获取到cwmp的ip;如果访问的cpe不存在,则通过繁忙因子寻找cwmp的ip;
12、步骤二,找到cwmp的ip后,acs通过修改请求ip,伪装成目标cpe,对cwmp发起请求;
13、步骤三,当cwmp收到acs发送的请求后,会对目标cpe发起会话连接,发送操作报文;
14、步骤四,cpe收到cwmp的操作指令后,进行指令操作,并按照上述cpe发起连接步骤1-3,将结果上报给cwmp;
15、步骤五,cwmp收到结果后,回复acs的请求响应。
16、参考图2,acs操作指定cpe的链路图。
17、第三种情况,则是acs周期性获取特定的参数指标数据,这一部分称为采集,同时这部分的tr交互,会根据dispatch区别于别的连接请求,独立处理。包括:
18、步骤一,周期一到,acs主动发起对cpe的请求,获取指定的性能指标参数流程如第二种情况步骤1-3,并在redis标记。
19、步骤二,cpe收到cwmp的操作指令后,进行指令响应,将结果上报给cwmp。
20、步骤三,cwmp收到结果后,会根据dispatch转发到单独处理采集数据的acs服务器上。
21、步骤四,acs收到响应,移除redis的标记,并存贮性能指标数据。
22、进一步,动态临时路由表,所述cpe发起连接中的步骤四中的动态临时路由表存储在内存中,方便读取;路由表的信息包括:cpe的ip,响应cwmp的ip,备用cwmp的ip,数据有效时长;响应主cwmp是由繁忙因子决定的,备用cwmp则是从其他机架选择的;超过有效时长,未被读取的路由数据,将会被丢弃;此外,路由数据每次读取一次,则会更新数据有效时长,保证acs与cpe连接会话的安全;
23、进一步,繁忙因子,上述中的繁忙因子是由各个cwmp服务器的连接数和倾斜阀值共同确定的,用于cpe发起建连时,cwmp的链路选择。
24、本发明的另一目的在于提供一种一种基于nginx实现的tr协议高效调度方法的acs系统包括:
25、acs:用户交互的服务端,提供对纳管cpe的操作,监控,任务下发等功能。
26、cwmp:在acs中,真正与cpe设备进行交互的组件。
27、cpe:用户端设备,或称被管理设备。
28、dispatch:调度模块,基于lua编写的nginx自定义模块。
29、dns:域名服务器。规定acs和cpe使用url地址相互识别和访问时,帮助解析url参数。
30、dhcp:动态主机配置协议服务器,给acs和cpe分配ip地址。
31、redis:缓存数据库。
32、参考图3,acs架构图
33、本发明的另一目的在于提供一种分布式系统,提高纳管cpe的数量限制。由于资源限制和需要保证响应速度,一个cwmp通常能够支撑5万至8万的cpe业务。一个城市,少则几十万,多则上百万的cpe,一般需要多个cwmp才能支撑。一个好的调度方法在分布式架构里面尤为关键。
34、本发明与现有的技术相比的优点在于:
35、1、本发明调度方法可以提高acs系统对纳管cpe的数量上限,方便cpe的统一管理,降低人工成本;在调度过程中,响应快,性能更好,保证会话连接安全;在网络传输的过程中,优化路由线路,提高资源利用率;acs可以直接远程操控cpe,不用人工上门,既可以解决cpe用户故障。
技术研发人员:臧沙沙,颜广杰,朱聪颖,蓝壮鑫
技术所有人:深圳市天威网络工程有限公司
备 注:该技术已申请专利,仅供学习研究,如用于商业用途,请联系技术所有人。
声 明 :此信息收集于网络,如果你是此专利的发明人不想本网站收录此信息请联系我们,我们会在第一时间删除
