一种灰度发布方法及装置
技术领域
本申请涉及网络通信技术领域,特别涉及一种灰度发布方法及装置。
背景技术
灰度发布作为一种在系统应用发布过程中能平滑从老版本切换到新版的发布控制方法,在现今大型后台应用系统发布、手机等终端设备系统、手机应用APP等系统应用发布过程中都是经常使用的方式。
系统发布过程中比较难解决的问题主要有新老系统切换时如何实现平滑切换,也既灰度发布,如何方便精细化控制切换过程。
现有技术主要通过设定控制要素和简单的白名单黑名单方式实现,这样就导致以下问题:无法实现动态扩展控制要素,实现复杂筛选逻辑的代码复杂度高。
发明内容
为了解决现有技术中灰度发布中控制规则变化造成工作量巨大,并且不能够灵活、动态的控制灰度发布的问题,本申请实施例提出了一种灰度发布方法及装置,通过可配置的控制规则和规则引擎实现了动态控制灰度发布的目的。
本申请实施例提供了一种灰度发布方法,包括,
获取交易请求,根据所述交易请求中的业务类型匹配相应的控制规则;
对所述控制规则进行预处理,得到规则模板;
将所述规则模板发送给规则引擎进行处理,得到灰度发布范围;
根据所述灰度发布范围控制灰度发布。
本申请实施例还提供了一种灰度发布装置,包括,
匹配单元,用于获取交易请求,根据所述交易请求中的业务类型匹配相应的控制规则;
预处理单元,用于对所述控制规则进行预处理,得到规则模板;
规则引擎,用于对所述规则模板进行处理,得到灰度发布范围;
发布单元,用于根据所述灰度发布范围控制灰度发布。
由以上本申请实施例提供的技术方案可见,通过配置控制规则可以灵活的控制灰度发布的范围,并且不需要复杂的代码工作,不需要代码发布,节省资源成本。
当然实施本申请的任一产品或者方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1所示为本申请实施例一种灰度发布方法的流程图;
图2所示为本申请实施例一种灰度发布装置的结构示意图;
图3所示为本申请实施例一种具体的灰度发布方法流程图;
图4所示为本申请实施例预处理步骤的详细流程图。
具体实施方式
本申请实施例提供一种灰度发布方法及装置。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
如图1所示为本申请实施例一种灰度发布方法的流程图,在本实施例中通过参数配置的方式控制灰度发布,可以对控制规则的字符串进行统一化的处理得到控制规则的模板,从而可以根据灰度发布的需要实时调整控制规则,避免现有技术中控制规则无法动态扩展的问题,该方法可以运行于服务器端的高性能计算机中,具体包括,
步骤101,获取交易请求,根据所述交易请求中的业务类型匹配相应的控制规则。
步骤102,对所述控制规则进行预处理,得到规则模板。
步骤103,将所述规则模板发送给规则引擎进行处理,得到灰度发布范围。
步骤104,根据所述灰度发布范围控制灰度发布。
作为本申请的一个实施例,在根据所述交易请求中的业务类型匹配相应的控制规则之中还包括,根据所述交易请求中的业务类型匹配缓存中相应的控制规则,通过将控制规则事先放置入缓存中,这样可以提高数据处理的速度。
作为本申请的一个实施例,根据所述交易请求中的业务类型匹配缓存中相应的控制规则中还包括,若所述缓存中没有相应的控制规则,则将相应的控制规则加载到所述缓存中。
作为本申请的一个实施例,所述控制规则包括作为判断条件的黑白名单和/或逻辑表达式,判断条件之间的逻辑连接关系。其中,所述白名单例如为年龄为30岁、31岁和32,所述黑名单例如为用户地域位置为北京,所述逻辑表达式例如为交易额<=100元;所述逻辑连接关系例如可以为和、或的逻辑关系。
作为本申请的一个实施例,对所述控制规则进行预处理,得到规则模板中具体包括,
获取所述控制规则中的黑白名单,判断所述交易请求中的交易要素是否与所述黑白名单匹配,并输出判断结果;
将判断结果替换所述控制规则中的黑白名单,形成规则模板。
作为本申请的一个实施例,获取所述控制规则中的黑白名单包括,获取所述黑白名单中的字符串。其中,根据上一个实施例中的内容,所述字符串可以为白名单30、31和32,黑名单为北京。
作为本申请的一个实施例,判断所述交易请求中的交易要素是否与所述黑白名单匹配,并输出判断结果进一步包括,判断所述黑白名单中是否包括所述交易要素,并输出布尔值。
其中,当所述白名单中包括所述交易要素,则该白名单的判断结果为true,否则判断结果为false;当所述黑名单中包括所述交易要素,则该黑名单的判断结果为false,否则判断结果为true。例如,白名单为年龄为30、31和32,黑名单为用户的地理位置为北京,用户的交易要素中年龄为32,地理位置为北京,在用户的交易要素中的年龄包括于白名单中,输出的判断结果为true,地理位置包括于黑名单中,输出的判断结果为false。
作为本申请的一个实施例,将所述规则模板发送给规则引擎进行处理具体包括,当规则模板中包括逻辑表达式时,则判断所述交易要素是否符合所述逻辑表达式,并使用输出的判断结果替换所述规则模板中相应的逻辑表达式,其中判断结果为布尔值。
当所述交易要素符合所述逻辑表达式,则该逻辑表达式的判断结果为true,否则判断结果为false。例如,逻辑表达式为交易额<=100,用户的交易要素中交易额为150元,则交易要素不符合逻辑表达式,输出的判断结果为false。
作为本申请的一个实施例,将所述规则模板发送给规则引擎进行处理,得到灰度发布范围进一步包括,根据规则模板中判断结果之间的逻辑连接关系,计算该规则模板的逻辑运算结果,根据所述逻辑运算结果得到灰度发布范围。
其中,规则模板就是将控制规则中的判断条件替换为布尔值后的形式,在控制规则中每个判断条件之间具有相应的逻辑连接关系,例如and、or等,所述逻辑运算结果根据以上实施例可以为true或者false,也就是说该逻辑运算结果可以指明是否向该用户发送新的软件版本,即控制灰度发布的范围。
通过上述本申请方法的实施例,通过配置控制规则可以灵活的控制灰度发布的范围,并且不需要复杂的代码工作,不需要代码发布,节省资源成本。
如图2所示为本申请实施例一种灰度发布装置的结构示意图,该实施例的装置可以内置于现有的灰度发布设备之中,或者单独设立设备实现本实施例的装置,或者还可以由特定的FPGA(可编程逻辑器件)等可编程的芯片实现,具体包括:
匹配单元201,用于获取交易请求,根据所述交易请求中的业务类型匹配相应的控制规则。
预处理单元202,用于对所述控制规则进行预处理,得到规则模板。
规则引擎203,用于对所述规则模板进行处理,得到灰度发布范围。
发布单元204,用于根据所述灰度发布范围控制灰度发布。
作为本申请的一个实施例,还包括缓存单元205,与所述匹配单元相连接,用于存储所述控制规则。
作为本申请的一个实施例,还包括加载单元206,与所述缓存单元相连接,用于当所述缓存中没有相应的控制规则,则将相应的控制规则加载到所述缓存中。
作为本申请的一个实施例,所述控制规则包括作为判断条件的黑白名单和/或逻辑表达式,判断条件之间的逻辑连接关系。
作为本申请的一个实施例,所述预处理单元202进一步包括:
判断模块2021,用于获取所述控制规则中的黑白名单,判断所述交易请求中的交易要素是否与所述黑白名单匹配,并输出判断结果;
替换模块2022,用于将判断结果替换所述控制规则中的黑白名单,形成规则模板。
作为本申请的一个实施例,所述判断模块具体用于判断所述黑白名单中是否包括所述交易要素,并输出布尔值。
作为本申请的一个实施例,所述规则引擎具体用于当规则模板中包括逻辑表达式时,则判断所述交易要素是否符合所述逻辑表达式,并使用输出的判断结果替换所述规则模板中相应的逻辑表达式,其中判断结果为布尔值。
作为本申请的一个实施例,所述规则引擎具体用于根据规则模板中判断结果之间的逻辑连接关系,计算该规则模板的逻辑运算结果,根据所述逻辑运算结果得到灰度发布范围。
通过上述本申请装置的实施例,通过灰度发布装置配置控制规则可以灵活的控制灰度发布的范围,并且不需要复杂的代码工作,不需要代码发布,节省资源成本。
如图3所示为本申请实施例一种具体的灰度发布方法流程图,在本实施例中以下面的控制规则为例进行说明,在其它的实施例中可能有各种各样的控制规则,可以根据灰度发布需要任意配置。
控制规则为:
$influxTransaction.requestContext.exchangeAmount.amount>=6.00&&$influxExten sion.requestContext.BIZ_PRODUCT_CODE=[abc01,abc02,abc03]||($influxExtension.cha nnelAPI!=[biz01,biz02,biz03]&&$influx.influxTransaction.userArea=shanghai)
上述的控制规则含义为:交易金额大于6.00元并且商品类型是abc01或abc02或abc03的交易,或者交易卡不是biz01,biz02,biz03并且地区属于上海的交易允许使用新功能。
步骤301,获取交易请求。
所述交易请求可能包括用户信息、业务类型、商品信息和商家信息等,其中用户信息进一步可以包括用户ID、年龄、交易卡、地理位置信息等等交易元素,所述业务类型可以为编号或者字符串以标记当前交易请求为买卖业务类型或者汇款业务类型等交易元素,所述商品信息进一步可以包括商品类型、商品编号、价格等等交易元素,所述商家信息进一步可以包括商家ID,信用等级等等交易元素。
步骤302,根据所述交易请求中的业务类型匹配相应的控制规则。
其中,本步骤所述的匹配可以将业务类型和相应的控制规则制作成一张或者多张表格,在表格中记录有它们的对应关系,或者只是以文本的方式记录业务类型和控制规则之间的对应关系。
并且,上述的表格或者对应关系可以在计算机的缓存中进行存储,这样计算机可以快速的通过与缓存的数据交换得到与业务类型相关的控制规则,例如在本例中业务类型为买卖类型,与其相关的控制规则可以如前所示。
步骤303,判断是否在缓存中匹配得到控制规则,如果匹配到则进入步骤305,否则进入步骤304。
步骤304,从数据库中匹配与业务类型相应的控制规则,并加载到缓存中。
其中,数据库可以位于硬盘或者网络中的其他计算机中,亦或者可以位于云端存储器中,当需要对控制规则进行修改或者更新,则开发者可以配置、修改上述控制规则,更新至数据库中,并最终被加载到缓存中。
步骤305,对所述控制规则进行预处理,形成规则模板。
在本步骤中,将控制规则中的黑白名单替换为真(true)、假(false)的布尔值,以便于后期规则引擎的处理。
由于本例中的控制规则中包括黑白名单和逻辑表达式的形式,因此判断交易请求中的交易元素是否在所述黑白名单,从而就可以得到该部分判断条件的true或者false的布尔值,所述预处理的具体预处理步骤可以如图4所示,具体包括:
步骤401,获取控制规则中黑白名单的字符串。
根据上述控制规则,获取的黑白名单的字符串包括,influxExtension.requestContext.BIZ_PRODUCT_CODE=[abc01,abc02,abc03]、influxExtension.channelAPI!=[biz01,biz02,biz03]、influx.influxTransaction.userArea=shanghai。
步骤402,判断交易请求中的交易要素是否符合上述的字符串,输出该字符串判断结果的布尔值。
在本实施例中,一个用户的交易要素中的商品类型为abc01,交易卡为biz05,地区为beijing。
在判断交易要素是否符合上述字符串,并输出判断结果的布尔值具体包括,所述交易要素中的商品类型为abc01落入白名单的字符串中influxExtension.requestContext.BIZ_PR ODUCT_CODE=[abc01,abc02,abc03]中,该白名单字符串的判断结果输出为true(或者使用0、1来分别表示false和true);所述交易要素中的交易卡为biz05没有落入黑名单的字符串influxExtension.channelAPI!=[biz01,biz02,biz03]中,该黑名单字符串的判断结果输出为true;所述交易要素中的地区为beijing没有落入白名单字符串influx.influxTransaction.userArea=shanghai,该白名单字符串的判断结果输出为false。
步骤403,将判断结果的布尔值替换控制规则中相应的黑白名单,形成规则模板。
替换之后的控制规则后的规则模板为:
influxTransaction.requestContext.exchangeAmount.amount>=6.00&&true||true&&false;其中,&&表示逻辑“与”运算,||表示逻辑“或”运算。
步骤306,加载规则模板到规则引擎velocity。
在本实施例中以velocity作为规则引擎进行说明,在其它实施例中还可以采用其它的规则引擎进行逻辑关系式的运算。
步骤307,所述规则引擎对规则模板进行运算,得到灰度发布范围。
在本实施例中,规则模板influxTransaction.requestContext.exchangeAmount.amount>=6.00&&true||true&&false,其中逻辑表达式的字符串包括,influxTransaction.requestContext.exchangeAmount.amount>=6.00,所述交易要素中的金额为15,大于等于逻辑表达式中的金额6,因此逻辑表达式的字符串influxTransaction.requestContext.exchangeAmo unt.amount>=6.00成立,输出该逻辑表达式字符串的判断结果为true。
最终规则模板的形式为true&&true||true&&false,根据规则模板的判断结果之间的逻辑连接关系进行逻辑运算,运算结果为true,即允许发起该交易请求的用户使用新功能。
在对众多用户发起的交易请求进行上述步骤的处理,即可以得到灰度发布范围。
在某些实施例中如果控制规则中不包括逻辑表达式,则本步骤307中对于逻辑表达式的逻辑判断可以不存在,直接对规则模板进行逻辑运算,得到逻辑运算结果。
步骤308,根据所述灰度发布范围控制灰度发布。
具体的,灰度发布范围的控制可以为允许逻辑运算结果为true的用户终端使用新功能。
通过上述本申请实施例中的方法和装置,通过配置控制规则可以灵活的控制灰度发布的范围,通过规则引擎的处理可以动态的根据控制规则确定发布范围,并且不需要复杂的代码工作,不需要代码发布,节省资源成本。
对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(ProgrammableLogic Device,PLD)(例如现场可编程门阵列(Field Programmable Gate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(HardwareDescription Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(AdvancedBoolean Expression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(JavaHardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby HardwareDescription Language)等,目前最普遍使用的是VHDL(Very-High-Speed IntegratedCircuit Hardware Description Language)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。