基于配置管理的APP网络连接方法、设备及配置服务器与流程

文档序号:11254094阅读:770来源:国知局
基于配置管理的APP网络连接方法、设备及配置服务器与流程

本发明涉及网络技术领域,更具体地涉及一种基于配置管理的app网络连接方法、设备及配置服务器。



背景技术:

当前大多数app均采用统一资源定位符(url)来访问后台服务,即域名(host)+路径(path)+请求参数(query/body)的形式,其中,host通常是个统一的域名,一个app通常设定一个域名。这种访问方式首先由dns解析域名到对应的ip地址上,然后才是根据路径映射到对应的服务上,这种访问方式存在一些弊端:

1、dns解析有一定的机率失败,导致用户连接失败;

2、解析dns需要耗费一定的时间,影响app服务体验;

3、dns解析容易被运营商劫持,直接导致app服务不可用或者弹出广告;

4、当通过dns解析到服务的这条线路网络质量差的时候,并不能立即修改链路。

此外,现有技术中也有通过ip直连的,但通过ip直连的方案通常对dns配置不加密,容易直接暴露内网ip,存在一定的安全隐患;此外,通过ip直连很难兼顾多模块应用。



技术实现要素:

有鉴于此,本发明的主要目的在于提出一种基于配置管理的app网络连接方法、设备及配置服务器,以解决上述技术问题中的至少之一。

为了实现上述目的,作为本发明的一个方面,本发明提出了一种基于配置管理的app网络连接方法,包括以下步骤:

app向配置服务器请求配置文件;

配置服务器根据dns配置表和nginx集群的负载监控实时生成所述配置文件,并将其发送给所述app;其中所述配置文件包括所述app各模块的域名、所述域名对应业务nginx集群的ip地址,以及负载情况;

app解析所述配置文件,并进行如下判断:

当配置文件中存在ip地址时,app访问所述ip地址,直连到业务的nginx集群,由nginx集群映射到业务集群上;

当配置文件中不存在ip地址而存在域名时,app使用dns解析,通过dns服务器访问对应所述域名的nginx集群。

作为本发明的另一个方面,本发明还提出了一种基于配置管理的app网络连接设备,包括:

存储器,用于存储待执行的指令;

处理器,用于执行存储器中存储的指令以运行一app网络连接方法,所述app网络连接方法包括以下步骤:

向配置服务器请求配置文件;所述配置文件由配置服务器根据dns配置表和nginx集群的负载监控实时生成;其中所述配置文件包括所述app各模块的域名、所述域名对应业务nginx集群的ip地址,以及负载情况;

解析所述配置文件,并进行如下判断:

当配置文件中存在ip地址时,app访问所述ip地址,直连到业务的nginx集群,由nginx集群映射到业务集群上;

当配置文件中不存在ip地址而存在域名时,app使用dns解析,通过dns服务器访问对应所述域名的nginx集群。

作为本发明的再一个方面,本发明还提出了一种配置服务器,其特征在于,所述配置服务器根据dns配置表和nginx集群的负载监控实时生成一配置文件,并在app提出请求时将其发送给所述app;其中所述配置文件包括所述app各模块的域名、所述域名对应业务nginx集群的ip地址,以及负载情况。

基于上述技术方案可知,本发明的app网络连接方法及装置具有如下有益效果:

1、支持app根据配置中不同类型(wifi、3g)的网络选择不同的网络链路;

2、支持app根据配置中的ip地址的可用性、负载等,选择是走dns解析访问接口还是采用ip直连,采用ip直连能够避免dns解析失败以及dns劫持等问题;同时采用配置管理的方式能够兼容没有采用ip直连的模块,大公司中,各个模块的技术进展并非完全同步;

3、根据ip的负载选择可用的ip,避免ip过载;

4、采用树形结构的配置文件管理网络访问,具备良好的扩展性;

5、在配置中结合验签算法和直连开关,一定程度上保护内网ip。

