CN116719582B - 一种高并发系统的前端限流方法 - Google Patents

一种高并发系统的前端限流方法 Download PDF

Info

Publication number
CN116719582B
CN116719582B CN202310981135.XA CN202310981135A CN116719582B CN 116719582 B CN116719582 B CN 116719582B CN 202310981135 A CN202310981135 A CN 202310981135A CN 116719582 B CN116719582 B CN 116719582B
Authority
CN
China
Prior art keywords
request
configuration
current limiting
current
limiting
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
Application number
CN202310981135.XA
Other languages
English (en)
Other versions
CN116719582A (zh
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.)
Beijing Big Data Center
Original Assignee
Beijing Big Data Center
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 Beijing Big Data Center filed Critical Beijing Big Data Center
Priority to CN202310981135.XA priority Critical patent/CN116719582B/zh
Publication of CN116719582A publication Critical patent/CN116719582A/zh
Application granted granted Critical
Publication of CN116719582B publication Critical patent/CN116719582B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • G06F9/4451User profiles; Roaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

本发明涉及网络技术领域,特别涉及一种高并发系统的前端限流方法,包括如下步骤:S1、根据初始化全局限流配置信息,构建限流配置哈希表;S2、织入限流算法,即拦截业务请求,将限流算法拼接到接口请求逻辑中,保证限流算法与业务请求相融合;S3、运行限流算法:在本地应用程序运行过程中,结合全局限流配置在适当的时机下执行与业务请求相匹配的限流算法。本方法中,业务请求执行预先配置的全局限流配置,最终达到在满足业务应用服务高可用的前提下,尽量减少服务端调用带来的时间延迟,提升了服务的响应速度,降低了后端系统的压力,提高了用户的访问体验。

Description

