掌桥专利:专业的专利平台
掌桥专利
首页

高并发的金融风险指标处理方法及装置

文献发布时间:2023-06-19 19:28:50


高并发的金融风险指标处理方法及装置

技术领域

本申请涉及金融数据处理技术领域,特别涉及高并发的金融风险指标处理方法及装置。

背景技术

目前,国内金融市场逐渐开放,金融交易日渐活跃。商业银行由于其经营货币资金业务的特殊性,其资金数量巨大,极易受到市场变动的影响。因此,提高我国商业银行的风险管理水平是银行开拓金融市场的必要条件,也是经营与管理的发展趋势,对我国经济和金融的安全运行有着极为深刻的影响。

商业银行风险水平类指标包括流动性风险指标、市场风险指标、信用风险指标、操作风险指标,其中流动性风险指标和市场风险指标的计量对于实时性要求较高。从系统设计的角度考虑,实现风险指标实时计量面临一些挑战:由于市场变动频率较高,在实时计算风险指标时很可能遇到并发问题,因此在读写数据过程中需要应用并发控制策略,且应当特别关注计算性能;为了保证高可用,系统宜采用分布式架构,多个系统分布在不同的机器上,需要维护分布式环境下的数据一致性;多种事件都会触发风险指标的更新,但从业务角度不同事件的影响程度不同,出现并发冲突时,采用的并发控制策略宜区分事件优先级,并根据优先级进行差异化的操作;对于商业银行而言,需要计量的金融风险指标维度和种类众多,每种指标的计算方式也不唯一,因此该计量机制的流程应当具有通用性。

应该注意,上面对技术背景的介绍只是为了方便对本申请的技术方案进行清楚、完整的说明,并方便本领域技术人员的理解而阐述的。不能仅仅因为这些方案在本申请的背景技术部分进行了阐述而认为上述技术方案为本领域技术人员所公知。

发明内容

发明人发现,目前行业中,电子交易系统通常采用单事件触发模式进行风险指标计量,即定时轮询计算。当有新的会改变风险指标的事件发生时,如新的成交订单、行情更新等,风险指标只能等下一次轮询触发后才能更新,导致风险计量的实时性不高。此外,针对并发问题,业内多使用基于悲观锁思想的线程锁和分布式锁等技术加以控制,但随着交易市场的蓬勃发展,金融交易日渐活跃,加锁造成的性能损耗也越来越难以忍受。

为了解决上述问题中的一个或多个,本申请实施例提供一种高并发的金融风险指标处理方法及装置,通过采用远程字典服务(Redis)进行实时的数据存储,无需担心出现竞态条件,无需使用事务,减少了网络开销,提升了计算性能;并且,使用远程字典服务(Redis)的主从数据库来存储序列号,提升了数据的访问性能并避免数据的单点故障问题。

根据本申请实施例的第一方面,提供了一种高并发的金融风险指标处理方法,其中,所述方法包括:

设置账户在远程字典服务(Redis)中的初始化序列号,

获取消息队列中的触发事件以及读取所述触发事件发生时的所述账户在所述远程字典服务中的序列号作为触发时的序列号;

基于所述触发事件并根据所述触发时的序列号计算所述账户的风险指标。

根据本申请实施例的第二方面,其中,所述方法还包括:

在更新所述账户的风险指标的情况下,获取所述账户的更新时的序列号;

基于所述触发时的序列号和所述更新时的序列号,确定所述账户的风险指标。

根据本申请实施例的第三方面,所述方法还包括:

在所述触发时的序列号和所述更新时的序列号相同的情况下,更新所述账户的风险指标以及所述更新时的序列号。

根据本申请实施例的第四方面,其中,所述方法还包括:

在所述触发时的序列号和所述更新时的序列号不相同的情况下,确定所述触发事件的优先级;

当所述优先级为高优先级时,重新获取所述消息队列中的触发事件,当所述优先级为低优先级时,结束计算。

根据本申请实施例的第五方面,其中,所述更新所述账户的风险指标以及所述更新时的序列号,包括:

更新所述账户的风险指标的数据,更新所述更新时的序列号为:(所述触发时的序列号+1)%10000。

根据本申请实施例的第六方面,其中,所述账户的风险指标根据以下公式计算获得:

NAP=|L-S|;

GAP=L+S;

BAP=max[L,S];

其中,NAP为净汇总敞口,GAP为总汇总短敞口,BAP为汇总短敞口,L为多头头寸,S为空头头寸。

根据本申请实施例的第七方面,其中,在更新所述账户的风险指标数据时,使用Lua脚本操作远程字典服务(Redis)中的数据。

根据本申请实施例的第八方面,提供一种高并发的金融风险指标处理装置,其中,所述装置包括:

初始模块,其设置账户在远程字典服务(Redis)中的初始化序列号,

处理模块,其获取消息队列中的触发事件以及读取所述触发事件发生时的所述账户在所述远程字典服务中的序列号作为触发时的序列号;以及

基于所述触发事件并根据所述触发时的序列号计算所述账户的风险指标。

根据本申请实施例的第九方面,其中,处理模块,在更新所述账户的风险指标的情况下,获取所述账户的更新时的序列号;

基于所述触发时的序列号和所述更新时的序列号,确定所述账户的风险指标。

根据本申请实施例的第十方面,其中,所述方法还包括:

处理模块,在所述触发时的序列号和所述更新时的序列号相同的情况下,更新所述账户的风险指标以及所述更新时的序列号。

根据本申请实施例的第十一方面,其中,所述方法还包括:

处理模块,在所述触发时的序列号和所述更新时的序列号不相同的情况下,确定所述触发事件的优先级;

当所述优先级为高优先级时,重新获取所述消息队列中的触发事件,当所述优先级为低优先级时,结束计算。

根据本申请实施例的第十二方面,其中,所述更新所述账户的风险指标以及所述更新时的序列号,包括:

更新所述账户的风险指标的数据,更新所述更新时的序列号为:(所述触发时的序列号+1)%10000。

根据本申请实施例的第十三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并能够在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现本申请实施例的第一方面至第七方面中的任一方面所述的高并发的金融风险指标处理方法。

根据本申请实施例的第十四方面,提供一种计算机可读的存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现本申请实施例的第一方面至第七方面中的任一方面所述的高并发的金融风险指标处理方法。

根据本申请实施例的第十五方面,提供一种计算机程序产品,其中,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现本申请实施例的第一方面至第七方面中的任一方面所述的高并发的金融风险指标处理方法。

本申请实施例的有益效果之一在于:

通过采用远程字典服务(Redis)进行实时的数据存储,无需担心出现竞态条件,无需使用事务,减少了网络开销,提升了计算性能;并且,使用远程字典服务(Redis)的主从数据库来存储序列号,提升了数据的访问性能并避免数据的单点故障问题。

参照后文的说明和附图,详细公开了本申请的特定实施方式,指明了本申请的原理可以被采用的方式。应该理解,本申请的实施方式在范围上并不因而受到限制。在所附权利要求的精神和条款的范围内,本申请的实施方式包括许多改变、修改和等同。

针对一种实施方式描述以及示出的特征信息可以以相同或类似的方式在一个或更多个其它实施方式中使用,与其它实施方式中的特征信息相组合,或替代其它实施方式中的特征信息。

应该强调,术语“包括/包含”在本文使用时指特征信息、整件、步骤或组件的存在,但并不排除一个或更多个其它特征信息、整件、步骤或组件的存在或附加。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例的高并发的金融风险指标处理方法的一示意图;

图2是本申请实施例的高并发的金融风险指标处理方法的另一示意图;

图3是本申请实施例的高并发的金融风险指标处理方法的一示意图;

图4是本申请实施例的高并发的金融风险指标处理方法中系统交易的一实例示意图;

图5是本申请实施例的高并发的金融风险指标处理装置的一构成图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1

本申请实施例1提供了一种高并发的金融风险指标处理方法,图1是本申请实施例的高并发的金融风险指标处理方法的一示意图,如图1所示,该方法包括:

步骤100:设置账户在远程字典服务(Redis)中的初始化序列号;

步骤200:获取消息队列中的触发事件以及读取触发事件发生时的账户在远程字典服务中的序列号作为触发时的序列号;

步骤300:基于触发事件并根据触发时的序列号计算账户的风险指标。

这样,通过采用远程字典服务(Redis)进行实时的数据存储,无需担心出现竞态条件,无需使用事务,减少了网络开销,提升了计算性能;并且,使用远程字典服务(Redis)的主从数据库来存储序列号,提升了数据的访问性能并避免数据的单点故障问题。

在本申请实施例中,流动性风险指标是指衡量商业银行流动性状况及其波动性。

在本申请实施例中,市场风险指标是指衡量商业银行因汇率和利率变化而面临的风险。

在本申请实施例中,乐观锁是指在并发下对数据进行修改时保持乐观态度,认为在自己修改数据的过程中,其他线程不会对同一个数据进行修改,不对数据加锁,在最终更新数据前判断数据是否被修改,未被修改才会更新。

在本申请实施例中,悲观锁是指在并发下对数据进行修改时保持悲观态度,认为在自己修改数据的过程中,其他线程也会对同一个数据进行修改,在操作前对数据加锁,操作完成后才会将锁释放,而在释放锁之前,其他线程无法操作数据。

下面对上述方法中的各个步骤进行具体的说明。

在步骤100中,设置账户在远程字典服务(Redis)中的初始化序列号;

例如,考虑到分布式数据一致性和数据读取速度,采用Redis数据库进行实时的数据存储,包括账户的头寸敞口、利率汇率行情数据等,多台机器共用一套数据库。为了保证多线程读写数据的原子性,使用Lua脚本对Redis中的数据进行编辑,在脚本运行过程中无需担心出现竞态条件,无需使用事务。对每个账户在远程字典服务(Redis)中设置一个序列号,该序列号为该账户的初始化序列号。

接下来,在步骤200中,获取消息队列中的触发事件以及读取触发事件发生时的账户在远程字典服务中的序列号作为触发时的序列号。

也就是说,在接收消息列队中的触发事件时需要获取触发事件发生时账户的序列号,从远程字典服务(Redis)中读取出序列号作为触发时的序列号。

步骤300:基于触发事件并根据触发时的序列号计算账户的风险指标。

例如,通过得到触发事件再根据获取的触发时的序列号,计算账户的风险指标。通常金融风险指标的计量值同时受到多方面的影响,比如市场风险指标会受到外币持有量、外币对人民币的汇率、人民币利率等因素的影响。也就是说,为保证市场风险指标计量的实时性和准确性,交易订单事件、市场行情更新事件等都应该引起市场风险指标的更新。商业银行外汇交易账户通常持有一揽子货币,即多种货币对组合。

具体来说,系统接收到消息队列的事件推送后,依据事件类型触发风险指标的计算,所需具体数据从Redis内存数据库中读取。根据业务规则完成计算后,在更新风险指标数值时,采用无锁的并发控制机制,保证数据准确性的同时兼顾系统吞吐量等性能指标

图2是本申请实施例的高并发的金融风险指标处理方法的另一示意图。如图2所示,

在一些实施例中,该方法除了步骤100-300,还包括:

步骤400:在更新账户的风险指标的情况下,获取账户的更新时的序列号;基于触发时的序列号和更新时的序列号,确定账户的风险指标。

在一些实施例中,在触发时的序列号和更新时的序列号相同的情况下,更新账户的风险指标以及更新时的序列号。

在一些实施例中,在触发时的序列号和更新时的序列号不相同的情况下,确定触发事件的优先级;当优先级为高优先级时,重新获取消息队列中的触发事件,当优先级为低优先级时,结束计算。

图3是本申请实施例的高并发的金融风险指标处理方法的一示意图。如图3所示,步骤400,还包括:

步骤401:判断触发时的序列号和更新时的序列号是否相同;

若相同进入步骤402,若不相同进入步骤403;

步骤402:更新账户的风险指标以及更新时的序列号;

