CN108234481B - 一种控制多机分布式访问外部系统的方法及分布式系统 - Google Patents
一种控制多机分布式访问外部系统的方法及分布式系统 Download PDFInfo
- Publication number
- CN108234481B CN108234481B CN201711476757.8A CN201711476757A CN108234481B CN 108234481 B CN108234481 B CN 108234481B CN 201711476757 A CN201711476757 A CN 201711476757A CN 108234481 B CN108234481 B CN 108234481B
- Authority
- CN
- China
- Prior art keywords
- external system
- access
- thread
- upper limit
- qps
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/10—Network architectures or network communication protocols for network security for controlling access to devices or network resources
-
- 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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/2885—Hierarchically arranged intermediate devices, e.g. for hierarchical caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
- H04L67/5681—Pre-fetching or pre-delivering data based on network characteristics
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种控制多机分布式访问外部系统的方法,方法包括:确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程,通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询,唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程,使得调用外部接口的应用收到访问应答,从而顺利访问外部系统。本发明还公开了一种用于访问外部系统的分布式系统。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种控制多机分布式访问外部系统的方法及分布式系统。
背景技术
QPS(Query Per Second,每秒查询率),是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。
大多数的应用接入外部系统时,对外部系统访问的QPS不做控制,于是当QPS访问量超出外部系统的承受能力,即出现访问峰值的时候,会出现以下情况:1,外部系统直接熔断处理访问请求,返回系统繁忙错误码,2,外部系统接受访问请求但没有及时处理完导致http请求超时异常,3.外部系统性能出现崩溃直接宕机。
因此,上述提及的3种情况从而导致了访问外部系统变的不可靠,不稳定,也使其他依赖于访问外部系统的应用的可用性降低的技术问题。
发明内容
本发明提供了一种控制多机分布式访问外部系统的方法及分布式系统,解决了现有的访问外部系统的方式所导致的访问外部系统变的不可靠,不稳定,及使其他依赖于访问外部系统的应用的可用性降低的技术问题。
本发明提供了一种控制多机分布式访问外部系统的方法,包括:
确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程;
通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询;
唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程。
可选地,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程具体包括:
根据QPS上限数量将访问请求队列中的请求取出并按照预置顺序存放至待执行队列;
读取待执行队列中的请求,并通过线程池创建与读取的请求相对应的访问外部系统线程。
可选地,通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询具体包括:
通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至应答消息队列,并通过广播模式进行访问外部系统应答的反馈查询;
或
通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至缓存,并通过按流水号查询方式进行访问外部系统应答的反馈查询。
可选地,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程具体包括:
将QPS上限数量的上限值更新保存至缓存中对应的索引位置作为当前秒可访问数量,对当前秒可访问数量进行减1操作,确定当前秒可访问数量大于等于0,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程;
或
缓存中对应的索引位置的当前秒可访问数量进行清零处理,并对当前秒可访问数量进行加1操作,确定当前秒可访问数量小于等于QPS上限数量的上限值,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程。
可选地,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程之前还包括:
若任务进程未持有分布式锁,则对任务进程进行预置时长休眠处理,使得所述预置时长休眠处理结束后,对外部系统进行访问。
本发明提供的一种用于访问外部系统的分布式系统,包括:
读取创建单元,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程;
转发查询单元,用于通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询;
唤醒单元,用于唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程。
可选地,读取创建单元具体包括:
待执行队列子单元,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量将访问请求队列中的请求取出并按照预置顺序存放至待执行队列;
第一读取创建子单元,用于读取待执行队列中的请求,并通过线程池创建与读取的请求相对应的访问外部系统线程。
可选地,转发查询单元具体包括:
第一转发查询子单元,用于通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至应答消息队列,并通过广播模式进行访问外部系统应答的反馈查询;
或
第二转发查询子单元,用于通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至缓存,并通过按流水号查询方式进行访问外部系统应答的反馈查询。
可选地,读取创建单元具体包括:
第二读取创建子单元,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,将QPS上限数量的上限值更新保存至缓存中对应的索引位置作为当前秒可访问数量,对当前秒可访问数量进行减1操作,确定当前秒可访问数量大于等于0,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程;
或
第三读取创建子单元,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,缓存中对应的索引位置的当前秒可访问数量进行清零处理,并对当前秒可访问数量进行加1操作,确定当前秒可访问数量小于等于QPS上限数量的上限值,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程。
可选地,读取创建单元还包括:
休眠子单元,用于若任务进程未持有分布式锁,则对任务进程进行预置时长休眠处理,使得所述预置时长休眠处理结束后,对外部系统进行访问。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明提供了一种控制多机分布式访问外部系统的方法及分布式系统,其中,控制多机分布式访问外部系统的方法包括:确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程,通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询,唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程,使得调用外部接口的应用收到访问应答,从而顺利访问外部系统。
本发明中,通过分布式锁实现关键程序的单点执行,通过队列机制来实现对外的异步访问和QPS的控制,通过future模式可以帮助实现对外部系统访问行为的异步执行,解决了现有的访问外部系统的方式所导致的访问外部系统变的不可靠,不稳定,及使其他依赖于访问外部系统的应用的可用性降低的技术问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的一种控制多机分布式访问外部系统的方法的一个实施例的流程示意图;
图2为本发明实施例提供的一种控制多机分布式访问外部系统的方法的另一个实施例的流程示意图;
图3为本发明实施例提供的一种用于访问外部系统的分布式系统的一个实施例的结构示意图;
图4(a)、图4(b)、图4(c)为本发明实施例提供的控制多机分布式访问外部系统的方法的应用例示意图。
具体实施方式
本发明提供了一种控制多机分布式访问外部系统的方法及分布式系统,解决了现有的访问外部系统的方式所导致的访问外部系统变的不可靠,不稳定,及使其他依赖于访问外部系统的应用的可用性降低的技术问题。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1,本发明实施例提供的一种控制多机分布式访问外部系统的方法的一个实施例包括:
101、确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程;
本实施例中,当网络环境中一个域的多个机器可以同时去访问外部(外公司)的系统,在访问外系统的过程中,需要确保每秒钟的对外访问总量即总的QPS不超过一个指定的上限,首先需要确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程。
102、通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询;
当确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程之后,需要通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询。
103、唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程。
当通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询之后,需要唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程,使得调用外部接口的应用收到访问应答,从而顺利访问外部系统。
本发明中,通过分布式锁实现关键程序的单点执行,通过队列机制来实现对外的异步访问和QPS的控制,通过future模式可以帮助实现对外部系统访问行为的异步执行,解决了现有的访问外部系统的方式所导致的访问外部系统变的不可靠,不稳定,及使其他依赖于访问外部系统的应用的可用性降低的技术问题。如果当前需要访问外部系统的请求数量超过了外部系统QPS上限数量,那么会对超过QPS数量的访问请求做排队处理来延迟对外访问,如果访问请求的延迟时间过长,本发明会有超时机制来做相应处理。当访问外部系统的机器性能无法满足要求,然后需要做水平扩展提高整体性能的情况下,本发明可以确保水平扩展后,对外访问的总QPS依然可控。本发明可应用于提供稳定的,高可用的访问外部系统的接口服务系统。
请参阅图2,本发明实施例提供的一种控制多机分布式访问外部系统的方法的一个实施例包括:
201、确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量将访问请求队列中的请求取出并按照预置顺序存放至待执行队列;
本实施例中,当网络环境中一个域的多个机器可以同时去访问外部(外公司)的系统,在访问外系统的过程中,需要确保每秒钟的对外访问总量即总的QPS不超过一个指定的上限,首先需要确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量将访问请求队列中的请求取出并按照预置顺序存放至待执行队列。
需要说明的是,若任务进程未持有分布式锁,则对任务进程进行预置时长休眠处理,使得预置时长休眠处理结束后,对外部系统进行访问。该休眠的预置时长可以是10到200毫秒。
必须说明的是,获取分布式锁的进程(应用)(仅1个),负责通过预制队列机制或缓存机制,按照QPS上限来分配当前时段的待执行的访问请求(针对待执行队列)或确定当前时间段待执行请求的数量(针对缓存)。若没有获得分布式锁的进程(应用)(多个),则根据当前时段分配好的可执行请求,去并发的访问外部系统。实现多个机器并发访问外部的情况下,保证QPS可控。根据当前时段分配好的可执行请求的数量,到可执行队列去拿请求,然后将可执行请求数量减1,然后去访问外部系统。
202、读取待执行队列中的请求,并通过线程池创建与读取的请求相对应的访问外部系统线程;
当根据QPS上限数量将访问请求队列中的请求取出并按照预置顺序存放至待执行队列之后,读取待执行队列中的请求,并通过线程池创建与读取的请求相对应的访问外部系统线程。
必须说明的是,本实施例中根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程还可以是如下两种方案实现:
第一种:将QPS上限数量的上限值更新保存至缓存中对应的索引位置作为当前秒可访问数量,对当前秒可访问数量进行减1操作,确定当前秒可访问数量大于等于0,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程;
第二种:缓存中对应的索引位置的当前秒可访问数量进行清零处理,并对当前秒可访问数量进行加1操作,确定当前秒可访问数量小于等于QPS上限数量的上限值,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程。
203、通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至应答消息队列,并通过广播模式进行访问外部系统应答的反馈查询;
当步骤201、202之后,需要通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至应答消息队列,并通过广播模式进行访问外部系统应答的反馈查询。
204、通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至缓存,并通过按流水号查询方式进行访问外部系统应答的反馈查询;
当步骤201、202之后,需要通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至缓存,并通过按流水号查询方式进行访问外部系统应答的反馈查询。
205、唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程。
当步骤203或204之后,需要唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程,使得调用外部接口的应用收到访问应答,从而顺利访问外部系统。
必须说明的是,future模式进行线程阻塞处理的具体方式为本领域技术人员公知的技术。
如图4(a)和(b)本发明采用不同的Future模式实现方式,具体的对图4(a)的应用例进行描述,应用例包括:
具体地,图中工具软件条目下面两个‘分布式锁’图代表一个分布式锁工具,灰线及箭头:表示用当前数据来创建一个任务进程,虚线及箭头:表示通过调用工具软件来处理数据。黑线及箭头:表示正常的程序流程走向。
具体步骤如下:
1.首先配置好能正常使用具有队列功能,缓存功能的软件工具的配置参数,使得程序中可以正常使用相应软件工具;
2.图4(a)中接受访问请求的线程或进程的说明
2.1接受外部系统访问请求
2.2生成唯一请求流水号,流水号全局唯一
2.3发送访问请求到访问请求队列
2.4运用future模式,阻塞当前线程,并且Future模式的底层处理可以接收到对外访问结果的应答,并且收到后结束阻塞底层处理方式为本领域技术人员公知技术,future底层也要有超时机制,如果等待应答超时可以结束线程阻塞
2.5收到应答结束阻塞后,返回应答给请求发送方
3.图4(a)中控制访问外部系统QPS的线程或进程的说明
3.1每秒或者以小于1秒(几十到几百毫秒)的频率开启任务进程
3.2任务进程开始计时
3.3任务进程获取分布式锁
3.4如果任务进程得到锁,那么读取外部系统的QPS上限,然后将访问请求队列中的请求按照QPS上限的数量取出,再顺序的存放到待执行的队列。如果没有持有分布式锁,那么休眠预置时长,10到200毫秒。
3.5从待执行的队列中获取访问请求,然后按照访问请求的数据,创建并启动访问外部系统线程直到待执行的队列为空。
3.6如果当前线程持有锁,那么查看当前线程是否已经运行1秒种,若时间不够,那么休眠1毫秒,直到当前线程已经持有锁1毫秒后,释放锁,并结束。如果当前线程没有锁,那么结束。
4.图4(a)中访问外部系统线程的说明
4.1发送请求到外部系统,然后等待接受外部系统应答,收到外部系统应答后,通知应答给请求对应的接受访问请求的线程。
需要说明的是,图4(a)和图4(b)的实现仅仅是一个为应答消息队列,一个为流水号查找。
实际上可以把图4(a)和图4(b)中的待执行队列拿掉,做如下两种方案替换:
第一种(图4(c)):当每秒定时任务开启后,线程拿到分布式锁并已读取QPS上限的情况下。
1.将QPS上限值保存或更新到缓存的指定索引位置,即当前秒可访问数量
2.先将当前秒可访问数量减1并查询(注两个操作必须原子操作),如果当前秒可访问数量大于等于0,那么从访问请求队列中取出一个请求并创建访问外部系统线程。(此步操作,无论是否线程拿到锁,都会执行)
3.如果访问请求队列没有取出请求或前秒可访问数量小于0,那么判断是否线程持有有分布式锁,如果没有锁就结束线程,如果有锁,继续持有锁直到1秒后释放分布式锁,结束线程。
第二种:当每秒定时任务开启后,线程拿到分布式锁并已读取QPS上限的情况下。
1.将缓存中存放的当前秒可访问数量归零
2.先将当前秒可访问数量加1并查询(注两个操作必须原子操作),如果当前秒可访问数量小于等于QPS上限,那么从访问请求队中取出一个请求并创建访问外部系统线程。(此步操作,无论是否线程拿到锁,都会执行)
3.如果访问请求队列没有取出请求或前秒可访问数量大于QPS上限,那么判断是否线程持有有分布式锁,如果没有锁就结束线程,如果有锁,继续持有锁直到1秒后释放分布式锁,结束线程。
需要说明的是,本发明可以应用于互联网金融领域,金融机构或非金融机构之间交互数据方面使用,例如金融查询系统,系统提供稳定的,高可用的征信数据查询服务,信用数据通过接入接口来获得。因为信用数据报文超过75K,所以银联要求1秒不超过2次查询。四要素校验内部接口服务,接入银行卡校验接口,身份校验接口,实名校验接口,四要素校验内部接口服务要求银行卡校验QPS不超过20,身份校验QPS不超过100,实名校验不超过500。银行卡校验内部接口服务,接入银行卡校验接口,要求银行卡校验QPS不超过30。
本发明中,通过分布式锁实现关键程序的单点执行,通过队列机制来实现对外的异步访问和QPS的控制,通过future模式可以帮助实现对外部系统访问行为的异步执行,解决了现有的访问外部系统的方式所导致的访问外部系统变的不可靠,不稳定,及使其他依赖于访问外部系统的应用的可用性降低的技术问题。如果当前需要访问外部系统的请求数量超过了外部系统QPS上限数量,那么会对超过QPS数量的访问请求做排队处理来延迟对外访问,如果访问请求的延迟时间过长,本发明会有超时机制来做相应处理。当访问外部系统的机器性能无法满足要求,然后需要做水平扩展提高整体性能的情况下,本发明可以确保水平扩展后,对外访问的总QPS依然可控。本发明可应用于提供稳定的,高可用的访问外部系统的接口服务系统。
本发明实施例中,采用future模式机制实现同步返回对方接口应答。通过future模式可以帮助实现对外部系统访问行为的异步执行,从而为技术方案能够控制每秒访问请求的执行创造前提条件。通过队列机制来实现对外的异步访问和QPS的控制队列机制可以确保对外请求执行的先后顺序,同时程序也可以方便的从队列中读取待执行的访问请求来执行相应业务逻辑,通过分布式锁机制来实现关键程序的单点执行,为了防止多机多进程并发的获取对外请求,需要通过分布式锁机制来确保其中单独一个机器来在QPS上限内分配当前时间的待执行请求。
本发明中的所有实施例中提及的名词解释如下:队列,可以提供队列服务相关功能的常用软件。比如,消息队列(rabbitmq等),或者能提供队列功能的缓存(redis等)。
缓存,可以提供nosql缓存服务的常用软件。比如:redis,memcached等。
分布式锁,可以提供分布式锁功能的通用常用软件。比如,zookeeper,redis,memcached等。
应答消息队列,可以提供消息队列服务功能的常用软件。比如,rabbitmq等。
接受访问请求的线程或进程,该线程或进程是技术方案程序的入口,通过该线程来实现对访问请求的异步。该线程负责外部请求在技术方案中的输入和访问结果最终输出。
控制访问外部系统QPS的线程或进程,该线程或进程,通过定时器触发,根据当前秒内需要执行的访问请求,创建对外访问线程,来执行对外访问。
访问外部系统线程,一个对外访问请求,对应一个线程。发送请求数据到外部系统,并将返回的应答通知给相应的‘接受访问请求的线程’。通知方式有两种:1.以请求流水号做为索引号发送应答到缓存2.通过消息队列广播应答消息,消息中包含请求流水号。
请求流水号,全局唯一的流水号,用来标识访问请求在整个程序方案中唯一,可用做存放缓存中的索引号。
Future模式一种常用的异步技术模式,可以阻塞当前线程来等待期望的结果返回。Future模式的底层处理可以有两种方式:1.通过定时轮询缓存的方式来获取结果应答2.通过消息队列通知广播的方式。应用根据收到消息中的流水号来确认领取应答,否则忽略。
访问请求队列,1.配合future模式使用,实现异步执行访问请求,2.实现请求排队功能。
待执行的队列,顺序存放需要当前时间(当前秒)需要执行的访问请求。
缓存,用来存放访问外部系统返回的应答数据,该应答数据以对应请求的流水号作为缓存的查询索引(key)
QPS上限,每秒访问外部系统的最大请求数量,即外部系统可以接受我方的最大QPS,注:如果可在数据库或缓存中配置,每次线程动态读取,那么还可以实时更新QPS上限。
定时任务,每秒开启或者以小于1秒(几十到几百毫秒)的频率开启定时任务任务,任务根据当前秒内需要执行的访问请求,创建对外访问线程,来执行对外访问。
分布式锁,支持多机并发数据安全的工具。该工具可确保当前秒的待执行请求分配程序的单点执行。
外部系统,软件系统对外提供一些公共的数据服务,也同时对调用方要求访问QPS上限。特别是在互联网金融服务领域,因为银行系统提供服务能力有限,以至于被要求访问QPS上限。
请参阅图3,本发明实施例提供的一种用于访问外部系统的分布式系统的一个实施例具体包括:
读取创建单元301,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程;
读取创建单元301具体包括:
待执行队列子单元3011,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量将访问请求队列中的请求取出并按照预置顺序存放至待执行队列;
第一读取创建子单元3012,用于读取待执行队列中的请求,并通过线程池创建与读取的请求相对应的访问外部系统线程。
休眠子单元3015,用于若任务进程未持有分布式锁,则对任务进程进行预置时长休眠处理,使得预置时长休眠处理结束后,对外部系统进行访问。
读取创建单元301具体还包括:
第二读取创建子单元3013,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,将QPS上限数量的上限值更新保存至缓存中对应的索引位置作为当前秒可访问数量,对当前秒可访问数量进行减1操作,确定当前秒可访问数量大于等于0,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程;
或
第三读取创建子单元3014,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,缓存中对应的索引位置的当前秒可访问数量进行清零处理,并对当前秒可访问数量进行加1操作,确定当前秒可访问数量小于等于QPS上限数量的上限值,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程。
转发查询单元302,用于通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询;
转发查询单元302具体包括:
第一转发查询子单元3021,用于通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至应答消息队列,并通过广播模式进行访问外部系统应答的反馈查询;
或
第二转发查询子单元3022,用于通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至缓存,并通过按流水号查询方式进行访问外部系统应答的反馈查询。
唤醒单元303,用于唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程。
本发明中,通过分布式锁实现关键程序的单点执行,通过队列机制来实现对外的异步访问和QPS的控制,通过future模式可以帮助实现对外部系统访问行为的异步执行,解决了现有的访问外部系统的方式所导致的访问外部系统变的不可靠,不稳定,及使其他依赖于访问外部系统的应用的可用性降低的技术问题。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种控制多机分布式访问外部系统的方法,其特征在于,包括:
确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程;
通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询;
唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程。
2.根据权利要求1所述的控制多机分布式访问外部系统的方法,其特征在于,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程具体包括:
根据QPS上限数量将访问请求队列中的请求取出并按照预置顺序存放至待执行队列;
读取待执行队列中的请求,并通过线程池创建与读取的请求相对应的访问外部系统线程。
3.根据权利要求1或2任意一项所述的控制多机分布式访问外部系统的方法,其特征在于,通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询具体包括:
通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至应答消息队列,并通过广播模式进行访问外部系统应答的反馈查询;
或
通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至缓存,并通过按流水号查询方式进行访问外部系统应答的反馈查询。
4.根据权利要求3所述的控制多机分布式访问外部系统的方法,其特征在于,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程具体包括:
将QPS上限数量的上限值更新保存至缓存中对应的索引位置作为当前秒可访问数量,对当前秒可访问数量进行减1操作,确定当前秒可访问数量大于等于0,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程;
或
缓存中对应的索引位置的当前秒可访问数量进行清零处理,并对当前秒可访问数量进行加1操作,确定当前秒可访问数量小于等于QPS上限数量的上限值,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程。
5.根据权利要求1所述的控制多机分布式访问外部系统的方法,其特征在于,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程之前还包括:
若任务进程未持有分布式锁,则对任务进程进行预置时长休眠处理,使得所述预置时长休眠处理结束后,对外部系统进行访问。
6.一种用于访问外部系统的分布式系统,其特征在于,包括:
读取创建单元,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量按照预置队列机制或预置缓存机制通过线程池创建访问外部系统线程;
转发查询单元,用于通过访问外部系统线程将访问外部系统应答转发至对应的应答消息队列或缓存,并进行访问外部系统应答的反馈查询;
唤醒单元,用于唤醒预先通过future模式进行线程阻塞处理的访问外部系统应答的反馈对应的接受请求线程。
7.根据权利要求6所述的用于访问外部系统的分布式系统,其特征在于,读取创建单元具体包括:
待执行队列子单元,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,根据QPS上限数量将访问请求队列中的请求取出并按照预置顺序存放至待执行队列;
第一读取创建子单元,用于读取待执行队列中的请求,并通过线程池创建与读取的请求相对应的访问外部系统线程。
8.根据权利要求6或7所述的用于访问外部系统的分布式系统,其特征在于,转发查询单元具体包括:
第一转发查询子单元,用于通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至应答消息队列,并通过广播模式进行访问外部系统应答的反馈查询;
或
第二转发查询子单元,用于通过访问外部系统线程将包含有与请求相对应的流水号的访问外部系统应答转发至缓存,并通过按流水号查询方式进行访问外部系统应答的反馈查询。
9.根据权利要求8所述的用于访问外部系统的分布式系统,其特征在于,读取创建单元具体包括:
第二读取创建子单元,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,将QPS上限数量的上限值更新保存至缓存中对应的索引位置作为当前秒可访问数量,对当前秒可访问数量进行减1操作,确定当前秒可访问数量大于等于0,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程;
或
第三读取创建子单元,用于确定任务进程获取分布式锁,并读取外部系统的QPS上限配置确定QPS上限数量,缓存中对应的索引位置的当前秒可访问数量进行清零处理,并对当前秒可访问数量进行加1操作,确定当前秒可访问数量小于等于QPS上限数量的上限值,则从访问请求队列中取出一个请求并通过线程池创建与读取的请求相对应的访问外部系统线程。
10.根据权利要求6所述的用于访问外部系统的分布式系统,其特征在于,读取创建单元还包括:
休眠子单元,用于若任务进程未持有分布式锁,则对任务进程进行预置时长休眠处理,使得所述预置时长休眠处理结束后,对外部系统进行访问。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711476757.8A CN108234481B (zh) | 2017-12-29 | 2017-12-29 | 一种控制多机分布式访问外部系统的方法及分布式系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711476757.8A CN108234481B (zh) | 2017-12-29 | 2017-12-29 | 一种控制多机分布式访问外部系统的方法及分布式系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108234481A CN108234481A (zh) | 2018-06-29 |
CN108234481B true CN108234481B (zh) | 2020-10-30 |
Family
ID=62646116
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711476757.8A Active CN108234481B (zh) | 2017-12-29 | 2017-12-29 | 一种控制多机分布式访问外部系统的方法及分布式系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108234481B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101159747A (zh) * | 2007-11-12 | 2008-04-09 | 中兴通讯股份有限公司 | 一种基于tcp并发多链路的通信系统及其方法 |
CN101753608A (zh) * | 2008-12-09 | 2010-06-23 | 中国移动通信集团公司 | 分布式系统的调度方法及系统 |
CN102868573A (zh) * | 2012-09-12 | 2013-01-09 | 北京航空航天大学 | Web服务负载云测试方法和装置 |
CN107193673A (zh) * | 2017-06-28 | 2017-09-22 | 锐捷网络股份有限公司 | 一种报文处理方法及设备 |
CN107256235A (zh) * | 2017-05-19 | 2017-10-17 | 武汉璞华大数据技术有限公司 | 一种缓存系统热点数据访问方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9971689B2 (en) * | 2016-06-06 | 2018-05-15 | International Business Machines Corporation | Invoking input/output (I/O) threads and demote threads on processors to demote tracks from a cache |
-
2017
- 2017-12-29 CN CN201711476757.8A patent/CN108234481B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101159747A (zh) * | 2007-11-12 | 2008-04-09 | 中兴通讯股份有限公司 | 一种基于tcp并发多链路的通信系统及其方法 |
CN101753608A (zh) * | 2008-12-09 | 2010-06-23 | 中国移动通信集团公司 | 分布式系统的调度方法及系统 |
CN102868573A (zh) * | 2012-09-12 | 2013-01-09 | 北京航空航天大学 | Web服务负载云测试方法和装置 |
CN107256235A (zh) * | 2017-05-19 | 2017-10-17 | 武汉璞华大数据技术有限公司 | 一种缓存系统热点数据访问方法 |
CN107193673A (zh) * | 2017-06-28 | 2017-09-22 | 锐捷网络股份有限公司 | 一种报文处理方法及设备 |
Non-Patent Citations (1)
Title |
---|
分布式锁的三种实现的对比;一只小哈;《简书》;20170203;1-8 * |
Also Published As
Publication number | Publication date |
---|---|
CN108234481A (zh) | 2018-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108388479B (zh) | 延迟消息推送方法、装置、计算机设备及存储介质 | |
JP2021503643A (ja) | ブロックチェーン上の大量トランザクション性能を最適化するための方法、装置、コンピュータ・プログラムおよびコンピュータ・プログラムを記録したコンピュータ可読記憶媒体 | |
CN107395665A (zh) | 一种区块链业务受理及业务共识方法及装置 | |
CN101196912A (zh) | 用于应用程序状态同步的方法和设备 | |
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
US10970311B2 (en) | Scalable snapshot isolation on non-transactional NoSQL | |
CN109743411B (zh) | 一种在分布式环境下动态调度ip代理池的方法、装置及存储介质 | |
CN107038645B (zh) | 业务处理方法、装置及系统和服务器 | |
EP2416246B1 (en) | Extensibility of business process and application logic | |
CA2843284C (en) | Computer system, computer-implemented method and computer program product for sequencing incoming messages for processing at an application | |
CN107026879A (zh) | 一种数据缓存方法及后台应用系统 | |
CN110599277A (zh) | 一种库存扣减方法和装置 | |
CN111026758B (zh) | 电子券发放方法和装置 | |
CN108520401B (zh) | 用户名单管理方法、装置、平台及存储介质 | |
CN113112344B (zh) | 业务处理方法、设备、存储介质及计算机程序产品 | |
CN108234481B (zh) | 一种控制多机分布式访问外部系统的方法及分布式系统 | |
CN108932158A (zh) | 一种元数据服务器事务处理的方法、装置及mds服务器 | |
CN112884181A (zh) | 额度信息处理方法和装置 | |
CN111367694A (zh) | 事件处理方法、服务器及计算机存储介质 | |
US20100311451A1 (en) | Data processing system | |
US20150120607A1 (en) | System and method for customer event email consolidation and delivery | |
US20220083923A1 (en) | Reservation of lock box facilities | |
CN113360570A (zh) | 一种高并发系统库存模块实现方法 | |
JP6815922B2 (ja) | 業務連携システムおよび業務連携方法 | |
CN110311789B (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 |