一种高并发系统的前端限流方法
技术领域
本发明涉及网络技术领域,特别涉及一种高并发系统的前端限流方法。
背景技术
为了保证高并发系统的稳定正常运行,限流是最常用的技术手段,但是限流并不能保证所有场景的稳定性,例如系统最高支持100QPS,如果系统突然接收到1000QPS请求,系统会直接崩溃,导致一个请求都处理不了,但是如果采用有效的限流手段,那么无论接收到QPS值为多少,系统都只处理100QPS的请求,其他请求直接拒绝,虽然有900QPS的请求被系统拒绝了,但是没有引发系统崩溃,系统仍然可以不断地处理后续的请求。限流技术手段主要有网关级限流(Nginx限流)或应用级限流(限流函数):Nginx限流:按照一定的规则如账号、IP、系统调用逻辑等在Nginx层面做限流。限流函数:在应用系统中采用限流算法拒绝多余的资源访问请求,例如当算法被成功地执行过一次,本次成功执行的时间会被记录下来,那么当用户频繁发送请求的时候,这些请求记录的时间距离上次成功执行的时间太短,小于阈值,则这些请求不被执行。
基于Nginx限流:用户的请求首先会通过前端云端服务器分发到后端的应用集群上,Nginx可以用来限制瞬时并发连接数,但修改限流配置需要重启Nginx服务;限流函数以硬编码的方式将数据直接嵌入到程序或其他可执行对象的源代码中,不能在运行期间对外界输入进行回应,灵活性差。
发明内容
本发明的目的在于克服现有技术的缺陷,提供一种高并发系统的前端限流方法。
本发明的技术方案是:
一种高并发系统的前端限流方法,包括如下步骤:
S1、根据初始化全局限流配置信息,构建限流配置哈希表;
S2、织入限流算法,即拦截业务请求,将限流算法拼接到接口请求逻辑中,保证限流算法与业务请求相融合;
S3、运行限流算法:在本地应用程序运行过程中,结合全局限流配置在适当的时机下执行与业务请求相匹配的限流算法。
进一步地,步骤S1具体包括以下步骤:
S11、在云端服务器上设定全局限流配置信息,包括需要限流的所有接口集合API及每一个接口的具体限流配置集合C,API={API1,API2 ,API3,...,APIm ...,APIM},共有M个接口,APIm 是指第m个接口;C表示每一个接口的具体限流配置的集合,C={C1,C2 ,C3,...,Cm ...,CM},Cm 是指第m个接口的具体限流配置;
S12、本地程序初始化时,从云端服务器读取限全局限流配置信息,解析全局限流配置信息读取配置项,构建限流配置哈希表;
S13、周期性地执行上述步骤,从而获取最新的全局限流配置信息。
进一步地,限流配置哈希表是一个二维哈希结构,在第一维哈希表中key是业务请求的请求标识,value是一个指向具体配置项的指针。
进一步地,所述配置项包括以下参数:
缓存时间:缓存记录的时间;
缓存时长:缓存有效期时长,仅当启用缓存限流时有意义;
响应值缓存:针对缓存进行限流,如果在缓存有效期内则不发起请求,使用缓存代替;
请求时长:针对请求时长进行限流,如果请求时长超过配置则中断请求,使用缓存代替;
请求频率:针对请求频率进行限流,如果请求频率超过配置则不发起请求,使用缓存代替;
响应状态码:针对响应状态码进行限流,如果状态码包含于配置则触发缓存限流,使用缓存代替。
进一步地,步骤S3具体包括以下步骤:
S31:用户触发业务请求时,从限流配置哈希表中获取当前接口的限流配置,如果限流配置哈希表没有对应业务请求的匹配项,则服务器响应请求;如果限流配置哈希表有对应业务请求的匹配项,则根据接口的限流配置参数运行限流算法;
S32:根据限流配置参数判断是否开启缓存限流,如果开启缓存限流且缓存有效,缓存有效的含义是指缓存时间没有超过缓存时长配置项,则使用缓存,此处的缓存就是响应值缓存,作为请求的响应值返回;
S33:不符合缓存限流开启条件或缓存无效,则根据限流配置参数判断是否开启请求频率限流,当请求频率超过阈值时,使用缓存作为请求的响应值返回;当请求频率未超过阈值时,云端服务器执行请求;
S34:后端服务接受请求时,根据限流配置参数判断是否开启请求时长限流,当请求时长超过请求时长配置项时,中断执行请求并使用缓存作为请求的响应值返回;当请求时长未超过阈值时,后端服务执行请求并进行响应;
S35:如果请求被后端服务正常响应,则更新缓存;如果请求未被服务正常响应,则根据限流配置参数判断是否开启响应状态码限流,如响应状态码限流未开启,则请求出错,中断执行请求并返回错误响应;如响应状态码限流开启并匹配到相应的状态码,则熔断,熔断后触发缓存限流。
本发明具有以下有益效果:本发明提供的高并发系统的前端限流方法,保证了业务请求执行预先配置的全局限流配置,最终达到在满足业务应用服务高可用的前提下,尽量减少服务端调用带来的时间延迟,提升了服务的响应速度,降低了后端系统的压力,提高了用户的访问体验;通过远程配置文件即可达到前端限流效果,与传统的前端限流相比,通过在服务器上对json文件配置需要限流的接口,以及限流冷却时间来实现不发版限流配置,极大地减轻了系统的发版频率,释放了一线开发人员的人力,提升整个系统的运行效率和加快研发效率。本发明采用主动限流的方式,先拦截所有请求,请求的成功率由配置文件配置,配置文件决定了请求只有百分之多少能到后端,剩下的请求直接前端拦截并响应,大大降低了请求数量和频率。
附图说明
图1是本发明的一种高并发系统的前端限流方法的总体流程图。
图2是本发明的一种高并发系统的前端限流方法的详细流程图。
图3是限流配置哈希表。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。
图1-2示意性示出了本发明一个实施例的高并发系统的限流方法的流程图。参照图1-2,本发明实施例提出的一种高并发系统的前端限流方法及装置,包括如下步骤:
S1、根据初始化全局限流配置信息,构建限流配置哈希表;
S11、在云端服务器上设定全局限流配置信息,包括需要限流的所有接口集合API及每一个接口的具体限流配置集合C,API={API1,API2 ,API3,...,APIm ...,APIM},共有M个接口,APIm 是指第m个接口;C表示每一个接口的具体限流配置的集合,C={C1,C2 ,C3,...,Cm ...,CM},Cm 是指第m个接口的具体限流配置。
S12、本地程序初始化时,从云端服务器读取限全局限流配置信息,解析全局限流配置信息读取配置项,构建限流配置哈希表。
S13、周期性地执行上述步骤,从而获取最新的全局限流配置信息。
限流配置哈希(hash)表是一个二维哈希结构,具体结构见图3的结构示意图,在第一维哈希表中key是业务请求的请求标识,value是一个指向具体配置项的指针,具体的配置项也是一个哈希结构,配置项主要包括:
缓存时间:缓存记录的时间。
缓存时长:缓存有效期时长,仅当启用缓存限流时有意义。
响应值缓存:针对缓存进行限流,如果在缓存有效期内则不发起请求,使用缓存代替。
响应状态码:针对响应状态码进行限流,如果状态码包含于配置则触发缓存限流,使用缓存代替。
请求时长:针对请求时长进行限流,如果请求时长超过配置则中断请求,使用缓存代替。
请求频率:针对请求频率进行限流,如果请求频率超过配置则不发起请求,使用缓存代替。
S2、织入限流算法:织入是将增强添加到目标的具体连接点之上的过程,具体就是拦截业务请求,将限流算法拼接到接口请求逻辑中,保证限流算法与业务请求相融合。
S3、运行限流算法:在本地应用程序运行过程中,结合全局限流配置在适当的时机下执行与业务请求相匹配的限流算法。
S31:用户触发业务请求时,从限流配置哈希表中获取当前接口的限流配置,如果限流配置哈希表没有对应业务请求的匹配项,则服务器响应请求;如果限流配置哈希表有对应业务请求的匹配项,则根据接口的限流配置参数运行限流算法。
S32:根据限流配置参数判断是否开启缓存限流,如果开启缓存限流且缓存有效,缓存有效的含义是指缓存时间没有超过缓存时长配置项,则使用缓存,此处的缓存就是响应值缓存,作为请求的响应值返回。
S33:不符合缓存限流开启条件或缓存无效,则根据限流配置参数判断是否开启请求频率限流,当请求频率超过阈值时,使用缓存作为请求的响应值返回;当请求频率未超过阈值时,云端服务器执行请求。
S34:后端服务接受请求时,根据限流配置参数判断是否开启请求时长限流,当请求时长超过请求时长配置项时,中断执行请求并使用缓存作为请求的响应值返回;当请求时长未超过阈值时,后端服务执行请求并进行响应。
S35:如果请求被后端服务正常响应,则更新缓存;如果请求未被服务正常响应,则根据限流配置参数判断是否开启响应状态码限流,如响应状态码限流未开启,则请求出错,中断执行请求并返回错误响应;如响应状态码限流开启并匹配到相应的状态码,则熔断,熔断后触发缓存限流。
上述方法的一种伪代码实现如下:
本领域的技术人员能够理解,尽管在此的一些实施例包括其他实施例中所包括的某些特征而不是其他特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以任意的组合方式来使用。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (2)

1.一种高并发系统的前端限流方法,其特征在于,包括如下步骤:
S1、根据初始化全局限流配置信息,构建限流配置哈希表;
S2、织入限流算法,即拦截业务请求,将限流算法拼接到接口请求逻辑中,保证限流算法与业务请求相融合;
S3、运行限流算法:在本地应用程序运行过程中,结合全局限流配置在适当的时机下执行与业务请求相匹配的限流算法;
步骤S1具体包括以下步骤:
S11、在云端服务器上设定全局限流配置信息,包括需要限流的所有接口集合API及每一个接口的具体限流配置集合C,API={API1,API2 ,API3,...,APIm ...,APIM},共有M个接口,APIm 是指第m个接口;C表示每一个接口的具体限流配置的集合,C={C1,C2 ,C3,...,Cm ...,CM},Cm 是指第m个接口的具体限流配置;
S12、本地程序初始化时,从云端服务器读取限全局限流配置信息,解析全局限流配置信息读取配置项,构建限流配置哈希表;
S13、周期性地执行上述步骤,从而获取最新的全局限流配置信息;
步骤S3具体包括以下步骤:
S31:用户触发业务请求时,从限流配置哈希表中获取当前接口的限流配置,如果限流配置哈希表没有对应业务请求的匹配项,则服务器响应请求;如果限流配置哈希表有对应业务请求的匹配项,则根据接口的限流配置参数运行限流算法;
S32:根据限流配置参数判断是否开启缓存限流,如果开启缓存限流且缓存有效,缓存有效的含义是指缓存时间没有超过缓存时长配置项,则使用缓存,此处的缓存就是响应值缓存,作为请求的响应值返回;
S33:不符合缓存限流开启条件或缓存无效,则根据限流配置参数判断是否开启请求频率限流,当请求频率超过阈值时,使用缓存作为请求的响应值返回;当请求频率未超过阈值时,云端服务器执行请求;
S34:后端服务接受请求时,根据限流配置参数判断是否开启请求时长限流,当请求时长超过请求时长配置项时,中断执行请求并使用缓存作为请求的响应值返回;当请求时长未超过阈值时,后端服务执行请求并进行响应;
S35:如果请求被后端服务正常响应,则更新缓存;如果请求未被服务正常响应,则根据限流配置参数判断是否开启响应状态码限流,如响应状态码限流未开启,则请求出错,中断执行请求并返回错误响应;如响应状态码限流开启并匹配到相应的状态码,则熔断,熔断后触发缓存限流;
所述配置项包括以下参数:
缓存时间:缓存记录的时间;
缓存时长:缓存有效期时长,仅当启用缓存限流时有意义;
响应值缓存:针对缓存进行限流,如果在缓存有效期内则不发起请求,使用缓存代替;
请求时长:针对请求时长进行限流,如果请求时长超过配置则中断请求,使用缓存代替;
请求频率:针对请求频率进行限流,如果请求频率超过配置则不发起请求,使用缓存代替;
响应状态码:针对响应状态码进行限流,如果状态码包含于配置则触发缓存限流,使用缓存代替。
2.根据权利要求1所述的一种高并发系统的前端限流方法,其特征在于,限流配置哈希表是一个二维哈希结构,在第一维哈希表中key是业务请求的请求标识,value是一个指向具体配置项的指针。
CN202310981135.XA 2023-08-07 2023-08-07 一种高并发系统的前端限流方法 Active CN116719582B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310981135.XA CN116719582B (zh) 2023-08-07 2023-08-07 一种高并发系统的前端限流方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310981135.XA CN116719582B (zh) 2023-08-07 2023-08-07 一种高并发系统的前端限流方法