步骤403:确定触发事件的优先级;

若优先级高进入步骤404,若优先级低进入步骤405;

步骤404:重新获取消息队列中的触发事件;

步骤405:结束计算。

通常金融风险指标的计量值同时受到多方面的影响,比如市场风险指标会受到外币持有量、外币对人民币的汇率、人民币利率等因素的影响。也就是说,为保证市场风险指标计量的实时性和准确性,交易订单事件、市场行情更新事件等都应该引起市场风险指标的更新。商业银行外汇交易账户通常持有一揽子货币,即多种货币对组合。对于行情更新事件,由于外汇行情报价精度以基点为单位,每次更新报价变动的影响有限。对于交易订单事件,交易金额较大(我国外汇交易中心规定人民币外汇即期撮合的最小交易金额为100万美元),对账户外汇敞口头寸的影响通常大于行情更新的影响,对于实时性的要求也高于行情更新事件。因此,对于市场风险指标,虽然上述两类事件都会触发指标更新,但影响程度和优先级不同,可以将交易订单事件和行情更新事件分别定义为高优先级事件和低优先级事件。

触发不同金融风险指标更新的事件种类和数目不同,并且同一事件对不同金融风险指标的影响程度也不同,因此本发明支持各金融风险指标对事件优先级的不同定义。由此,若遇到并发冲突,则根据当前事件的优先级进行不同处理,若为高优先级事件,则重复计算步骤,直至更新完成,若为低优先级事件,则舍弃本次计算结果,结束计算。

在一些实施例中,所述更新所述账户的风险指标以及所述更新时的序列号,包括:

更新所述账户的风险指标的数据,更新所述更新时的序列号为:(所述触发时的序列号+1)%10000。

在一些实施例中,所述账户的风险指标根据以下公式计算获得:

NAP=|L-S|;

GAP=L+S;

BAP=max[L,S];

其中,NAP为净汇总敞口,GAP为总汇总短敞口,BAP为汇总短敞口,L为多头头寸,S为空头头寸。

例如,以外汇订单事件为例,首先触发累计外汇敞口头寸指标的计算。根据订单报文中的具体交易要素信息计量并更新账户持仓货币头寸,可以采用净汇总敞口(the netaggregate position,简称NAP)、总汇总敞口(the gross aggregate position,简称GAP)和汇总短敞口(shorthand aggregate position,简称BAP)的计量方法计量,再将各外币的总头寸按照汇率折算至参考货币(通常设置为USD或CNY)。记外币多头头寸为L,空头头寸为S,则以上三种计量方法可用下面的公式表示:

NAP=|L-S|

GAP=L+S

BAP=max[L,S]

当然,对于更复杂的风险计量方法,本发明的计量机制同样适用,不限于本申请的外汇订单事件,比如在险价值法(Value at Risk,简称VaR),衡量在一定概率下某种投资组合在某段时间内的最大损失等。不同的风险计量方法,无需改变整体计量机制,因此,本发明对于各种风险指标具有很强的通用性。

在一些实施例中,在更新所述账户的风险指标数据时,使用Lua脚本操作远程字典服务(Redis)中的数据。

也就是说,本发明采用Redis内存数据库进行数据存储,以作为中心化账本的方式在保证数据一致性的前提下提高响应速度。所有操作均通过Lua脚本在Redis里完成,以达到原子操作的目的。Redis将整个脚本作为一个整体执行,中间不会被其他请求插入,因此在脚本运行过程中无需担心出现竞态条件,无需使用事务。将多个请求通过脚本形式一次发送,减少了网络开销,提升了计算性能。

图4是本申请实施例的高并发的金融风险指标处理方法中系统交易的一实例示意图。如图4所述,

步骤501:系统通过消息队列接收到触发事件e,开始计算风险指标。

步骤502:为保证数据读写一致性,防止并发问题,每个需要计量风险指标的账户都在Redis中初始化存储一个序列号为初始化序列号,在更新该账户的风险指标时该序列号会同步更新。开始计算后,首先读取序列号,当前值为n1为为触发时的序列号。

