用于获取配置信息的方法、电子设备和存储介质转让专利
申请号 : CN202110715808.8
文献号 : CN113179332B
文献日 : 2021-09-17
发明人 : 袁宇
申请人 : 脉策(上海)智能科技有限公司 , 上海脉策数据科技有限公司
摘要 :
权利要求 :
1.一种用于获取配置信息的方法,包括:接收对于应用配置的请求,所述请求指示应用配置标识;
基于应用配置标识与第一网址之间的关联,确定与所接收的应用配置标识相关联的第一网址,所述第一网址存储有与所述应用配置相关联的逻辑连接信息;
从所确定的第一网址获取与所述应用配置相关联的逻辑连接信息,所述逻辑连接信息指示多个第二网址之间的逻辑连接关系,所述多个第二网址中的每个第二网址存储有与所述应用配置相关联的属性键值对;
解析所述逻辑连接信息,以生成抽象语法树,所述抽象语法树以所述多个第二网址为叶子节点并以逻辑连接关系指示符为非叶子节点;以及基于所述抽象语法树,生成配置信息,以用于响应所述请求,所述配置信息包括属性键值对。
2.根据权利要求1所述的方法,其中生成所述配置信息包括:如果确定所述抽象语法树的根节点为或连接关系指示符,则确定所述根节点的左子节点是否为叶子节点;
如果确定所述左子节点为非叶子节点,则基于所述根节点的左子树,递归生成所述配置信息;
如果确定所述左子节点为叶子节点,则确定从所述左子节点所对应的第二网址获取属性键值对是否发生故障;
如果确定从所述左子节点所对应的第二网址获取属性键值对未发生故障,则将所获取的属性键值对作为所述配置信息;
如果确定从所述左子节点所对应的第二网址获取属性键值对发生故障,则确定所述根节点的右子节点是否为叶子节点;
如果确定所述右子节点为非叶子节点,则基于所述根节点的右子树,递归生成配置信息;以及
如果确定所述右子节点为叶子节点,则从所述右子节点所对应的第二网址获取属性键值对,作为所述配置信息。
3.根据权利要求2所述的方法,其中从所述左子节点所对应的第二网址获取的属性键值对和从所述右子节点所对应的第二网址获取的属性键值对相同。
4.根据权利要求1所述的方法,其中生成所述配置信息包括:如果确定所述抽象语法树的根节点为与连接关系指示符,则确定所述根节点的左子节点是否为叶子节点;
如果确定所述左子节点为叶子节点,则从所述左子节点所对应的第二网址获取属性键值对,作为第一部分配置信息;
如果确定所述左子节点为非叶子节点,则基于所述根节点的左子树,递归生成所述第一部分配置信息;
如果确定所述根节点的右子节点为叶子节点,则从所述右子节点所对应的第二网址获取属性键值对,作为第二部分配置信息;
如果确定所述右子节点为非叶子节点,则基于所述根节点的右子树,递归生成所述第二部分配置信息;以及
将所述第二部分配置信息中与所述第一部分配置信息不存在交集的属性键值对与所述第一部分配置信息进行合并,以生成所述配置信息。
5.根据权利要求4所述的方法,其中所述第一部分配置信息用于应用测试。
6.根据权利要求1所述的方法,其中生成所述配置信息包括:如果确定所述抽象语法树的根节点为条件连接关系指示符,则从所述根节点的左子节点所对应的第二网址获取属性键值对;
如果确定所述属性键值对中的属性值为真,则确定所述根节点的右子节点是否为叶子节点;
如果确定所述根节点的右子节点为叶子节点,则从所述根节点的右子节点所对应的第二网址获取属性键值对,作为所述配置信息;
如果确定所述根节点的右子节点为非叶子节点,则从所述根节点的右子节点的左子节点所对应的第二网址获取属性键值对,作为所述配置信息;以及如果确定所述属性键值对中的属性值非真,则从所述根节点的右子节点的右子节点所对应的第二网址获取属性键值对,作为所述配置信息。
7.根据权利要求1所述的方法,其中所述请求还指示属性键,以及生成所述配置信息包括:
如果确定所述抽象语法树的根节点为管道连接关系指示符,则从所述根节点的左子节点所对应的第二网址获取属性键值对;
如果确定所述根节点的右子节点为叶节点,则从所述根节点的右子节点所对应的第二网址获取属性键与所获取的属性键值对中的属性值相匹配的属性键值对,作为所述配置信息;以及
如果确定所述根节点的右子节点为非叶节点,则基于所述根节点的右子树,以所获取的属性键值对中的属性值为属性键递归生成所述配置信息。
8.根据权利要求1所述的方法,其中与所述多个第二网址对应的、用于属性键值对的多个存储设备是异构的。
9.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1‑8中任一项所述的方法。
10.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行权利要求1‑8中任一项所述的方法。
说明书 :
用于获取配置信息的方法、电子设备和存储介质
技术领域
背景技术
配置服务器。应用启动时首先从文件或中心配置服务器获得属于自己的配置信息,进行一
些个性化设置后启动。
容易单点故障的问题。
发明内容
确定与所接收的应用配置标识相关联的第一网址,第一网址存储有与应用配置相关联的逻
辑连接信息;从所确定的第一网址获取与应用配置相关联的逻辑连接信息,逻辑连接信息
指示多个第二网址之间的逻辑连接关系,多个第二网址中的每个第二网址存储有与应用配
置相关联的属性键值对;解析逻辑连接信息,以生成抽象语法树,抽象语法树以多个第二网
址为叶子节点并以逻辑连接关系指示符为非叶子节点;以及基于抽象语法树,生成配置信
息,以用于响应请求,配置信息包括属性键值对。
行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行根据第一方面所述
的方法。
附图说明
具体实施方式
到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同
样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的
实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明
确的和隐含的定义。
用服务,如果能将配置服务“寄生”于这些基础架构中已有的服务中,就可以省去多维护一
个配置服务的目的。而由于不同应用的基础架构往往差别很大,如果该配置服务的“寄生”
能力出众,能寄生于各种存储介质,就可以让配置服务更具生命力。
以提升配置服务的稳定性。
一修改每一份拷贝的问题,使得配置的修改复杂化。如果配置服务器能支持多层级,第一层
级提供主要的配置信息,第二层级提供少数需要修改的配置信息,将两层级的数据叠加就
是最终的配置,那么每个应用只需要单独设置极少数的个性化配置即可,从而解决了拷贝
带来的维护复杂性。
将每个微服务的配置合并后供单体应用使用。如果配置服务支持多层级,每一层级对应一
个微服务,那么在不修改的前提下,它既可以用于微服务,也可以用于单体式部署。
的请求,请求指示应用配置标识,并基于应用配置标识与第一网址之间的关联,确定与所接
收的应用配置标识相关联的第一网址,第一网址存储有与应用配置相关联的逻辑连接信
息。计算设备从所确定的第一网址获取与应用配置相关联的逻辑连接信息,逻辑连接信息
指示多个第二网址之间的逻辑连接关系,多个第二网址中的每个第二网址存储有与应用配
置相关联的属性键值对,并解析逻辑连接信息,以生成抽象语法树,抽象语法树以多个第二
网址为叶子节点并以逻辑连接关系指示符为非叶子节点。计算设备基于抽象语法树,生成
配置信息,以用于响应请求,配置信息包括属性键值对。以此方式,能够实现软件定义的虚
拟配置服务器,提升了组装配置的灵活性。
联130、第一网址140以及多个第二网址150‑1至150‑n(下文将第二网址统称为150)。
或设备中的任意一个的分布式计算环境等。在一些实施例中,计算设备110可以具有一个或
多个处理单元,包括诸如图像处理单元GPU、现场可编程门阵列FPGA和专用集成电路ASIC等
的专用处理单元以及诸如中央处理单元CPU的通用处理单元。
人数字助理。在一些实施例中,计算设备110可以与该终端设备为同一设备,也就是说请求
120是计算设备110从其上运行的应用接收的对于应用配置的调用请求。在另一些实施例
中,计算设备110可以为与该终端设备不同的服务器。
键值对,例如
二网址处存储的属性键值对可以完全相同,部分相同或者完全不同。
址,第一网址存储有与应用配置相关联的逻辑连接信息;从所确定的第一网址140获取与应
用配置相关联的逻辑连接信息,逻辑连接信息指示多个第二网址150之间的逻辑连接关系,
多个第二网址150中的每个第二网址150存储有与应用配置相关联的属性键值对;以及解析
逻辑连接信息,以生成抽象语法树,抽象语法树以多个第二网址150为叶子节点并以逻辑连
接关系指示符为非叶子节点;以及基于抽象语法树,生成配置信息160,以用于响应请求,配
置信息包括属性键值对。
出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
连接信息。
的每个第二网址150存储有与应用配置相关联的属性键值对。
config/abc.json,下文可以通过config1,config2来表示)之间的与连接关系(&)。逻辑连
接信息的另一个示例为config1 || config2,其指示了两个第二网址之间的或连接关系(|
|)。
b=2}。file:///etc/config/abc.json处可存储有与应用配置相关联的属性键值对,例如{c
=3, d=4, a=9}。
locahost:1234)获取的属性值为真,则读取config_1中的属性键值对,否则读取config_2
中的属性键值对。
对,然后基于该属性键值对中的属性值作为属性键,从config2读取属性键值对,再基于该
属性键值对中的属性值为属性键,从config3读取属性键值对。
可以指向Redis,还有个第二网址可以指向文件。MySQL、Redis和文件中可以存储属性键值
对,从第二网址获取属性键值对相当于从MySQL、Redis和文件获取属性键值对。应当理解,
这里3个第二网址只是举例,MySQL、Redis和文件也只是举例说明,还可以有更多或更少的
第二网址,所对应的存储设备也可以是能够存储键值对的其他存储设备,本公开的范围在
此不受限制。由此,使得用于存储属性键值对等配置信息的存储设备可以是异构的,从而使
得配置能够寄生于现有的存储设备中,而无需专门的存储设备。
个第二网址(例如,postgresql://locahost:1,postgresql://locahost:2,postgresql://
locahost:3,postgresql://locahost:4)。逻辑连接信息所对应的逻辑连接关系可如图7所
示。其中,主配置服务器730(对应于第二网址config_a)采用切片形式将配置按应用分为应
用配置1,710(对应第二网址config_app1)和应用配置2,720(对应第二网址config_app2)。
配置740进行“或连接”后得到配置服务器750(对应于第二网址config_b), 应用1,760和应
用2,770都可以直接连接config_b 750,并读取和自己相关的配置信息。
config_modify 780和config_b 750进行“与连接”,并设置config_modify 780有更高的优
化级,连接后就获得了调试应用1,791所需要的调试配置服务器790(对应于config_
debug),也就是相当于config_modify&((config_app1&config_app2)||config_mirror)。
系指示符&,抽象语法树800中的叶子节点840‑870分别为第二网址config_modify、config_
app1、config_app2和config_mirror。应当理解,上述逻辑连接信息仅是举例说明,逻辑连
接信息也可以包括其他形式的信息,例如与连接关系、或连接关系、条件连接关系和管道连
接关系等逻辑连接关系之间的任意组合,所生成的抽象语法树也可以是其他形式,本公开
的范围在此不受限制。
性键值对,以生成配置信息。下文将结合图3‑图6详细描述用于生成配置信息的方法。
各种不同的基础架构的配置应用服务。
出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
点为其他逻辑关系指示符,则可以执行与其他逻辑关系指示符相关联的流程,例如如果根
节点为与连接关系指示符,则可以执行方法400,如果根节点为条件连接关系指示符,则可
以执行方法500,如果根节点为管道连接关系指示符,则可以执行方法600,应当理解,这些
逻辑关系指示符只是举例说明,对于其他逻辑关系指示符也适用,本公开的范围在此不受
限制。
应的键值对集合就是config_1的内容,即{a=1, b=2}。如果config_1故障后,或连接的结果
就变为config_2的内容{a=5, b=6, c=7}。
是完全一致的。这样当config_1故障时,自动切换读取config_2后也能读取到相同的结果。
个配置存储到MySQL,一份镜像配置存储到文件,如果MySQL故障后还可以读取文件。
出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
进行大规模复制然后修改,提高了调试效率。
点为其他逻辑关系指示符,则可以执行与其他逻辑关系指示符相关联的流程,例如如果根
节点为或连接关系指示符,则可以执行方法300,如果根节点为条件连接关系指示符,则可
以执行方法500,如果根节点为管道连接关系指示符,则可以执行方法600,应当理解,这些
逻辑关系指示符只是举例说明,对于其他逻辑关系指示符也适用,本公开的范围在此不受
限制。
分配置信息中的a=1具有更高优先级。
同一个属性或者配置项,如果两层级定义了相同的内容,则按优先级高的为准。如果不同的
层级定义了不同的配置项,则将这些配置项叠加或合并在一起。与连接支持配置覆盖,如果
每个服务的配置大同小异,将相同的数据存储到一个低优先级的分层中,而每个应用的特
殊配置存储到另一个高优先级的分层中,那么应用仅需要维护自己少量的不同的配置项即
可。
叶子节点,则从左子节点840所对应的第二网址config_modify获取属性键值对,作为第一
部分配置信息part1。计算设备110确定右子节点820为非叶子节点,则基于根节点810的右
子树,递归生成第二部分配置信息part2。
二部分配置信息part2。
属性键值对,作为第二部分配置信息中的第一部分配置信息part2_1。计算设备110确定右
子节点860为非叶子节点,则从右子节点860所对应的第二网址config_app2获取属性键值
对,作为第二部分配置信息中的第二部分配置信息part2_2。随后,将第二部分配置信息中
的第二部分配置信息part2_2与第二部分配置信息中的第一部分配置信息part2_1不存在
交集的属性键值对与第二部分配置信息中的第一部分配置信息part2_1进行合并,以生成
第二部分配置信息part2。
第一层递归为或连接。如果计算设备110确定从根节点820的左子树获取第二部分配置信息
part2发生故障,则确定根节点820的右子节点870是否为叶子节点。如图8所示,确定右子节
点870为叶子节点,则从右子节点870所对应的第二网址config_mirror获取属性键值对,作
为第二部分配置信息part2。
配置信息。
出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
condition_config获取属性键值对。
点940所对应的第二网址config_1获取属性键值对,作为配置信息。
取。实际两者指向相同的配置。为了兼容两个不同版本的应用,在不更改应用1.0和原始配
置的情况下,应用2.0可以在配置服务器之前通过管道连接加一层键值映射的服务器,如图
10所示,应用1.0 1010通过key=bar来读取原始配置1020(对应于第二网址original_
config),应用2.0 1030通过key=foo来读取键值映射配置1040(对应于第二网址key_
config),其中包括属性值bar,随后通过key=bar来读取原始配置1020。这样应用2.0可以通
过新的key=foo来读取同样的配置。下文将结合图6来详细描述。
出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。请求120还指示
属性键,
配的属性键值对,作为配置信息。
换环境会变得很复杂。通过引入分类连接关系指示符(switch)可以达到快速切换所有应用
配置的目的。
都自动切换到了该配置。
况希望在不更改原始配置的情况下对应用隐藏部分配置。可以使用条件连接IF和非连接
NOT实现该功能。
要被隐藏的配置 (实际并未存储),最后再通过条件连接指示符IF连接原始配置最终生成
应用需要的最终配置服务器。
config,否则会查找不到该配置。
一个真正的配置服务器config。这样应用对每个键的访问最终都会读取存储在config中的
值,但是每次读取都被监控和统计了。通过监控可以分析出热点和冷门配置,并分析出应用
对配置的访问逻辑是否合理。
系实现递归。例如,对于方法200而言,如果在框312处计算设备110确定右子节点为非叶子
节点,则在框314处,基于根节点的右子树,递归生成配置信息。如果该右子树中的根节点为
与连接关系指示符,则递归生成配置信息相当于执行方法400,如果该右子树中的根节点为
条件连接关系指示符,则递归生成配置信息相当于执行方法500,如果该右子树中的根节点
为管道连接关系指示符,则递归生成配置信息相当于执行方法600。对于方法400而言,递归
也是类似处理,不再赘述。
元(CPU)1101,其可以根据存储在只读存储器(ROM)1102中的计算机程序指令或者从存储单
元1108加载到随机存取存储器(RAM)1103中的计算机程序指令,来执行各种适当的动作和
处理。在随机存取存储器1103中,还可存储设备1100操作所需的各种程序和数据。中央处理
单元1101、只读存储器1102以及随机存取存储器1103通过总线1104彼此相连。输入/输出
(I/O)接口1105也连接至总线1104。
磁盘、光盘等;以及通信单元1109,例如网卡、调制解调器、无线通信收发机等。通信单元
1109允许设备1100通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信
息/数据。
可读介质,例如存储单元1108。在一些实施例中,计算机程序的部分或者全部可以经由只读
存储器1102和/或通信单元1109而被载入和/或安装到设备1100上。当计算机程序被加载到
随机存取存储器1103并由中央处理单元1101执行时,可以执行上文描述的方法200‑600的
一个或多个动作。
设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的
更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存
储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式
压缩盘只读存储器(CD‑ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上
存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算
机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通
过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输
的电信号。
部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关
计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计
算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计
算机可读存储介质中。
任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如
Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机
可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独
立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机
或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包
括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利
用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令
的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可
编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方
面。
或框图中各方框的组合,都可以由计算机可读程序指令实现。
据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定
的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这
些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指
令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方
框中规定的功能/动作的各个方面的指令。
生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的
指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用
于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也
可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执
行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或
流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动
作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨
在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领
域的其它普通技术人员能理解本文披露的各实施例。