CN114866413A - 一种动态配置变量的方法及系统 - Google Patents
一种动态配置变量的方法及系统 Download PDFInfo
- Publication number
- CN114866413A CN114866413A CN202110062593.4A CN202110062593A CN114866413A CN 114866413 A CN114866413 A CN 114866413A CN 202110062593 A CN202110062593 A CN 202110062593A CN 114866413 A CN114866413 A CN 114866413A
- Authority
- CN
- China
- Prior art keywords
- variable
- memory
- size
- new
- array
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 140
- 230000015654 memory Effects 0.000 claims abstract description 302
- 230000008569 process Effects 0.000 claims abstract description 90
- 230000001133 acceleration Effects 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 12
- 238000010586 diagram Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 4
- 230000006872 improvement Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
- H04L41/0823—Configuration setting characterised by the purposes of a change of settings, e.g. optimising configuration for enhancing reliability
- H04L41/083—Configuration setting characterised by the purposes of a change of settings, e.g. optimising configuration for enhancing reliability for increasing network speed
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种动态配置变量的方法及系统,其中,应用于主进程中的方法包括:解析变量配置信息,并根据所述变量配置信息记录变量数据对应的内存信息;在接收到配置更新请求时,若所述配置更新请求引入新变量,在所述变量数据中写入与所述新变量相关的数据,并更新引入新变量后的变量数据的内存信息。本申请提供的技术方案,能够正常地使用新变量。
Description
技术领域
本发明涉及互联网技术领域,特别涉及一种动态配置变量的方法及系统。
背景技术
在CDN(Content Delivery Network,内容分发网络)中,通过代理服务器,可以为域名提供加速服务。
为了在动态加载域名的配置项时能够正常使用变量,可以建立变量哈希表,这样,通过加载的变量名,便可以获取到对应的变量值。
然而,现有的这种变量维护方式,通常只能使用内置变量或者已经完成定义的自定义变量,而无法使用新变量。在实际应用中,动态加载域名的配置项时,很可能会引入新变量,而如果这部分的新变量不能正常使用,会导致域名加速过程出现异常。
发明内容
本申请的目的在于提供一种动态配置变量的方法及系统,能够正常地使用新变量。
为实现上述目的,本申请一方面提供一种动态配置变量的方法,所述方法应用于主进程中,所述方法包括:解析变量配置信息,并根据所述变量配置信息记录变量数据对应的内存信息;在接收到配置更新请求时,若所述配置更新请求引入新变量,在所述变量数据中写入与所述新变量相关的数据,并更新引入新变量后的变量数据的内存信息。
为实现上述目的,本申请另一方面还提供一种动态配置变量的系统,所述系统包括:信息记录单元,用于解析变量配置信息,并根据所述变量配置信息记录变量数据对应的内存信息;变量更新单元,用于在接收到配置更新请求时,若所述配置更新请求引入新变量,在所述变量数据中写入与所述新变量相关的数据,并更新引入新变量后的变量数据的内存信息。
为实现上述目的,本申请另一方面还提供一种动态配置变量的方法,所述方法应用于工作进程中,所述方法包括:在接收到域名加速请求时,从共享内存中读取变量数组的实时信息,所述实时信息用于表征所述变量数组的当前内存地址和已使用内存大小;基于所述实时信息,判断是否需要进行变量同步;若需要进行变量同步,先根据所述实时信息更新已使用内存大小,再根据所述实时信息更新当前内存地址。
为实现上述目的,本申请另一方面还提供一种动态配置变量的系统,所述系统包括:实时信息读取单元,用于在接收到域名加速请求时,从共享内存中读取变量数组的实时信息,所述实时信息用于表征所述变量数组的当前内存地址和已使用内存大小;判断单元,用于基于所述实时信息,判断是否需要进行变量同步;更新单元,用于若需要进行变量同步,先根据所述实时信息更新已使用内存大小,再根据所述实时信息更新当前内存地址。
为实现上述目的,本申请另一方面还提供一种服务器,所述服务器包括存储器和处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现上述的动态配置变量的方法。
由上可见,本申请一个或者多个实施方式提供的技术方案,可以对现有的变量数据进行一定程度的改进,从而使得根据改进后的变量存储方式,新变量能够被正常使用。具体地,变量哈希表可以改进为通过申请内存的方式来存储新变量的变量信息。在实际应用中,可以记录变量哈希表中各个哈希桶的已使用内存大小和申请内存大小,这样,当引入新变量时,可以将新变量的变量信息写入对应的目标哈希桶中,同时可以更新目标哈希桶的已使用内存大小和申请内存大小。对于原先的变量数组而言,也可以通过这种申请内存的方式来存储新变量。具体地,可以在共享内存中记录变量数组的实时信息,该实时信息可以表征变量数组的当前内存地址和已使用内存大小。这样,在将新变量写入变量数组中之后,可以更新变量数组的实时信息。后续,当工作进程判定需要进行变量同步时,可以根据共享内存中的实时信息,先更新变量数组的已使用内存大小,再更新当前内存地址,从而能够正常使用引入的新变量。可见,通过对现有的变量数据的存储结构进行少量改进,便可以正常使用引入的新变量。
附图说明
为了更清楚地说明本发明实施方式中的技术方案,下面将对实施方式描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施方式中主进程执行的动态配置变量的步骤示意图;
图2是本发明实施方式中主进程执行的动态配置变量的流程示意图;
图3是本发明实施方式中工作进程执行的动态配置变量的步骤示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施方式及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施方式仅是本申请一部分实施方式,而不是全部的实施方式。基于本申请中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本申请保护的范围。
本申请提供的动态配置变量的方法,可以应用于CDN的节点服务器、负载均衡器、代理服务器等设备中。上述的节点服务器、负载均衡器以及代理服务器等设备中,通常可以部署用于实现业务的业务系统,该业务系统可以基于一定的架构来实现。例如,当前的CDN中,nginx架构由于高性能和较高的稳定性,被广泛地应用于节点服务器、负载均衡器以及代理服务器等设备中。本申请以nginx架构为例,阐述该动态配置变量的方法。
具体地,本申请提供的技术方案,只需要对nginx架构中的变量数据的结构进行少量改进。应用于nginx主进程(master进程)中的动态配置变量的方法,可以包括:解析变量配置信息,并根据所述变量配置信息记录变量数据对应的内存信息;在接收到配置更新请求时,若所述配置更新请求引入新变量,在所述变量数据中写入与所述新变量相关的数据,并更新引入新变量后的变量数据的内存信息。
具体地,请参阅图1和图2,上述的方法在实际应用时,可以包括以下多个步骤。
S11:解析变量配置信息,并记录变量哈希表中各个哈希桶的已使用内存大小和各个所述哈希桶的申请内存大小,以及在所述共享内存中记录变量数组的实时信息,所述实时信息用于表征所述变量数组的当前内存地址和已使用内存大小。
在本实施方式中,主进程可以创建共享内存,并通过共享内存来存储nginx中的变量数据。在nginx中,变量数据通常可以包括以下几种:
1)变量数组(variables)
Variables是一个ngx_array_t数组结构,在该数组结构中可以写入各个变量。在现有的nginx中,variables是支持增量插入的,也就是说,当引入新变量时,新变量可以正常写入变量数组中。具体地,变量数组可以预先申请一定的内存空间,然后在该内存空间中按序写入各个变量。在引入新变量时,若当前的内存空间不够写入该新变量,变量数组可以重新申请新的内存空间。通常而言,新的内存空间的大小可以是当前的内存空间大小的两倍。在申请了新的内存空间后,可以将当前的内存空间中写入的变量复制到新的内存空间中,然后再继续在新的内存空间中写入新变量。在申请新的内存空间后,ngx_array_t数组结构的当前内存地址也修改为了新的内存空间的地址,ngx_array_t数组结构的已使用内存大小也对应修改为了新的内存空间中已使用的内存大小。
在实际应用中,变量复制到新的内存空间后,旧的内存空间并没有释放,所以在出现新变量之后,通过旧的内存空间访问旧的数据是不会有问题的。这样每次申请新的内存空间时,整个过程其实是不影响前面旧数据的使用,所以当一个进程向新申请的内存空间中写入新变量时,其它进程依然可以从旧的内存空间中正常读取旧的变量,这个过程是无需上读写锁的。
2)变量哈希表(variables_hash)
变量哈希表中可以通过变量名称,存储对应的变量信息,这样,通过变量名称便可以在变量哈希表中查找得到对应的变量信息。变量哈希表是一个静态的哈希表,在本申请中,可以在数据结构不变的情况下,改造成支持数据插入的哈希表。具体地,变量哈希表可以将同一个哈希桶中的数据存储在同一个连续的内存结构中,由于内存是连续的,所以可以参照ngx_array_t的数据存储方式,通过预留内存空间以及申请新的内存空间的方式,记录哈希桶中的变量信息。例如,对于变量哈希表中的每个哈希桶而言,可以预先创建对应的内存空间,然后将哈希桶中的变量信息写入内存空间中。当哈希桶中出现新变量时,如果现有的内存空间不足以写入新变量的变量信息,可以针对该哈希桶重新申请新的内存空间,该新的内存空间的大小也可以是原先的内存空间大小的两倍。然后,可以将原先的内存空间中的变量信息复制到该新的内存空间中,并在新的内存空间中继续写入新变量的变量信息。这样也能够做到新增变量信息的过程可以不用上读写锁。
此外,为了适应这一改进,可以记录变量哈希表中各个哈希桶的已使用内存大小和各个哈希桶的申请内存大小,这样,当重新申请新的内存空间时,在新的内存空间中写入变量信息后,可以对已使用内存大小和申请内存大小进行更新。
3)前缀变量(pre_variables)
前缀变量是nginx中变量数组的一种形式,前缀变量可以支持前缀一样的变量使用相同的方法获取对应的变量值。在本申请中,前缀变量的处理方式可以与变量数组的处理方式保持一致,因此可以将前缀变量也归纳进变量数组中,在本申请中可以统称为变量数组。
4)变量哈希数组(variables_keys hash)
变量哈希数组是用来存储所有非前缀内置变量信息的数据结构,该数据结构本身就支持增量更新数据。并且变量哈希数组的结果只在更新变量过程中使用,获取变量值的过程是不需要用该数据结构,所以更新过程也无需上锁。
由上可见,nginx中的变量数据,在经过本申请方案的少量改造,都可以做到更新过程中无需上读写锁,这样在变量数据的更新过程中,能够具备较高的读写效率。
在本实施方式中,主进程在解析变量配置信息时,可以初始化上述的各个变量数据的数据结构。其中,在初始化变量哈希数组和变量哈希表的数据结构时,可以利用创建的共享内存替换原本的进程堆内存,并且可以将变量数组的内存池指针设置为指向共享内存的内存池。具体地,可以将共享内存的内存池的地址赋值给变量数组的内存池指针,在赋值之后,变量数组往后再申请的内存就是共享内存了。这样便可以利用共享内存来存储各个数据结构的变量数据,共享内存中的部分数据可以被工作进程(worker进程)访问,从而能够实现多进程之间的数据同步。
在本申请中,每个进程都可以具备自身的进程堆内存,通常而言,进程堆内存中的数据无法进行跨进程访问。例如,工作进程A和工作进程B可以分别具备堆内存A和堆内存B,那么工作进程A可以对堆内存A中的数据进行读写操作,同理,工作进程B可以对堆内存B中的数据进行读写操作,但工作进程A无法对堆内存B中的数据进行读写操作,以及工作进程B也无法对堆内存A中的数据进行读写操作。而共享内存中的数据,可供不同的进程进行访问。例如,存储于共享内存中的数据,可以被不同的工作进程访问,也可以被工作进程和主进程访问。
在本实施方式中,主进程可以记录记录变量哈希表中各个哈希桶的已使用内存大小和各个所述哈希桶的申请内存大小,并且可以在共享内存中记录变量数组的实时信息,该实时信息可以表征变量数组的当前内存地址和已使用内存大小。在实际应用中,初始化时哈希桶中的变量信息以及变量数组中的变量通常是存储在进程堆内存中的,在将内存池替换为共享内存之后,为了在共享内存中申请新的内存空间,可以将哈希桶的申请内存大小的初始值设置为与该哈希桶的已使用内存大小相等,并且将变量数组的申请内存大小的初始值设置为与该变量数组的已使用内存大小相等。这样处理的目的在于,当出现新引入的变量时,无论是哈希桶还是变量数组,当前申请的内存空间都不足以写入新变量的数据,因此哈希桶和变量数据数组都需要重新去共享内存中申请新的内存空间,这样便可以将数据从进程堆内存中转移至共享内存中,从而实现数据在多进程之间共享。
S13:在接收到配置更新请求时,若所述配置更新请求引入新变量,将所述新变量写入所述变量数组中,并更新所述实时信息,以及将所述新变量的变量信息写入所述变量哈希表对应的目标哈希桶中,并更新所述目标哈希桶的已使用内存大小和申请内存大小。
在本实施方式中,主进程可以创建工作进程,并通过工作进程来处理域名加速请求。在处理域名加速请求的过程中,当有域名需要动态更新配置时,主进程会接收到对应的配置更新请求,通过解析该配置更新请求,主进程可以判断是否引入了新变量。如果引入了新变量,那么可以分别在变量数组和变量哈希表中写入新变量对应的数据。
具体地,如果变量数组和哈希桶当前申请的内存空间能够写入新变量的数据,那么可以直接将新变量写入变量数组中,并将新变量的变量信息写入哈希桶中。在写入数据之后,可以更新变量数组的实时信息(其中当前内存地址可以保持不变,只更新已使用内存大小),并可以更新哈希桶的已使用内存大小。
而如果目标哈希桶的申请内存大小不足以写入新变量的变量信息,那么可以按照前述的方式,在共享内存中重新申请新内存,该新内存的大小大于原本的申请内存大小,然后,可以将目标哈希桶中原有的变量信息复制到新内存中,并在新内存中继续写入新变量的变量信息。在目标哈希桶中写入变量信息后,可以将目标哈希桶的已使用内存大小修改为新内存中已使用的内存大小,并将目标哈希桶的申请内存大小修改为新内存的大小。
同理,若变量数组的申请内存大小不足以写入新变量,可以在共享内存中重新申请新内存,该新内存的大小也大于变量数组的申请内存大小。然后可以将变量数组中原有的变量复制到新内存中,并在新内存中继续写入新变量。在变量数组中写入新变量后,可以将变量数组的当前内存地址修改为新内存的地址,并将变量数组的已使用内存大小修改为所述新内存中已使用的内存大小。在实际应用中,为了避免数据读取出现异常,可以先更新当前内存地址,再更新已使用内存大小。这样处理的目的在于,假设变量数组原先的内存地址是A1,已使用内存大小为B,新的内存地址为A2,已使用内存大小为C,如下所示:
更新前:A1 B
更新后:A2 C
由于是引入了新变量,那么C必然会大于B。此时,按照上述方式,可以先更新内存地址,假设已使用内存大小没来得及更新,会出现以下的状态:
中间状态:A2 B
在该中间状态下,由于A2地址下的内存空间会大于A1地址下的内存空间,因此在A2下访问B的数据,不会出现异常。
但是,如果先更新已使用内存大小,就会出现以下的状态:
中间状态:A1 C
在该中间状态下,A1地址下的内存空间是不足以容纳C的数据的,因此在A1的地址下访问C的数据就会出现异常。这就是先更新当前内存地址,再更新已使用内存大小的原因。
在本实施方式中,当主进程完成了新变量数据的更新后,由于在工作进程中,变量数组的当前内存地址和已使用内存大小还是存放于进程堆内存中,因此工作进程使用的实际上还是旧的内存地址和旧的内存大小。后续,工作进程可以通过在共享内存中读取实时信息,从而与主进程的数据保持同步。
具体地,请参阅图3,本申请应用于工作进程中的nginx中动态配置变量的方法,可以包括以下多个步骤。
S21:在接收到域名加速请求时,从共享内存中读取变量数组的实时信息,所述实时信息用于表征所述变量数组的当前内存地址和已使用内存大小。
S23:基于所述实时信息,判断是否需要进行变量同步。
S25:若需要进行变量同步,先根据所述实时信息更新已使用内存大小,再根据所述实时信息更新当前内存地址。
在本实施方式中,工作进程在接收到域名加速请求时,为了确保能够正常使用域名加速请求中引入的新变量,可以先主动与主进程进行数据同步。具体地,主进程在共享内存中会保持变量数组的实时信息的更新,因此工作进程可以从共享内存中读取当前的实时信息,然后可以对比实时信息中的第一已使用内存大小与工作进程的进程堆内存中记录的第二已使用内存大小,若第一已使用内存大小大于第二已使用内存大小,则表示主进程完成了新变量的更新过程,此时工作进程判定需要进行变量同步。而如果第一已使用内存大小与第二已使用内存大小相等,则表示当前没有引入新变量,那么工作进程可以判定不需要进行变量同步。
在本实施方式中,当需要进行变量同步时,工作进程需要按照与主进程相反的更新顺序,先更新已使用内存大小,再更新当前内存地址。这样处理的目的也是为了避免数据读取出错。举例来说,假设主进程更新两次变量数据:
master解析完后的初始化 大小10 地址p1
master解析到第11个变量时,更新1 大小20 地址p2
master解析到第21个变量时,更新2 大小40 地址p3
其中,大小可以只已使用内存大小,地址则表示当前内存地址。
假设工作进程的进程堆内存中原始的数据是:
worker初始值 大小10 地址p1
如果工作进程先更新地址,再更新大小,那么可能会出现以下的中间状态:
worker更新 大小40 地址p2
这是由于在worker更新地址p2后,master进行了第二次大小的更新(大小更新为40),那么当worker更新完地址再更新大小时,会将大小直接更新为40(而不是20),显然,地址P2下不足以容纳大小为40的数据,此时工作进程访问变量数据就会出错。
而如果worker进程按照上述的方式,先更新大小,再更新地址,那么可能出现以下的中间状态:
worker更新大小20地址p3
这是因为worker将大小从10更新为20之后,master进行了第二次更新(地址从p2更新为p3),那么worker在更新完大小后,会直接将地址从p1更新为p3,但由于p3下的内存空间较大,完全能够容纳大小20的变量数据,因此根据这种中间状态进行数据读取不会出现问题。当工作进程在下一次进行更新时,便会将大小也更新为40,从而得到正确的大小和地址。这就是在工作进程中,需要先更新已使用内存大小,再更新当前内存地址的原因。
与上述方法对应,本申请一个实施方式还提供一种动态配置变量的系统,所述系统包括:
信息记录单元,用于解析变量配置信息,并根据所述变量配置信息记录变量数据对应的内存信息;
变量更新单元,用于在接收到配置更新请求时,若所述配置更新请求引入新变量,在所述变量数据中写入与所述新变量相关的数据,并更新引入新变量后的变量数据的内存信息。
同理,本申请另一个实施方式还提供一种动态配置变量的系统,所述系统包括:
实时信息读取单元,用于在接收到域名加速请求时,从共享内存中读取变量数组的实时信息,所述实时信息用于表征所述变量数组的当前内存地址和已使用内存大小;
判断单元,用于基于所述实时信息,判断是否需要进行变量同步;
更新单元,用于若需要进行变量同步,先根据所述实时信息更新已使用内存大小,再根据所述实时信息更新当前内存地址。
本申请还提供一种服务器,所述服务器包括存储器和处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现上述的动态配置变量的方法。
上述的服务器可以是部署有nginx系统的服务器,该服务器可以是CDN节点服务器,也可以是CDN中的负载均衡服务器,还可以是CDN中的代理服务器等。
由上可见,本申请一个或者多个实施方式提供的技术方案,可以对现有的变量数据进行一定程度的改进,从而使得根据改进后的变量存储方式,新变量能够被正常使用。具体地,变量哈希表可以改进为通过申请内存的方式来存储新变量的变量信息。在实际应用中,可以记录变量哈希表中各个哈希桶的已使用内存大小和申请内存大小,这样,当引入新变量时,可以将新变量的变量信息写入对应的目标哈希桶中,同时可以更新目标哈希桶的已使用内存大小和申请内存大小。对于原先的变量数组而言,也可以通过这种申请内存的方式来存储新变量。具体地,可以在共享内存中记录变量数组的实时信息,该实时信息可以表征变量数组的当前内存地址和已使用内存大小。这样,在将新变量写入变量数组中之后,可以更新变量数组的实时信息。后续,当工作进程判定需要进行变量同步时,可以根据共享内存中的实时信息,先更新变量数组的已使用内存大小,再更新当前内存地址,从而能够正常使用引入的新变量。可见,通过对现有的变量数据的存储结构进行少量改进,便可以正常使用引入的新变量。
此外,在现有技术中,变量哈希表中的变量信息是全局数据,引入的新变量的变量数据无法加入到变量哈希表中,所以无法根据变量名称查找到对应的变量信息。而在本申请中,扩展了变量哈希表的数据结构,并通过共享内存进行进程间数据同步,这样直接把全局数据转换为各进程可动态更新、动态使用的数据,从而实现了新变量的动态配置。
本说明书中的各个实施方式均采用递进的方式描述,各个实施方式之间相同相似的部分互相参见即可,每个实施方式重点说明的都是与其他实施方式的不同之处。尤其,针对系统的实施方式来说,均可以参照前述方法的实施方式的介绍对照解释。
本领域内的技术人员应明白,本发明的实施方式可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施方式、完全软件实施方式、或结合软件和硬件方面的实施方式的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施方式的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施方式而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (15)
1.一种动态配置变量的方法,其特征在于,所述方法应用于主进程中,所述方法包括:
解析变量配置信息,并根据所述变量配置信息记录变量数据对应的内存信息;
在接收到配置更新请求时,若所述配置更新请求引入新变量,在所述变量数据中写入与所述新变量相关的数据,并更新引入新变量后的变量数据的内存信息。
2.根据权利要求1所述的方法,其特征在于,所述主进程创建共享内存的内存池,所述变量数据至少包括变量哈希表和变量数组;记录变量数据对应的内存信息包括:
记录变量哈希表中各个哈希桶的已使用内存大小和各个所述哈希桶的申请内存大小,以及在所述共享内存中记录变量数组的实时信息,所述实时信息用于表征所述变量数组的当前内存地址和已使用内存大小。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在初始化变量哈希数组和变量哈希表的数据结构时,利用所述共享内存替换原本的进程堆内存;
将所述变量数组的内存池指针设置为指向所述共享内存的内存池。
4.根据权利要求2所述的方法,其特征在于,在记录变量哈希表中各个哈希桶的已使用内存大小和各个所述哈希桶的申请内存大小之后,所述方法还包括:
将所述哈希桶的申请内存大小的初始值设置为与所述哈希桶的已使用内存大小相等。
5.根据权利要求2所述的方法,其特征在于,在所述变量数据中写入与所述新变量相关的数据,并更新引入新变量后的变量数据的内存信息包括:
将所述新变量写入所述变量数组中,并更新所述实时信息,以及将所述新变量的变量信息写入所述变量哈希表对应的目标哈希桶中,并更新所述目标哈希桶的已使用内存大小和申请内存大小。
6.根据权利要求5所述的方法,其特征在于,将所述新变量的变量信息写入所述变量哈希表对应的目标哈希桶中包括:
若所述目标哈希桶的申请内存大小不足以写入所述新变量的变量信息,在所述共享内存中重新申请新内存,所述新内存的大小大于所述申请内存大小;
将所述目标哈希桶中原有的变量信息复制到所述新内存中,并在所述新内存中继续写入所述新变量的变量信息。
7.根据权利要求6所述的方法,其特征在于,更新所述目标哈希桶的已使用内存大小和申请内存大小包括:
将所述目标哈希桶的已使用内存大小修改为所述新内存中已使用的内存大小,并将所述目标哈希桶的申请内存大小修改为所述新内存的大小。
8.根据权利要求5所述的方法,其特征在于,将所述新变量写入所述变量数组中包括:
若所述变量数组的申请内存大小不足以写入所述新变量,在所述共享内存中重新申请新内存,所述新内存的大小大于所述变量数组的申请内存大小;
将所述变量数组中原有的变量复制到所述新内存中,并在所述新内存中继续写入所述新变量。
9.根据权利要求8所述的方法,其特征在于,更新所述实时信息包括:
将所述变量数组的当前内存地址修改为所述新内存的地址,并将所述变量数组的已使用内存大小修改为所述新内存中已使用的内存大小;其中,先更新当前内存地址,再更新已使用内存大小。
10.根据权利要求2所述的方法,其特征在于,在所述共享内存中记录变量数组的实时信息之后,所述方法还包括:
将所述变量数组的申请内存大小的初始值设置为与所述变量数组的已使用内存大小相等。
11.一种动态配置变量的系统,其特征在于,所述系统包括:
信息记录单元,用于解析变量配置信息,并根据所述变量配置信息记录变量数据对应的内存信息;
变量更新单元,用于在接收到配置更新请求时,若所述配置更新请求引入新变量,在所述变量数据中写入与所述新变量相关的数据,并更新引入新变量后的变量数据的内存信息。
12.一种动态配置变量的方法,其特征在于,所述方法应用于工作进程中,所述方法包括:
在接收到域名加速请求时,从共享内存中读取变量数组的实时信息,所述实时信息用于表征所述变量数组的当前内存地址和已使用内存大小;
基于所述实时信息,判断是否需要进行变量同步;
若需要进行变量同步,先根据所述实时信息更新已使用内存大小,再根据所述实时信息更新当前内存地址。
13.根据权利要求12所述的方法,其特征在于,判断是否需要进行变量同步包括:
对比所述实时信息中的第一已使用内存大小与所述工作进程的进程堆内存中记录的第二已使用内存大小,若所述第一已使用内存大小大于所述第二已使用内存大小,判定需要进行变量同步;若所述第一已使用内存大小与所述第二已使用内存大小相等,判定不需要进行变量同步。
14.一种动态配置变量的系统,其特征在于,所述系统包括:
实时信息读取单元,用于在接收到域名加速请求时,从共享内存中读取变量数组的实时信息,所述实时信息用于表征所述变量数组的当前内存地址和已使用内存大小;
判断单元,用于基于所述实时信息,判断是否需要进行变量同步;
更新单元,用于若需要进行变量同步,先根据所述实时信息更新已使用内存大小,再根据所述实时信息更新当前内存地址。
15.一种服务器,其特征在于,所述服务器包括存储器和处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现如权利要求1至10及12至13中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110062593.4A CN114866413B (zh) | 2021-01-18 | 2021-01-18 | 一种动态配置变量的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110062593.4A CN114866413B (zh) | 2021-01-18 | 2021-01-18 | 一种动态配置变量的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114866413A true CN114866413A (zh) | 2022-08-05 |
CN114866413B CN114866413B (zh) | 2024-09-24 |
Family
ID=82623291
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110062593.4A Active CN114866413B (zh) | 2021-01-18 | 2021-01-18 | 一种动态配置变量的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114866413B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102446102A (zh) * | 2010-10-07 | 2012-05-09 | 鸿富锦精密工业(深圳)有限公司 | Acpi表远程更新系统及方法 |
CN107844385A (zh) * | 2017-11-08 | 2018-03-27 | 北京潘达互娱科技有限公司 | 一种基于共享内存的变量读写方法及装置 |
CN109656926A (zh) * | 2018-12-24 | 2019-04-19 | 杰信软件科技(苏州)有限公司 | 数据库的管理方法 |
US20190332529A1 (en) * | 2018-04-30 | 2019-10-31 | Hewlett Packard Enterprise Development Lp | Atomic operations for fabric shared memories |
CN110968356A (zh) * | 2018-09-29 | 2020-04-07 | 北京金山云网络技术有限公司 | 配置信息获取的方法和装置 |
CN111045721A (zh) * | 2019-10-29 | 2020-04-21 | 平安科技(深圳)有限公司 | 动态修改Nginx配置参数的方法、装置及存储介质 |
CN111782628A (zh) * | 2020-06-11 | 2020-10-16 | 国电南京自动化股份有限公司 | 电力系统实时库动态扩充增量的方法、配置工具和系统 |
CN111984289A (zh) * | 2020-07-31 | 2020-11-24 | 广州市百果园信息技术有限公司 | 一种服务更新方法、装置、设备及存储介质 |
CN112114849A (zh) * | 2020-09-23 | 2020-12-22 | 腾讯科技(深圳)有限公司 | 一种资源更新方法和装置 |
-
2021
- 2021-01-18 CN CN202110062593.4A patent/CN114866413B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102446102A (zh) * | 2010-10-07 | 2012-05-09 | 鸿富锦精密工业(深圳)有限公司 | Acpi表远程更新系统及方法 |
CN107844385A (zh) * | 2017-11-08 | 2018-03-27 | 北京潘达互娱科技有限公司 | 一种基于共享内存的变量读写方法及装置 |
US20190332529A1 (en) * | 2018-04-30 | 2019-10-31 | Hewlett Packard Enterprise Development Lp | Atomic operations for fabric shared memories |
CN110968356A (zh) * | 2018-09-29 | 2020-04-07 | 北京金山云网络技术有限公司 | 配置信息获取的方法和装置 |
CN109656926A (zh) * | 2018-12-24 | 2019-04-19 | 杰信软件科技(苏州)有限公司 | 数据库的管理方法 |
CN111045721A (zh) * | 2019-10-29 | 2020-04-21 | 平安科技(深圳)有限公司 | 动态修改Nginx配置参数的方法、装置及存储介质 |
CN111782628A (zh) * | 2020-06-11 | 2020-10-16 | 国电南京自动化股份有限公司 | 电力系统实时库动态扩充增量的方法、配置工具和系统 |
CN111984289A (zh) * | 2020-07-31 | 2020-11-24 | 广州市百果园信息技术有限公司 | 一种服务更新方法、装置、设备及存储介质 |
CN112114849A (zh) * | 2020-09-23 | 2020-12-22 | 腾讯科技(深圳)有限公司 | 一种资源更新方法和装置 |
Non-Patent Citations (1)
Title |
---|
富士康质检员张全蛋: ""Nginx 内存与共享内存的管理与分配"", 《CSDN, 网址:HTTP://T.CSDNIMG.CN/IFYOK》, 22 July 2020 (2020-07-22) * |
Also Published As
Publication number | Publication date |
---|---|
CN114866413B (zh) | 2024-09-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6785789B1 (en) | Method and apparatus for creating a virtual data copy | |
JP4107630B2 (ja) | バーチャル・データ処理エンティティの提供方法、システムおよび記憶媒体 | |
CN108616599B (zh) | 应用服务注册、更新的方法及装置 | |
CN111124288B (zh) | 一种vpd存储管理方法、装置、设备及可读存储介质 | |
US6745386B1 (en) | System and method for preloading classes in a data processing device that does not have a virtual memory manager | |
CN107016016B (zh) | 一种数据处理的方法及装置 | |
CN111880956A (zh) | 一种数据同步方法和装置 | |
CN108572888B (zh) | 磁盘快照创建方法和磁盘快照创建装置 | |
CN111158858B (zh) | 一种虚拟机的克隆方法和装置,及计算机可读存储介质 | |
CN116049207A (zh) | 应用程序sql脚本处理方法、装置、处理器及电子设备 | |
CN110989931A (zh) | 存储设备坏块处理方法、装置、设备及存储介质 | |
CN111694580B (zh) | 存储设备升级及初始化的方法、装置、电子设备 | |
CN114866413B (zh) | 一种动态配置变量的方法及系统 | |
CN113867776B (zh) | 中台应用的发布方法、装置、电子设备和存储介质 | |
CN110989933A (zh) | 一种消息队列RocketMq平滑迁移方法 | |
US7234039B1 (en) | Method, system, and apparatus for determining the physical memory address of an allocated and locked memory buffer | |
CN113157392B (zh) | 镜像仓库高可用方法及设备 | |
CN114661519A (zh) | 数据备份方法及装置 | |
US20040044708A1 (en) | Executable file system for an embedded computer | |
CN111813603A (zh) | 一种精简卷元数据备份方法、装置、设备及可读存储介质 | |
CN112527323A (zh) | 一种安装Ambari的方法、装置和Ambari架构 | |
CN106897588B (zh) | 一种标签函数的处理方法及装置 | |
CN110874273A (zh) | 一种数据处理方法及装置 | |
CN113791805B (zh) | 微服务灰度发布方法及装置 | |
CN114546721B (zh) | 集群中应用程序的备份方法、系统及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |