CN117149263A - 一种对开源框架扩展配置中心持久化方法及服务器 - Google Patents

一种对开源框架扩展配置中心持久化方法及服务器 Download PDF

Info

Publication number
CN117149263A
CN117149263A CN202311208706.2A CN202311208706A CN117149263A CN 117149263 A CN117149263 A CN 117149263A CN 202311208706 A CN202311208706 A CN 202311208706A CN 117149263 A CN117149263 A CN 117149263A
Authority
CN
China
Prior art keywords
server
data source
class
initialization
exclusive lock
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.)
Pending
Application number
CN202311208706.2A
Other languages
English (en)
Inventor
秦庆庆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Design Digital Technology Co ltd
Original Assignee
China Design Digital Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Design Digital Technology Co ltd filed Critical China Design Digital Technology Co ltd
Priority to CN202311208706.2A priority Critical patent/CN117149263A/zh
Publication of CN117149263A publication Critical patent/CN117149263A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种对开源框架扩展配置中心持久化方法及服务器,在该方法中,服务器根据第一类生成与第一类相关的第一对象;服务器利用转换方法将第一对象转换成当前实例;服务器根据当前实例创建第二对象;服务器对第二对象相关的第二类使用第一初始化方法得到初始化数据源;服务器将初始化数据源注册到全部规则数据源中得到写入数据源;服务器将写入数据源写入到配置信息中;服务器从配置中心读取配置信息,在符合开闭原则的条件下,实现了与配置中心通讯的持久化。

Description

一种对开源框架扩展配置中心持久化方法及服务器
技术领域
本申请框架扩展持久化领域,尤其涉及一种对开源框架扩展配置中心持久化方法及服务器。
背景技术
开源框架是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
现有技术中,是对开源框架的源码做出改造,使其和配置中心进行通讯。
然而,现有技术违背了设计模式中六大原则之一开闭原则,开闭原则即设计的软件实体应该能够在不修改原有代码的情况下进行扩展。也就是说,当需求发生变化时,应该通过添加新的代码来实现新的功能,而不是修改已有的代码。
发明内容
本申请提供了一种对开源框架扩展配置中心持久化方法及服务器,用于在符合开闭原则的条件下,实现与配置中心通讯的持久化。
第一方面,本申请提供了一种对开源框架扩展配置中心持久化方法,服务器根据第一类生成与该第一类相关的第一对象;该服务器利用转换方法将该第一对象转换成当前实例,该转换方法由该服务器通过开源框架的接口调用得到;该服务器根据该当前实例创建第二对象;该服务器对该第二对象相关的第二类使用第一初始化方法得到初始化数据源;该服务器将该初始化数据源注册到全部规则数据源中得到写入数据源;该服务器将该写入数据源写入到配置信息中;该服务器从配置中心读取该配置信息。
通过采用上述技术方案,服务器根据第一类生成与第一类相关的第一对象,利用转换方法将第一对象转换成当前实例,根据当前实例创建第二对象,对第二对象相关的第二类使用第一初始化方法得到初始化数据源,将初始化数据源注册到全部规则数据源中得到写入数据源,将写入数据源写入到配置信息中,从配置中心读取配置信息,在符合开闭原则的条件下,实现了与配置中心通讯的持久化。
结合第一方面的一些实施例,在一些实施例中,服务器对该第二对象相关的第二类进行初始化得到初始化数据源之前,该方法还包括:该服务器搜索该开源框架的扩展点及关于该扩展点的全部第三类;该服务器创建该第二对象相关的第二类;该服务器利用该第二类实现该第三类的接口;该服务器利用第三类的接口从该第二类中确定第一初始化方法。
通过采用上述技术方案,服务器搜索开源框架的扩展点及关于扩展点的全部第三类,创建第二对象相关的第二类,利用第二类实现第三类的接口,最后利用第三类的接口从第二类中确定第一初始化方法,提高了得到初始化数据源的效率。
结合第一方面的一些实施例,在一些实施例中,服务器将该初始化数据源注册到全部规则数据源中得到写入数据源之前,该方法还包括:该服务器创建独占锁类;该服务器根据该独占锁类生成与该独占锁类相关的独占锁对象;该服务器判断是否获取到该独占锁对象;若该服务器获取到该独占锁对象,则执行该服务器将该初始化数据源注册到全部规则数据源中得到写入数据源步骤;若该服务器没有获取到该独占锁对象,则执行该服务器判断是否获取到该独占锁对象步骤。
通过采用上述技术方案,在初始化操作之前加入独占锁对象,当服务器获取到独占锁对象之后才开始进行初始化操作,有效防止了并发问题的产生。
结合第一方面的一些实施例,在一些实施例中,该服务器没有获取到该独占锁对象,则执行该服务器判断是否获取到该独占锁对象步骤之后,该方法还包括:该服务器确定第一初始化数据源注册到规则数据源的注册时间超过阈值;该服务器将第一初始化数据源的注册顺序延后。
通过采用上述技术方案,在确定第一初始化数据源注册到规则数据源的注册时间超过阈值的情况下,服务器将第一初始化数据源的注册顺序延后,减少注册时间,提高了注册的效率。
结合第一方面的一些实施例,在一些实施例中,服务器将该初始化数据源注册到全部规则数据源中得到写入数据源,具体包括:该服务器驱根据若干该初始化数据源在预设优先级表中的栏目确定若干该初始化数据源的优先级;该服务器根据该初始化数据源的优先级进行从大到小的排序,得到排序结果;该服务器根据该排序结果依次执行该服务器将该初始化数据源注册到全部规则数据源中得到写入数据源步骤。
通过采用上述技术方案,服务器在进行初始化数据源注册到全部规则数据源中步骤之前,先根据若干该初始化数据源在预设优先级表中的栏目确定若干该初始化数据源的优先级,再根据该初始化数据源的优先级进行从大到小的排序,得到排序结果;最后服务器根据该排序结果依次执行该服务器将该初始化数据源注册到全部规则数据源中得到写入数据源步骤,先将优先级高的初始化数据源优先注册,并且按照优先级顺序进行注册,提高了注册的效率。
结合第一方面的一些实施例,在一些实施例中,服务器根据该独占锁类生成与该独占锁类相关的独占锁对象之后,该方法还包括:该服务确定该独占锁对象中的大锁,该大锁为该独占锁对象中粒度大于预设粒度的独占锁对象,该粒度为该独占锁对象在工作时获取资源的大小或范围;该服务器对该大锁中能够拆分的第一大锁进行拆分。
通过采用上述技术方案,服务确定该独占锁对象中的大锁,然后服务器对该大锁中能够拆分的第一大锁进行拆分,在注册过程中使用粒度较小的独占锁,避免注册步骤发生拥堵,提高了注册的效率。
结合第一方面的一些实施例,在一些实施例中,服务器将该初始化数据源注册到全部规则数据源中得到写入数据源,具体包括:该服务器创建数据源注册器,该数据源注册器中有包含全部该规则数据源的列表;该服务器定义一个包含注册方法的规则数据源接口;该服务器使用该注册方法将该初始化数据源添加到该列表中的全部该规则数据源,得到该写入数据源。
通过采用上述技术方案,服务器创建数据源注册器,利用注册方法将初始化数据源添加到数据源注册器包含的列表中的全部规则数据源,提高了开源框架的可拓展性。
结合第一方面的一些实施例,在一些实施例中,服务器利用转换方法将该第一对象转换成当前实例,具体包括:该服务器通过开源框架的接口调用转换方法;该服务器利用该转换方法将该第一对象转换成当前实例。
通过采用上述技术方案,服务器通过开源框架的接口调用转换方法,为服务器将第一对象转换成当前实例提供了转换方法,提高了将第一对象转换为当前实例的效率。
结合第一方面的一些实施例,在一些实施例中,服务器根据该当前实例创建第二对象之前,该方法还包括:该服务器调用读取方法来读取该当前实例。
通过采用上述技术方案,服务器采用读取方法来读取当前实例,提高了服务器读取当前实例的效率。
第二方面,本申请实施例提供了一种对开源框架扩展配置中心持久化服务器,该服务器包括:生成模块,用于服务器根据第一类生成与该第一类相关的第一对象;
转换模块,用于该服务器利用转换方法将该第一对象转换成当前实例,该转换方法由该服务器通过开源框架的接口调用得到;
创建模块,用于该服务器根据该当前实例创建第二对象;
初始化模块,用于该服务器对该第二对象相关的第二类使用第一初始化方法得到初始化数据源;
注册模块,用于该服务器将该初始化数据源注册到全部规则数据源中得到写入数据源;
写入模块,用于该服务器将该写入数据源写入到配置信息中;
读取模块,用于该服务器从配置中心读取该配置信息。
本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
1、本申请提供了一种对开源框架扩展配置中心持久化方法,服务器根据第一类生成与第一类相关的第一对象,利用转换方法将第一对象转换成当前实例,根据当前实例创建第二对象,对第二对象相关的第二类使用第一初始化方法得到初始化数据源,将初始化数据源注册到全部规则数据源中得到写入数据源,将写入数据源写入到配置信息中,从配置中心读取配置信息,在符合开闭原则的条件下,实现了与配置中心通讯的持久化。
2、本申请提供了一种对开源框架扩展配置中心持久化方法,服务器搜索开源框架的扩展点及关于扩展点的全部第三类,创建第二对象相关的第二类,利用第二类实现第三类的接口,最后利用第三类的接口从第二类中确定第一初始化方法,提高了得到初始化数据源的效率。
3、本申请提供了一种对开源框架扩展配置中心持久化方法,在初始化操作之前加入独占锁对象,当服务器获取到独占锁对象之后才开始进行初始化操作,有效防止了并发问题的产生。
附图说明
图1是本申请实施例中一种对开源框架扩展配置中心持久化方法的一个流程示意图。
图2是本申请实施例中一种对开源框架扩展配置中心持久化方法的另一个流程示意图。
图3是本申请实施例中一种对开源框架扩展配置中心持久化方法的又一个流程示意图。
具体实施方式
本申请以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本申请的限制。如在本申请的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括复数表达形式,除非其上下文中明确地有相反指示。还应当理解,本申请中使用的术语“和/或”是指包含一个或多个所列出项目的任何或所有可能组合。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为暗示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征,在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
下面先对本申请涉及的一些名词进行解释说明:
开源框架,是指一种软件开发框架,其源代码是公开可用的,并且可以被任何人自由地查看、使用、修改和分发。开源框架通常由一个社区或组织维护和支持,旨在提供一套共享的工具、库和组件,以便开发人员可以更高效地构建软件应用程序。在下面实施例中的开源框架为Sentinel,中文名译为哨兵。
配置中心,是一个开源的分布式配置管理平台,用于帮助开发人员集中管理和动态配置应用程序的配置信息。它提供了一个集中化的存储库,用于存储和管理应用程序的配置文件,包括数据库连接信息、服务端口号、日志级别等等。在下面实施例中的配置中心为Nacos,中文名译为注册中心和配置中心。
类,是面向对象编程中的一个概念,它是对具有相似特征和行为的一组对象的抽象和模板。类可以看作是对象的蓝图或模板,用来定义对象的属性和方法。类由属性和方法组成。属性定义了对象的特征和状态,方法定义了对象的行为和功能。通过类可以创建多个对象,每个对象都具有相同的属性和方法,但具体的属性值可能不同。类的作用是将具有相似特征和行为的对象进行分类和抽象,通过定义类可以实现代码的重用和模块化、提高代码的可读性和可维护性。类的继承机制还可以实现代码的扩展和灵活性。在面向对象编程中,类是构建程序的基本单元,通过定义类可以创建对象并进行操作和处理。
对象,是面向对象编程中的一个概念,它是类的实例化。对象是具体的实体,它具有类定义的属性和方法,并且可以通过调用方法来实现特定的行为和功能。对象由类创建,每个对象都是类的一个实例。同一个类可以创建多个对象,每个对象都独立存在,拥有自己的属性值。对象可以存储数据、执行操作和与其他对象进行交互。对象的属性是描述对象特征和状态的变量,可以是数字、字符串、布尔值等任何数据类型。对象的方法是定义在类中的函数,用于实现对象的行为和功能。通过创建对象,可以方便地访问和操作类中定义的属性和方法。对象可以根据需要修改属性的值,调用方法来实现自己的特定功能。对象还可以和其他对象进行交互,通过调用其他对象的方法来实现协作和共同完成任务。对象是面向对象编程的基本概念之一,它提供了一种组织和管理代码的方式,可以将数据和行为封装在一起,实现代码的重用和模块化。通过对象,程序可以更加灵活、可维护和可扩展。
实例,是面向对象编程中的一个概念,它是类的具体实体化。在面向对象编程中,通过类来定义对象的属性和方法,而实例则是根据类创建的具体对象。实例是类的一个具体实例,它具有该类定义的属性和方法。每个实例都独立存在,拥有自己的属性值,可以通过调用方法来实现特定的行为和功能。通过创建实例,可以方便地访问和操作类中定义的属性和方法。每个实例可以根据需要修改属性的值,调用方法来实现自己的特定功能。不同的实例之间是相互独立的,它们之间的属性值和方法调用不会相互影响。实例化是通过调用类的构造函数来创建实例的过程。在实例化过程中,会为实例分配内存空间,并初始化实例的属性值。实例是面向对象编程中的一个重要概念,它提供了一种将类抽象转化为具体对象的方式,使得程序可以更加灵活、可维护和可扩展。通过实例,可以创建多个对象并进行独立操作,实现代码的重用和模块化。
转换方法,转化方法即为初始化方法,初始化方法是在创建一个对象实例时自动调用的特殊方法。它用于对对象进行初始化操作,为对象的属性赋初值或执行其他必要的初始化任务。在很多编程语言中,初始化方法通常被称为构造方法(Constructor),它与类同名,并且没有返回值。当创建一个对象实例时,会自动调用该类的初始化方法。在不同的编程语言中,初始化方法的语法和命名规则可能有所不同,但它们都具有相似的功能和作用,即在对象创建时对对象进行初始化。
数据源,指的是存储、提供或生成数据的地方、系统或实体。它可以是各种不同的形式,包括数据库、文件、应用程序编程接口(API)、传感器等。是数据分析、数据处理和数据操作的基础。通过连接到数据源,可以提取、转换和加载数据,进行数据分析、数据挖掘、数据可视化等操作。对于不同的数据源,可能需要使用特定的方法或工具来连接和处理数据。
规则数据源,是指存储了一系列规则或条件的地方,用于在特定情况下进行决策或判断。它类似于一本规则书或指南,提示在不同的情况下应该做什么。规则数据源可以以不同的形式存在,比如数据库、文件或专门的软件系统。通过连接到规则数据源,可以使用这些规则来自动化决策过程,提高效率并确保一致性。
写入数据源,是指将数据存储到数据源中,使其可供后续读取和处理。数据源可以是各种形式的存储介质,如数据库、文件、缓存等。写入数据源的目的是将数据永久保存或在需要时进行检索和处理。通过将数据写入数据源,可以实现数据的持久化存储、数据共享与共享、数据备份与恢复等功能,对于数据管理和应用开发是非常重要的一环。
配置信息,是指在软件、系统或应用程序中设置和存储的各种参数、选项和属性。它用于指导系统或应用程序的行为,并根据用户需求或环境变化进行调整。配置信息可以包括各种类型的数据,如字符串、整数、布尔值、日期等,用于指定各种设置和选项。配置信息可以通过不同的方式进行配置,如配置文件、命令行参数、环境变量、数据库表等。它允许用户或管理员根据需求进行灵活的设置和调整,以满足不同的使用场景和要求。
接口是一种规范或约定,定义了两个或多个软件组件之间的通信方式和交互方式。在软件开发中,接口通常指的是编程接口,它定义了软件组件之间的方法、属性、参数和返回值等规范。通过定义接口,不同的软件组件可以根据约定的规范进行交互,实现功能的复用和扩展。接口的设计和使用可以提高软件的可维护性、可扩展性和重用性,同时也方便了不同开发者之间的协作和集成。
扩展点,是一种设计模式或机制,用于在软件系统中实现可扩展性和灵活性。它允许系统的功能在不修改核心代码的情况下进行扩展和定制。通过扩展点,系统的核心模块可以定义一些可扩展的接口或抽象类,然后第三方开发者可以基于这些接口或抽象类实现自己的扩展功能,并将其注册到系统中。这样,系统就可以在运行时动态地加载和使用这些扩展,从而实现了系统的可定制化和可扩展性。
独占锁(Exclusive Lock),也被称为互斥锁(Mutex Lock),是一种并发控制机制,用于保护共享资源在同一时间只能被一个线程或进程访问。独占锁的基本原理是,在一个线程或进程访问共享资源时,它会获取(加锁)独占锁,其他线程或进程在尝试获取该锁时会被阻塞,直到该线程或进程释放(解锁)独占锁。这样可以确保同一时间只有一个线程或进程能够访问共享资源,避免了并发访问可能引发的竞态条件和数据不一致性问题。
粒度,是指在进行并发控制或同步操作时,所选取的单位的大小或范围。粒度可以根据需求来调整,以平衡并发性能和互斥保护的精确性。粒度较粗的锁或同步机制会涵盖更广泛的代码块或共享资源,需要较长的时间来获取和释放锁,但可以减少竞争和阻塞的可能性。这种情况下,多个线程可能需要等待同一个锁的释放,造成较高的竞争和阻塞风险。粒度较细的锁或同步机制则只保护特定的代码块或共享资源,只需较短的时间来获取和释放锁,可以减少竞争和阻塞的可能性。这种情况下,不同的线程可以同时竞争不同的锁,提高系统的并发能力。
下面结合图1,对本申请实施例中如何在符合开闭原则的条件下,实现与配置中心通讯的持久化进行描述:
请参阅图1,为本申请实施例中一种对开源框架扩展配置中心持久化方法的一个流程示意图。
S101、服务器根据第一类生成与第一类相关的第一对象;
服务器根据第一类生成与第一类相关的第一对象,首先创建第一类的实例,在创建第一类的实例的同时需要传入连接和管理数据库连接的接口作为参数来设置需要处理的数据源。为了便于理解,下面举例说明:第一类为SentinelDataSourceHandler类,SentinelDataSourceHandler类中文译为哨兵数据源处理器,是开源框架Sentinel框架中的一个处理器类,Sentinel中文译为哨兵,用于管理和处理数据源的相关操作。它主要负责对Sentinel的流控规则进行动态加载和更新,将配置的数据源应用到Sentinel的规则中,实现对不同数据源的动态流控管理。服务器将SentinelDataSourceHandler类进行实例化,得到SentinelDataSourceHandler对象,SentinelDataSourceHandler对象中文译为哨兵数据源处理器对象,该SentinelDataSourceHandler对象为一个数据源处理器,用于处理数据源相关操作,即服务器根据第一类生成与第一类相关的第一对象。首先创建SentinelDataSourceHandler类的实例,在创建SentinelDataSourceHandler实例时,需要传入DataSource对象(中文译为数据源)作为参数,用于设置要处理的数据源。
S102、服务器利用转换方法将第一对象转换成当前实例;
服务器利用转换方法将第一对象转换成当前实例,该转换方法由服务器通过开源框架的接口调用得到。承接上例,该开源框架为Sentinel,SentinelDataSourceHandler类实现了SmartlnitializingSingleton接口,SmartlnitializingSingleton接口中文译为智能初始化单例接口,该SmartlnitializingSingleton接口提供了一种在所有单例对象实例化完成后执行特定操作的机制。接着通过该接口调用SentinelDataSourceHandler类中的afterSingletonslntantiated方法,afterSingletonslntantiated方法中文译为单例实例化完成后方法,用于执行一些特定的初始化操作。再调用registerBeanDefinition方法,registerBeanDefinition方法中文译为注册对象方法,注册名为BeanDefinition的对象,BeanDefinition中文译为对象定义,该BeanDefinition对象描述了一个bean的实例,bean中文译为对象或实例。最后调用getBean方法,getBean方法中文译为获取实例方法,获取已经注册的bean的实例。即服务器利用转换方法将第一对象转换成当前实例,该当前实例即为已经注册的bean的实例。
S103、服务器根据当前实例创建第二对象;
服务器根据当前实例创建第二对象。承接上例,服务器创建一个名为NacosDataSoruce的对象,中文译为配置中心数据源。该对象为数据源对象,用于从配置中心获取数据,该配置中心为Nacos,Nacos中文译为配置中心。
S104、服务器对第二对象相关的第二类使用第一初始化方法得到初始化数据源;
服务器对第二对象相关的第二类使用第一初始化方法得到初始化数据源,承接上例,服务器对NacosDataSoruce对象相对应的NacosDataSoruce类使用init()方法得到初始化数据源,init()方法中文译为初始化方法,该init()方法即为第一初始化方法。对于如何获取该第一初始化方法将在下文进行描述,此处不作赘述。
S105、服务器将初始化数据源注册到全部规则数据源中得到写入数据源;
服务器将初始化数据源注册到全部规则数据源中得到写入数据源。承接上例,将初始化数据源注册到全部规则数据源中,该全部规则数据源包括:授权规则数据源(registerAuthorityDataSource),降级规则数据源(registerDegradeDataSource)及系统规则数据源(registerSystemDataSource)等,得到写入数据源,该写入数据源是指用于将数据写入的数据源,是一个用于存储和管理数据的地方,可以通过通过写入操作将数据保存到该数据源中,并将数据持久化保存,以便后续的读取和使用,可以确保数据的可靠性和持久性,使得数据可以在需要的时候进行读取和处理。该步骤使用扩展点将写数据源注册给各个规则。
S106、服务器将写入数据源写入到配置信息中;
服务器将写入数据源写入到配置信息中。承接上例,服务器调用写入数据源中configService类,configService中文译为配置服务,该configService类是用于管理配置信息的类,提供了一些方法用于读取和写入配置数据。
S107、服务器从配置中心读取配置信息。
服务器从配置中心读取配置信息。承接上例,该配置中心为Nacos,服务器在开源框架中进行读写数据库,在这个过程中,开源框架会使用之前初始化的写入数据源和configService类来读取和写入数据库中的数据,在数据进行更新时,读取的数据也将会是更新过后的数据,实现了与配置中心通讯的持久化。
可以理解的是,以上所列举的例子只是实际应用中的一种,在实际应用中,可能会有其他方式实现本申请技术方案,此处不作限定。
上面实施例中,服务器根据第一类生成与第一类相关的第一对象,利用转换方法将第一对象转换成当前实例,根据当前实例创建第二对象,对第二对象相关的第二类使用第一初始化方法得到初始化数据源,将初始化数据源注册到全部规则数据源中得到写入数据源,将写入数据源写入到配置信息中,从配置中心读取配置信息,在符合开闭原则的条件下,实现了与配置中心通讯的持久化。
上述S104中,服务器使用到了第一初始化方法,下结合图2,对如何获取到第一初始化方法进行描述:
请参阅图2,为本申请实施例中一种对开源框架扩展配置中心持久化方法的另一个流程示意图。
S201、服务器搜索开源框架的扩展点及关于扩展点的全部第三类;
服务器搜索开源框架的扩展点及关于扩展点的全部第三类。承接上例,服务器在开源框架Sentinel中查找名为InitExecutor.doinit0的扩展点,InitExecutor.doinit中文译为初始化执行器的方法,扩展点是一种机制,允许在程序运行时动态添加功能或修改行为。并使用SPI(Service Provider Interface)机制加载相关依赖包下的/META-INF/services/目录中所有的InitFunc实例类,SPI中文译为服务提供者接口,META-INF/services中文译为服务提供者配置文件,InitFunc中文译为初始化函数,该InitFunc实例类即为第三类。SPI机制允许在运行时自动发现和加载实现了特定接口的类。
S202、服务器创建第二对象相关的第二类;
服务器创建第二对象相关的第二类。承接上例,服务器创建名为NacosDataSourceInitFunc的类,NacosDataSourceInitFunc中文译为配置中心数据源初始化函数,该NacosDataSourceInitFunc类即为第二对象相关的第二类,是一个初始化函数,用于在程序启动时执行一些特定的初始化操作。
S203、服务器利用第二类实现第三类的接口;
服务器利用第二类实现第三类的接口。承接上例,服务器利用NacosDataSourceInitFunc类实现了一个名为InitFunc的接口。
S204、服务器利用第三类的接口从第二类中确定第一初始化方法。
服务器利用第三类的接口从第二类中确定第一初始化方法。承接上例,服务器利用InitFunc接口确定NacosDataSourceInitFunc类中的init()方法,即第一初始化方法。
上面实施例中,服务器搜索开源框架的扩展点及关于扩展点的全部第三类,创建第二对象相关的第二类,利用第二类实现第三类的接口,最后利用第三类的接口从第二类中确定第一初始化方法,提高了得到初始化数据源的效率。
此外,在S105中,服务器将初始化数据源注册到全部规则数据源中得到写入数据源,这个过程中需要考虑并发问题,并发问题是指多个线程或进程同时访问共享资源时可能出现的冲突和不一致性的情况。为此,利用独占锁来防止并发问题。
下面结合图3,对如何防止并发问题进行描述:
请参阅图3,为本申请实施例中一种对开源框架扩展配置中心持久化方法的又一个流程示意图。
S301、服务器创建独占锁类;
服务器创建独占锁类。承接上例,服务器创建一个独占锁类,该独占锁类包括独占锁ReentrantLock,ReentrantLock中文译为可重入锁。
S302、服务器根据独占锁类生成与独占锁类相关的独占锁对象;
服务器根据独占锁类生成与独占锁类相关的独占锁对象。承接上例,服务器根据独占锁ReentrantLock类生成与该独占锁ReentrantLock类相关的独占锁ReentrantLock对象。
S303、服务器判断是否获取到独占锁对象;
服务器判断是否获取到独占锁对象。在进行初始化数据源注册到全部规则数据源中得到写入数据源这个步骤时,服务器首先要先确定获取到独占锁对象,再开始注册操作。也就是说在一个时间段只能进行一个初始化数据源的注册操作。承接上例,服务器判断是否获取到ReentrantLock对象。
S304、执行服务器将初始化数据源注册到全部规则数据源中得到写入数据源步骤;
若服务器获取到独占锁对象,则执行服务器将初始化数据源注册到全部规则数据源中得到写入数据源步骤。承接上例,若服务器获取到ReentrantLock对象,则服务器将初始化数据源注册到全部规则数据源中,该全部规则数据源包括:授权规则数据源(registerAuthorityDataSource),降级规则数据源(registerDegradeDataSource)及系统规则数据源(registerSystemDataSource)等,得到写入数据源,该写入数据源是指用于将数据写入的数据源,是一个用于存储和管理数据的地方,可以通过通过写入操作将数据保存到该数据源中,并将数据持久化保存,以便后续的读取和使用,可以确保数据的可靠性和持久性,使得数据可以在需要的时候进行读取和处理。
S305、执行服务器判断是否获取到独占锁对象步骤。
若服务器没有获取到独占锁对象,则执行服务器判断是否获取到独占锁对象步骤,知道获取到独占锁对象时,再执行服务器将初始化数据源注册到全部规则数据源中得到写入数据源步骤。承接上例,若服务器没有获取到ReentrantLock对象,则持续执行服务器判断是否获取到ReentrantLock对象步骤,直到服务器获取到ReentrantLock对象,则服务器将初始化数据源注册到全部规则数据源中,该全部规则数据源包括:授权规则数据源(registerAuthorityDataSource),降级规则数据源(registerDegradeDataSource)及系统规则数据源(registerSystemDataSource)等,得到写入数据源,该写入数据源是指用于将数据写入的数据源,是一个用于存储和管理数据的地方,可以通过通过写入操作将数据保存到该数据源中,并将数据持久化保存,以便后续的读取和使用,可以确保数据的可靠性和持久性,使得数据可以在需要的时候进行读取和处理。
上面实施例中,在初始化操作之前加入独占锁对象,当服务器获取到独占锁对象之后才开始进行初始化操作,有效防止了并发问题的产生。
上述S305中,服务器会等待获取到独占锁对象之后再执行服务器判断是否获取到独占锁对象步骤,但是在实际应用中,等待获取独占锁对象的时间可能会影响服务器工作的效率,因此当服务器确定第一初始化数据源注册到规则数据源的注册时间超过阈值时,服务器将第一初始化数据源的注册顺序延后。
上面实施例中,当服务器确定第一初始化数据源注册到规则数据源的注册时间超过阈值时,服务器将第一初始化数据源的注册顺序延后,提高了服务器将初始化数据源注册到全部规则数据源中得到写入数据源的效率。
在S105中,可以使用一种方案帮助注册的过程更加高效,该服务器驱根据若干该初始化数据源在预设优先级表中的栏目确定若干该初始化数据源的优先级;该服务器根据该初始化数据源的优先级进行从大到小的排序,得到排序结果;该服务器根据该排序结果依次执行该服务器将该初始化数据源注册到全部规则数据源中得到写入数据源步骤。
上面实施例中,服务器在进行初始化数据源注册到全部规则数据源中步骤之前,先根据若干该初始化数据源在预设优先级表中的栏目确定若干该初始化数据源的优先级,再根据该初始化数据源的优先级进行从大到小的排序,得到排序结果;最后服务器根据该排序结果依次执行该服务器将该初始化数据源注册到全部规则数据源中得到写入数据源步骤,先将优先级高的初始化数据源优先注册,并且按照优先级顺序进行注册,提高了注册的效率。
此外,在使用独占锁进行注册时,可能会因为独占锁的粒度大小发生拥堵,因此该服务确定该独占锁对象中的大锁,该大锁为该独占锁对象中粒度大于预设粒度的独占锁对象,该粒度为该独占锁对象在工作时获取资源的大小或范围;该服务器对该大锁中能够拆分的第一大锁进行拆分。
上面实施例中,服务确定该独占锁对象中的大锁,然后服务器对该大锁中能够拆分的第一大锁进行拆分,在注册过程中使用粒度较小的独占锁,避免注册步骤发生拥堵,提高了注册的效率。
在S105中,服务器将初始化数据源注册到全部规则数据源中得到写入数据源,注册的方法具体为:服务器创建数据源注册器,数据源注册器中有包含全部规则数据源的列表;服务器定义一个包含注册方法的规则数据源接口;服务器使用注册方法将初始化数据源添加到列表中的全部规则数据源,得到写入数据源。
上面实施例中,服务器定义一个包含注册方法的规则数据源接口,通过该接口使用该注册方法将初始化数据源添加到列表中的全部规则数据源,得到写入数据源,完成了服务器将初始化数据源注册到全部规则数据源中得到写入数据源步骤。
此外,在S102中,服务器利用转换方法将第一对象转换成当前实例,具体的,服务器通过开源框架的接口调用转换方法;服务器利用转换方法将第一对象转换成当前实例。
上面实施例中,服务器通过开源框架的接口调用转换方法,为服务器将第一对象转换成当前实例提供了转换方法,提高了将第一对象转换为当前实例的效率。
在服务器根据当前实例创建第二对象之前,即S103之前,服务器调用读取方法来读取当前实例。
上面实施例中,服服务器采用读取方法来读取当前实例,提高了服务器读取当前实例的效率。
下面从模块角度介绍本申请实施例中的服务器:
该服务器包括:
生成模块,用于服务器根据第一类生成与该第一类相关的第一对象;
转换模块,用于该服务器利用转换方法将该第一对象转换成当前实例,该转换方法由该服务器通过开源框架的接口调用得到;
创建模块,用于该服务器根据该当前实例创建第二对象;
初始化模块,用于该服务器对该第二对象相关的第二类使用第一初始化方法得到初始化数据源;
注册模块,用于该服务器将该初始化数据源注册到全部规则数据源中得到写入数据源;
写入模块,用于该服务器将该写入数据源写入到配置信息中;
读取模块,用于该服务器从配置中心读取该配置信息。
本申请实施例提供的一种对开源框架扩展配置中心持久化服务器,可以根据第一类生成与第一类相关的第一对象,利用转换方法将第一对象转换成当前实例,根据当前实例创建第二对象,对第二对象相关的第二类使用第一初始化方法得到初始化数据源,将初始化数据源注册到全部规则数据源中得到写入数据源,将写入数据源写入到配置信息中,从配置中心读取配置信息,在符合开闭原则的条件下,实现了与配置中心通讯的持久化。
本申请实施例提供的一种对开源框架扩展配置中心持久化服务器,还可以搜索开源框架的扩展点及关于扩展点的全部第三类,创建第二对象相关的第二类,利用第二类实现第三类的接口,最后利用第三类的接口从第二类中确定第一初始化方法,提高了得到初始化数据源的效率。此外,在初始化操作之前加入独占锁对象,当服务器获取到独占锁对象之后才开始进行初始化操作,有效防止了并发问题的产生。
附图中的流程图和框图,图示了按照本发明各种实施例的服务器、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的服务器来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
上述实施例中所用,根据上下文,术语“当…时”可以被解释为意思是“如果…”或“在…后”或“响应于确定…”或“响应于检测到…”。类似地,根据上下文,短语“在确定…时”或“如果检测到(所陈述的条件或事件)”可以被解释为意思是“如果确定…”或“响应于确定…”或“在检测到(所陈述的条件或事件)时”或“响应于检测到(所陈述的条件或事件)”。

Claims (10)

1.一种对开源框架扩展配置中心持久化方法,其特征在于,包括:
服务器根据第一类生成与所述第一类相关的第一对象;
所述服务器利用转换方法将所述第一对象转换成当前实例,所述转换方法由所述服务器通过开源框架的接口调用得到;
所述服务器根据所述当前实例创建第二对象;
所述服务器对所述第二对象相关的第二类使用第一初始化方法得到初始化数据源;
所述服务器将所述初始化数据源注册到全部规则数据源中得到写入数据源;
所述服务器将所述写入数据源写入到配置信息中;
所述服务器从配置中心读取所述配置信息。
2.根据权利要求1所述的方法,其特征在于,所述服务器对所述第二对象相关的第二类进行初始化得到初始化数据源之前,所述方法还包括:
所述服务器搜索所述开源框架的扩展点及关于所述扩展点的全部第三类;
所述服务器创建所述第二对象相关的第二类;
所述服务器利用所述第二类实现所述第三类的接口;
所述服务器利用第三类的接口从所述第二类中确定第一初始化方法。
3.根据权利要求1所述的方法,其特征在于,所述服务器将所述初始化数据源注册到全部规则数据源中得到写入数据源之前,所述方法还包括:
所述服务器创建独占锁类;
所述服务器根据所述独占锁类生成与所述独占锁类相关的独占锁对象;
所述服务器判断是否获取到所述独占锁对象;
若所述服务器获取到所述独占锁对象,则执行所述服务器将所述初始化数据源注册到全部规则数据源中得到写入数据源步骤;
若所述服务器没有获取到所述独占锁对象,则执行所述服务器判断是否获取到所述独占锁对象步骤。
4.根据权利要求3所述的方法,其特征在于,所述若所述服务器没有获取到所述独占锁对象,则执行所述服务器判断是否获取到所述独占锁对象步骤之后,所述方法还包括:
所述服务器确定第一初始化数据源注册到规则数据源的注册时间超过阈值;
所述服务器将第一初始化数据源的注册顺序延后。
5.根据权利要求1所述的方法,其特征在于,所述服务器将所述初始化数据源注册到全部规则数据源中得到写入数据源,具体包括:
所述服务器驱根据若干所述初始化数据源在预设优先级表中的栏目确定若干所述初始化数据源的优先级;
所述服务器根据所述初始化数据源的优先级进行从大到小的排序,得到排序结果;
所述服务器根据所述排序结果依次执行所述服务器将所述初始化数据源注册到全部规则数据源中得到写入数据源步骤。
6.根据权利要求3所述的方法,其特征在于,所述服务器根据所述独占锁类生成与所述独占锁类相关的独占锁对象之后,所述方法还包括:
所述服务确定所述独占锁对象中的大锁,所述大锁为所述独占锁对象中粒度大于预设粒度的独占锁对象,所述粒度为所述独占锁对象在工作时获取资源的大小或范围;
所述服务器对所述大锁中能够拆分的第一大锁进行拆分。
7.根据权利要求1所述的方法,其特征在于,所述服务器将所述初始化数据源注册到全部规则数据源中得到写入数据源,具体包括:
所述服务器创建数据源注册器,所述数据源注册器中有包含全部所述规则数据源的列表;
所述服务器定义一个包含注册方法的规则数据源接口;
所述服务器使用所述注册方法将所述初始化数据源添加到所述列表中的全部所述规则数据源,得到所述写入数据源。
8.根据权利要求1所述的方法,其特征在于,所述服务器利用转换方法将所述第一对象转换成当前实例,具体包括:
所述服务器通过开源框架的接口调用转换方法;
所述服务器利用所述转换方法将所述第一对象转换成当前实例。
9.根据权利要求1所述的方法,其特征在于,所述服务器根据所述当前实例创建第二对象之前,所述方法还包括:
所述服务器调用读取方法来读取所述当前实例。
10.一种对开源框架扩展配置中心持久化服务器,其特征在于,包括:
生成模块,用于服务器根据第一类生成与所述第一类相关的第一对象;
转换模块,用于所述服务器利用转换方法将所述第一对象转换成当前实例,所述转换方法由所述服务器通过开源框架的接口调用得到;
创建模块,用于所述服务器根据所述当前实例创建第二对象;
初始化模块,用于所述服务器对所述第二对象相关的第二类使用第一初始化方法得到初始化数据源;
注册模块,用于所述服务器将所述初始化数据源注册到全部规则数据源中得到写入数据源;
写入模块,用于所述服务器将所述写入数据源写入到配置信息中;
读取模块,用于所述服务器从配置中心读取所述配置信息。
CN202311208706.2A 2023-09-19 2023-09-19 一种对开源框架扩展配置中心持久化方法及服务器 Pending CN117149263A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311208706.2A CN117149263A (zh) 2023-09-19 2023-09-19 一种对开源框架扩展配置中心持久化方法及服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311208706.2A CN117149263A (zh) 2023-09-19 2023-09-19 一种对开源框架扩展配置中心持久化方法及服务器

Publications (1)

Publication Number Publication Date
CN117149263A true CN117149263A (zh) 2023-12-01

Family

ID=88907989

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311208706.2A Pending CN117149263A (zh) 2023-09-19 2023-09-19 一种对开源框架扩展配置中心持久化方法及服务器

Country Status (1)

Country Link
CN (1) CN117149263A (zh)

Similar Documents

Publication Publication Date Title
US11853774B2 (en) Dynamically loaded plugin architecture
US8904347B2 (en) Apparatus, method and system for building software by composition
Schäling The boost C++ libraries
Schäling The boost C++ libraries
CN1989488B (zh) 运行时系统的鲁棒共享
CN100498699C (zh) 在运行时系统中共享对象
CN1989489B (zh) 数据处理方法和装置
WO2019024674A1 (zh) 智能合约处理方法及装置
US5414854A (en) Object-oriental system for managing shared libraries
CN110716748B (zh) 业务处理方法、装置、计算机可读介质及电子设备
US8108851B2 (en) External registration for function configuration within a client platform application
RU2503997C2 (ru) Конфигурируемое разделение для параллельных данных
US10552127B2 (en) Method and system for developing relation-context specific software applications
KR20080059561A (ko) 오브젝트 구성을 위한 방법 및 확장가능 프레임워크
JP2000187594A (ja) インタ―フェ―スのランタイム付加
EP3607432B1 (en) Flow-based scoping
US11537367B1 (en) Source code conversion from application program interface to policy document
US7873951B1 (en) Automated object delegation
US8615734B2 (en) System and method for dynamically redefining class files in an application server environment
US6704802B1 (en) Method and system for communicating between independent software modules
De Koster et al. Domains: Sharing state in the communicating event-loop actor model
US10120777B1 (en) Remediating serialization incompatibilities
US7418713B2 (en) Component processing system and component processing method
Desell et al. Salsa lite: A hash-based actor runtime for efficient local concurrency
US11200203B1 (en) Accessing files stored in a firmware volume from a pre-boot application

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