附图说明

图1是本发明的基于配置管理的app网络连接装置的结构框架示意图;

图2是本发明中采用树形节点的方式管理配置文件的示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。

针对dns解析的诸多弊端,以及app自身提升网络服务质量的需求,本发明提出了一种基于配置管理的app网络连接方法,支持多模块app灵活管理自身的网络链接方式。

具体地,本发明通过向app下发网络请求配置文件来支持app动态管理是通过dns还是直连ip地址解析连接网络服务,网络请求配置文件由后台配置服务根据业务集群的nginx服务器的负载监控来实时生成,app采用服务(service)周期性地获取配置文件,并解析出当前该模块最合适的连接方式。

其中nginx服务器是俄罗斯人igorsysoev(塞索耶夫)编写的一种高性能的http和反向代理服务器,是一款轻量级的web服务器/反向代理服务器及电子邮件(imap/pop3)代理服务器,并在一个bsd-like协议下发行。nginx作为负载均衡服务器,具有如下优点:nginx既可以在内部直接支持rails和php程序对外进行服务,也可以支持作为http代理服务器对外进行服务。在连接高并发的情况下,nginx是apache服务器不错的替代品,能够支持高达50,000个并发连接数的响应。

具体地,本发明公开了一种基于配置管理的app网络连接方法,包括如下步骤:

app向配置服务器请求配置文件;

配置服务器根据dns配置表和nginx集群的负载监控实时生成所述配置文件,并将其发送给所述app;其中所述配置文件包括所述app各模块的域名、所述域名对应业务nginx集群的ip地址,以及负载情况;

app解析所述配置文件,并进行如下判断:

当配置文件中存在ip地址时,app访问所述ip地址,直连到业务的nginx集群,由nginx集群映射到业务集群上;

当配置文件中不存在ip地址而存在域名时,app使用dns解析,通过dns服务器访问对应所述域名的nginx集群。

其中,所述配置文件采用树形节点的方式进行管理;

其中,所述配置文件支持xml和json格式。

其中,所述配置文件的根目录为所述app的域名,所有网络接口均能够使用;一级目录为若干个模块的域名,每个模块的域名能单独配置;

其中,每个模块的域名对应若干个ip地址,以及是否高可用性、负载情况及配置更新频率。

其中,所述配置服务器支持人工配置ip,防止程序出错导致连接错误的ip;

其中,app在解析配置文件时,采用递归方式,其中遵循如下规则:

当树形节点的子节点解析不成功时,使用所述app的域名;

解析到所述模块时,如果网络类型与当前网络匹配时,则选择所述模块,如果所述模块的表示是否可以解析的子节点为空,或者不可用,则表示所述模块不可使用ip直连,停止递归,否则继续递归ip;

当解析到ip时,如果负载情况低于一阈值且是否高可用性为是时,选择所述ip并停止递归,当所有ip都不可选时,采用域名。

其中,对配置文件的关键信息进行加密,避免明文存储,在所述模块中添加接口验签所需要的密钥。

本发明还公开了一种基于配置管理的app网络连接设备,包括:

存储器,用于存储待执行的指令;

处理器,用于执行存储器中存储的指令以运行一app网络连接方法,所述app网络连接方法包括以下步骤:

向配置服务器请求配置文件;所述配置文件由配置服务器根据dns配置表和nginx集群的负载监控实时生成;其中所述配置文件包括所述app各模块的域名、所述域名对应业务nginx集群的ip地址,以及负载情况;

解析所述配置文件,并进行如下判断:

当配置文件中存在ip地址时,app访问所述ip地址,直连到业务的nginx集群,由nginx集群映射到业务集群上;

当配置文件中不存在ip地址而存在域名时,app使用dns解析,通过dns服务器访问对应所述域名的nginx集群。

其中,所述配置文件采用树形节点的方式进行管理;

其中,所述配置文件支持xml和json格式;

其中,所述配置文件的根目录为所述app的域名,所有网络接口均能够使用;一级目录为若干个模块的域名,所述模块的域名能单独配置;每个模块的域名对应若干个ip地址,以及是否高可用性、负载情况及配置更新频率。

其中,所述配置服务器支持人工配置ip,防止程序出错导致连接错误的ip;

其中,解析所述配置文件时,采用递归方式,其中遵循如下规则:

当树形节点的子节点解析不成功时,使用所述app的域名;

解析到所述模块时,如果网络类型与当前网络匹配时,则选择所述模块,如果所述模块的表示是否可以解析的子节点为空,或者不可用,则表示所述模块不可使用ip直连,停止递归,否则继续递归ip;

当解析到ip时,如果负载情况低于一阈值且是否高可用性为是时,选择所述ip并停止递归,当所有ip都不可选时,采用域名。

其中,对配置文件的关键信息进行加密,避免明文存储,在所述模块中添加接口验签所需要的密钥。

本发明还公开了一种配置服务器,所述配置服务器根据dns配置表和nginx集群的负载监控实时生成一配置文件,并在app提出请求时将其发送给所述app;其中所述配置文件包括所述app各模块的域名、所述域名对应业务nginx集群的ip地址,以及负载情况。

其中,所述配置文件支持xml和json格式。

其中,所述配置文件采用树形节点的方式进行管理。

其中,所述配置文件的根目录为所述app的域名,所有网络接口均能够使用;一级目录为若干个模块的域名,所述模块的域名能单独配置;每个模块的域名再对应若干个ip地址,以及是否高可用性、负载情况及配置更新频率。

其中,所述配置服务器支持人工配置ip,防止程序出错导致连接错误的ip。

其中,对配置文件的关键信息进行加密,避免明文存储,在所述模块中添加接口验签所需要的密钥。

下面结合具体实施方式和数个实施例对本发明的技术方案进行进一步阐述说明。

一、本发明的技术方案架构

本发明的基于配置管理的app网络连接装置的结构框架如图1所示,其中:

1、app通过service向后台配置服务器请求配置文件,配置文件包括域名和其对应的业务中的nginx集群的ip地址;

2、当配置文件中存在ip地址时,app优先访问ip地址,直连到业务的nginx集群,由nginx映射到业务集群上;

3、当配置文件中不存在ip地址而存在域名时,app使用dns解析,通过dns服务器访问内网;

4、配置文件由配置服务器根据域名的配置和nginx集群的负载监控生成。

其中需要说明的是,业务的nginx集群在公司内网中,业务集群只能通过nginx集群映射到,dns服务器解析到nginx集群。

二、配置管理

本发明中,配置管理包括配置文件的生成与解析,配置文件决定了app的访问方式,其生成原理是配置服务器读取dns配置表,然后根据nginx负载监控生成每个ip地址的负载,app根据负载来选择最合适的ip地址进行直连。

在一些技术方案中,配置文件是采用树形节点的方式管理的,结构如图2所示,具体说明如下:

配置文件的根目录是整个app可用的域名,所有网络接口都可以使用,针对app中的模块,又可以单独配置这个模块所拥有的域名,每个域名对应数个ip地址。

配置文件由配置服务器生成,记录的内容是当前dns配置表中的域名和ip地址的对应,以及ip地址的负载和配置情况,配置服务器支持人工配置ip的可用性,防止程序出错导致连接了错误的ip。

配置文件同时支持xml和json格式,以xml为例,可以设置如下代码:

一个app中,会有数个模块(module),每个模块拥有ip地址和其适合的网络环境以及是否可用。一个模块中,有数个ip,每个ip拥有地址、是否高可用性、负载情况,以及配置更新频率。

三、配置解析与使用

app在解析配置文件时,采用递归方式,子节点解析不成功则使用app节点中的host。