Publications (2)

Publication Number Publication Date
CN116719582A CN116719582A (zh) 2023-09-08
CN116719582B true CN116719582B (zh) 2023-11-03

Family

ID=87871895

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310981135.XA Active CN116719582B (zh) 2023-08-07 2023-08-07 一种高并发系统的前端限流方法

Country Status (1)

Country Link
CN (1) CN116719582B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116260875A (zh) * 2022-09-09 2023-06-13 中国人民财产保险股份有限公司 服务请求的限流方法、限流装置及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113765980A (zh) * 2020-11-20 2021-12-07 北京沃东天骏信息技术有限公司 一种限流方法、装置、系统、服务器和存储介质
CN115396375A (zh) * 2022-08-17 2022-11-25 支付宝(杭州)信息技术有限公司 一种业务处理方法、装置以及设备
CN115396954A (zh) * 2022-07-06 2022-11-25 科大国创云网科技有限公司 一种分布式多维度限流系统及方法
CN115426219A (zh) * 2022-07-28 2022-12-02 海纳致远数字科技(上海)有限公司 一种api网关自动化处理系统及方法
CN115421922A (zh) * 2022-09-28 2022-12-02 中国农业银行股份有限公司 一种分布式系统的限流方法、装置、设备、介质及产品

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9747340B2 (en) * 2008-06-19 2017-08-29 Microsoft Technology Licensing, Llc Method and system of using a local hosted cache and cryptographic hash functions to reduce network traffic

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113765980A (zh) * 2020-11-20 2021-12-07 北京沃东天骏信息技术有限公司 一种限流方法、装置、系统、服务器和存储介质
CN115396954A (zh) * 2022-07-06 2022-11-25 科大国创云网科技有限公司 一种分布式多维度限流系统及方法
CN115426219A (zh) * 2022-07-28 2022-12-02 海纳致远数字科技(上海)有限公司 一种api网关自动化处理系统及方法
CN115396375A (zh) * 2022-08-17 2022-11-25 支付宝(杭州)信息技术有限公司 一种业务处理方法、装置以及设备
CN115421922A (zh) * 2022-09-28 2022-12-02 中国农业银行股份有限公司 一种分布式系统的限流方法、装置、设备、介质及产品

Also Published As

Publication number Publication date
CN116719582A (zh) 2023-09-08

Similar Documents

Publication Publication Date Title
US11899689B2 (en) Blockchain-based data synchronization method, apparatus, and computer-readable storage medium
US9367554B1 (en) Systems and methods for enhancing performance of a clustered source code management system
CN116719582B (zh) 一种高并发系统的前端限流方法
US7624112B2 (en) Asynchronously storing transaction information from memory to a persistent storage
US10915554B2 (en) Database replication system
WO2021036684A1 (zh) 分布式数据同步方法、装置、设备及可读存储介质
CN110597825B (zh) 基于区块链的数据处理方法、装置及节点设备
WO2020048054A1 (zh) 一种数据存储方法、计算机可读存储介质、服务器及装置
US11899652B2 (en) Method and apparatus for processing information of blockchain network, device and storage medium
WO2021226781A1 (zh) 防火墙规则的更新方法、装置、服务器及存储介质
EP4030314A1 (en) Blockchain-based data processing method, apparatus and device, and readable storage medium
US10048983B2 (en) Systems and methods for enlisting single phase commit resources in a two phase commit transaction
CN110727507B (zh) 一种消息的处理方法、装置、计算机设备和存储介质
CN113342746A (zh) 文件管理系统、文件管理方法、电子设备和存储介质
US11777852B1 (en) System and method for web service atomic transaction (WS-AT) affinity routing
US10268532B2 (en) Application message processing system, method, and application device
CN114036195A (zh) 一种数据请求处理方法、装置、服务器和存储介质
CN111327680B (zh) 认证数据同步方法、装置、系统、计算机设备和存储介质
CN111125653A (zh) 一种基于Nginx和Redis的高并发统一认证的方法
CN107040455B (zh) 一种基于redis的即时消息通讯方法和系统
US20240015037A1 (en) Data processing method and apparatus for consensus network, program product, device, and medium
CN108399078B (zh) 一种消息频率限制方法、系统、服务器和存储介质
CN117793166A (zh) 云网关集群之间的会话同步方法及装置
CN117828201A (zh) 高性能的短链接生成方法
CN115835147A (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