步骤503:根据各风险指标的具体公式计算数值,计算所需的相关数据(如行情、账户持仓等)从Redis中读取。

步骤504:重新读取序列号,当前值为n2为更新时的序列号;

步骤505:更新时的序列号,若相等,则说明本次更新计算过程中,没有其他事件更新过该风险指标数值,接着进入步骤506;

若不相等,进行优先级的判断,进入步骤509;

步骤506:更新风险指标数值;

步骤507:同步更新序列号,n3=(n2+1)%10000;

步骤508:结束计算;

步骤509:判断e是否为优先级事件;

若本事件为高优先级事件,为保证实时性,则跳转至步骤501重新开始,直至结束计算;

若本事件为低优先级事件,则直接舍弃本轮计算结果,继续执行步骤508。

也就是说,对于优先级高低的判断是为了确认风险指标是否被其他事件A更新过,这可能由以下2种情况导致:事件A发生与计算结束均早于本事件,本轮计算所使用的数据信息新于事件A;事件A发生晚于本事件,计算结束早于本事件计算结束时间,那么本轮计算所使用的数据信息旧于事件A,本轮计算的结果已非最新结果,需要根据本事件的优先级决定后续的操作。

由上述实施例可知,通过采用远程字典服务(Redis)进行实时的数据存储,无需担心出现竞态条件,无需使用事务,减少了网络开销,提升了计算性能;并且,使用远程字典服务(Redis)的主从数据库来存储序列号,提升了数据的访问性能并避免数据的单点故障问题。

实施例2

本申请实施例还提供了一种高并发的金融风险指标处理装置,其对应于实施例1所述的分布式架构的债券销售的处理方法,因此该装置的实施可以参见实施例1所述的分布式架构的债券销售的处理方法的实施,重复之处不再赘述。

图5为本申请实施例的高并发的金融风险指标处理装置的一构成图,如图5所示,分布式架构的债券销售的处理装置10包括初始模块11和初始模块12,其中,

初始模块11,其设置账户在远程字典服务(Redis)中的初始化序列号,

处理模块12,其获取消息队列中的触发事件以及读取触发事件发生时的账户在远程字典服务中的序列号作为触发时的序列号;以及

基于触发事件并根据触发时的序列号计算账户的风险指标。

在一些实施例中,处理模块12,在更新账户的风险指标的情况下,获取账户的更新时的序列号;基于触发时的序列号和更新时的序列号,确定账户的风险指标。

在一些实施例中,处理模块12,在触发时的序列号和更新时的序列号相同的情况下,更新账户的风险指标以及更新时的序列号。

在一些实施例中,处理模块12,在触发时的序列号和更新时的序列号不相同的情况下,确定触发事件的优先级;当优先级为高优先级时,重新获取消息队列中的触发事件,当优先级为低优先级时,结束计算。

在一些实施例中,更新账户的风险指标以及更新时的序列号,包括:

更新账户的风险指标的数据,更新更新时的序列号为:(触发时的序列号+1)%10000。

本申请实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并能够在处理器上运行的计算机程序,其中,处理器执行计算机程序时实现高并发的金融风险指标处理方法。

本申请实施例也提供一种计算机可读存储介质,其上存储有计算机程序,其中,计算机程序被处理器执行时实现高并发的金融风险指标处理方法。

本申请实施例也提供一种计算机程序产品,其上存储有计算机程序,其中,计算机程序被处理器执行时实现高并发的金融风险指标处理方法。

虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。

本领域技术人员应理解,本说明书的实施例可提供为方法、装置(系统)或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、装置(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

本申请各个实施例之间相同或相似的部分可以互相参见。在本申请中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。术语“上”、“下”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。本申请并不局限于任何单一的方面,也不局限于任何单一的实施例,也不局限于这些方面和/或实施例的任意组合和/或置换。而且,可以单独使用本申请的每个方面和/或实施例或者与一个或更多其他方面和/或其实施例结合使用。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围,其均应涵盖在本申请的权利要求和说明书的范围当中。

技术分类

06120115926844