解析到模块时,如果网络类型(net)与当前网络匹配时,则选择该模块,如果该模块的子节点为空,或者不可用(enable为false),则表示该模块不可使用ip直连,停止递归,否则继续递归ip。

当解析到ip时,如果cpu使用率低于0.7,并且内存使用率(memery)低于0.7时,判断一下是否高可用(availability),如果为true,则选择该ip并停止递归,当所有ip都不可选时,采用域名。

当解析出可用的网络配置时,重新生成httpclient的实体。

四、接口验签

采用ip直连的方式访问服务,无法避免内网ip暴露,引起不必要的攻击,本发明对配置文件的关键信息(host、ip地址)进行加密,避免明文存储,在模块中添加接口验签所需要的密钥(key)。

本发明的验签算法如下:

1、先将请求参数(不包括sign)转换成hashmap;

2、然后按照字符升序排序(a在最前面的那种);

3、再转换成字符串,例如keylvaluelkey2value2……,再拼接上module中的key和name,再进行md5处理,得到一个字符串,然后再对这个字符串进行md5处理,得到sign,签名完成;

4、服务器根据module中的key进行重新签名,匹配sign,从而完成验签。

对比实施例1

直接采用ip地址的访问请求:比如通过如下ip地址http://115.239.211.112进行访问时,会发现访问的是百度的服务器。

对比实施例2

采用域名进行访问,例如通过www.baidu.com进行访问,也能访问到百度,这是依靠dns协议做到的。

实施例1

对于一个有很大客户数的app,如果所有网络请求都连接到一个服务器上,那么该服务器有可能会因为负载太多而崩溃,从而需要让多台服务器来分担这个负载。此时,采用对比实施例1、2的连接方式均有可能存在某些服务器拥堵,而某些服务器空闲的状态。当采用本发明的配置文件来让app连上不同ip的不同服务器,可以避免所有的app都请求同一台服务器,同时通过增加一个负载均衡的模块,实时监听该ip上的负载(内存、连接数、cpu占用等),app在需要连接时先解析得到ip,然后找一个负载最低的,从而可以在多个服务器之间灵活调度,使负载均衡。

实施例2

对于具有多个用户界面的app,其中多个用户界面可能由不同团队制作,分别由不同的后台服务器集群提供服务。

此时,采用本发明的方法,根据本发明的配置文件,在文件中基于不同的模块(module)分别写入其配置信息,例如百度下面的各种模块,如百度百科:

<modulename=″baike.baidu.com″host=″180.149.133.167″enable=″true″net=″wifi″key=″xxxxxxx″>

//这里面模块下面的各种ip

</module>

由于百度百科实际上也不止一台服务器,也是个服务器集群,那么它下面其他的服务器之一,可以写成:

<ipip=″127.0.0.1″

availability=″true″

cpu=″0.2″

memery=″0.3″

frequency=″300″/>

如果有更多,可以依次写成上述格式。

从而在app需要调用该模块时,在相应模块的配置信息中读取ip地址、域名、高可用性和负载情况等,根据本发明的解析策略从该配置文件中寻找到负载情况最小、最快链接的路径进行访问。

实施例3

对于美味不用等的订餐软件app,其中包括占位模块、菜单模块、点餐模块、支付模块等,由于不同模块有可能是不同公司开发,例如支付模块,有可能是调用支付宝、微信或银行第三方支付平台等,因此通过本发明的配置文件,在配置文件中根据不同模块分别调用位于不同业务集群上的不同服务,从而完成该app的整个功能。

经过实际试用验证,本发明方案基于配置管理的方式供app决策是使用域名访问还是ip直连,支持客户端根据网络类型和ip配置情况来决策是用域名访问还是ip直连,在提供避免dns解析的诸多问题上,兼顾了多模块app后台技术发展不均衡的情况,基于树形的配置文件具备良好的扩展性,新增了ip和域名不再需要发版,对app的网络连接体验有着明显的促进意义。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1