CN109769019A - 一种一致性负载均衡方法及装置 - Google Patents
一种一致性负载均衡方法及装置 Download PDFInfo
- Publication number
- CN109769019A CN109769019A CN201811653777.2A CN201811653777A CN109769019A CN 109769019 A CN109769019 A CN 109769019A CN 201811653777 A CN201811653777 A CN 201811653777A CN 109769019 A CN109769019 A CN 109769019A
- Authority
- CN
- China
- Prior art keywords
- node
- client
- value
- modulus
- service
- 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.)
- Granted
Links
Landscapes
- Computer And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种一致性负载均衡方法及装置,该方法包括:计算N个节点的哈希值,并依据所述哈希值将N个所述节点配置到对应的服务节点环,N为正整数;接收客户端的请求数据,并依据所述请求数据提取键值;将所述键值对N取模以得到第一模值;依据所述第一模值获取所述服务节点环中符合预设条件的节点,并将所述节点的属性信息返回至所述客户端。本发明的有益效果是,从客户信息处直接取模,避免了每次请求都需要计算哈希值,解决哈希一致性负载均衡中多次使用哈希算法对CPU造成高消耗的问题。
Description
技术领域
本发明涉及一致性负载均衡技术领域,尤其涉及一种一致性负载均衡方法及装置。
背景技术
目前IT服务架构大都采用微服务化之后,系统分布式部署。通过微服务化实现服务的专业化和精细分工,分布式部署提升服务的可靠性和可用性。分布式部署后采用负载均衡解决并发流量和流量重定向的问题。负载均衡是分布式架构的重点,负载均衡机制将决定着整个服务集群的性能与稳定。其中,微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。分布式是指一个系统拆成n个子工程,每一个子工程配置服务器,独立运作。但是需要相互协作才能运转整个系统流程。每一个节点都可以配置集群。
涉及负载均衡的现有技术主要包括TCP网络通信、多线程数据异步处理、Linuxepoll I/O多路复用技术等技术。当前大部分负载均衡采用组件实现,主要与集群中的各个服务器进行通讯。负载均衡组件主要提供以下基础功能:维护服务器的IP、DNS名称等信息;根据特定的负载均衡策略在服务器列表中循环。
负载均衡的效果取决于负载均衡策略的设计和实现,负载均衡策略是一个逻辑组件,这些逻辑将会决定,从服务器列表中返回哪个服务器实例。
请求数据分发按如下的方式在系统中进行:
1)客户端需要向服务端发起TCP的数据请求,调用负载均衡组件的API获取服务端信息;
2)负载均衡组件根据请求类型选定均衡策略;
3)均衡策略根据规则从服务列表中选定在线的终端服务的服务信息并返回;
4)服务端检测服务的信息,如果有TCP连接,直接发送请求数据;否则使用服务信息和终端服务建立TCP连接后发送请求数据。
采用负载均衡后,对于包含会话的业务,需要会话保持。即是指在负载均衡器上有一种机制,在作负载均衡的同时,还保证同一用户相关连的访问请求会被分配到同一台服务器上。
现有的一致性负载均衡策略主要是一致性哈希的负载均衡策略;它是根据哈希一致性的原理,相同用户参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。其中,一致性哈希算法在1997年由麻省理工学院提出,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。
假设有8个节点,组成A-H的8个虚拟节点,A-H哈希值分别是递增的,当有一个请求进来,通过计算参数的哈希值,比如该值刚好是1的位置,那么选中比1的值大的最小的那个实例,则结果该请求选中C虚拟节点;假如请求的参数的哈希值是在2的位置,那么找不到比2的值大的最小的实例,则选中所有实例中最小的一个,也就是A。
但是,由于一致性哈希是要对用户参数做一致性哈希算法计算哈希值,每次调用一次,会比较占CPU资源。
发明内容
本发明的目的在于提供一种一致性负载均衡方法及装置,解决现有技术中一致性哈希是要对用户参数做一致性哈希算法计算哈希值,每次调用一次,会比较占CPU资源的问题。
本发明的技术方案实现如下:
一方面,本发明提供一种一致性负载均衡方法,包括:
计算N个节点的哈希值,并依据所述哈希值将N个所述节点配置到对应的服务节点环,N为正整数;
接收客户端的请求数据,并依据所述请求数据提取键值;
将所述键值对N取模以得到第一模值;
依据所述第一模值获取所述服务节点环中符合预设条件的节点,并将所述节点的属性信息返回至所述客户端。
在本发明所述的一致性负载均衡方法中,所述计算N个节点的哈希值,并依据所述哈希值将N个所述节点配置到对应的服务节点环,N为正整数中:
N=2x,0≤x<32。
在本发明所述的一致性负载均衡方法中,所述接收客户端的请求数据,并依据所述请求数据提取键值,包括:
接收客户端的第一请求数据以向节点填入服务信息,并依据所述第一请求数据提取键值;
接收客户端的第二请求数据以查找节点的可用服务,并依据所述第二请求数据提取用户参数。
在本发明所述的一致性负载均衡方法中,所述将所述键值对N取模以得到第一模值,包括:
将所述键值对N取模以得到第一模值;
依据所述用户参数提取内存中的多位字符,将所述多位字符转换为十进制数值,将所述十进制数值对N取模以得到第二模值。
在本发明所述的一致性负载均衡方法中,所述依据所述第一模值获取所述服务节点环中符合预设条件的节点,并将所述节点的属性信息返回至所述客户端,包括:
依据所述第一模值获取所述服务节点环中的第R个节点,判断所述第R个节点是否为空,若是,则将所述第R个节点的属性信息返回至所述客户端,并于所述第R个节点中填入服务信息;若否,则从所述第R个节点往后查找节点,当查找到空的节点时,将所述空的节点的属性信息返回至所述客户端,并于所述空的节点中填入服务信息;其中,R为第一模值;
依据所述第二模值获取所述服务节点环中的第T个节点,判断所述第T个节点是否有可用服务,若是,则将所述第T个节点的属性信息返回至所述客户端,并从所述第T个节点中获取所述可用服务;若否,则从所述第T个节点往后查找节点,当查找到具有可用服务的节点时,将所述具有可用服务的节点的属性信息返回至所述客户端,并于所述具有可用服务的节点中获取所述可用服务;其中,T为第二模值。
另一方面,提供一种一致性负载均衡装置,其中存储有多条指令,所述指令适于由处理器加载并执行,包括:
计算N个节点的哈希值,并依据所述哈希值将N个所述节点配置到对应的服务节点环,N为正整数;
接收客户端的请求数据,并依据所述请求数据提取键值;
将所述键值对N取模以得到第一模值;
依据所述第一模值获取所述服务节点环中符合预设条件的节点,并将所述节点的属性信息返回至所述客户端。
在本发明所述的一致性负载均衡装置中,所述计算N个节点的哈希值,并依据所述哈希值将N个所述节点配置到对应的服务节点环,N为正整数中:
N=2x,0≤x<32。
在本发明所述的一致性负载均衡装置中,所述接收客户端的请求数据,并依据所述请求数据提取键值,包括:
接收客户端的第一请求数据以向节点填入服务信息,并依据所述第一请求数据提取键值;
接收客户端的第二请求数据以查找节点的可用服务,并依据所述第二请求数据提取用户参数。
在本发明所述的一致性负载均衡装置中,所述将所述键值对N取模以得到第一模值,包括:
将所述键值对N取模以得到第一模值;
依据所述用户参数提取内存中的多位字符,将所述多位字符转换为十进制数值,将所述十进制数值对N取模以得到第二模值。
在本发明所述的一致性负载均衡装置中,所述依据所述第一模值获取所述服务节点环中符合预设条件的节点,并将所述节点的属性信息返回至所述客户端,包括:
依据所述第一模值获取所述服务节点环中的第R个节点,判断所述第R个节点是否为空,若是,则将所述第R个节点的属性信息返回至所述客户端,并于所述第R个节点中填入服务信息;若否,则从所述第R个节点往后查找节点,当查找到空的节点时,将所述空的节点的属性信息返回至所述客户端,并于所述空的节点中填入服务信息;其中,R为第一模值;
依据所述第二模值获取所述服务节点环中的第T个节点,判断所述第T个节点是否有可用服务,若是,则将所述第T个节点的属性信息返回至所述客户端,并从所述第T个节点中获取所述可用服务;若否,则从所述第T个节点往后查找节点,当查找到具有可用服务的节点时,将所述具有可用服务的节点的属性信息返回至所述客户端,并于所述具有可用服务的节点中获取所述可用服务;其中,T为第二模值。
因此,本发明的有益效果是,从客户信息处直接取模,避免了每次请求都需要计算哈希值,解决哈希一致性负载均衡中多次使用哈希算法对CPU造成高消耗的问题。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1为本发明一实施例提供的一种一致性负载均衡方法的流程图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,以下将对照附图详细说明本发明的具体实施方式。应当理解,以下说明仅为本发明实施例的具体阐述,不应以此限制本发明的保护范围。
参见图1,图1为本发明一实施例提供的一种一致性负载均衡方法的流程图,该一致性负载均衡方法包括步骤S1-S4:
S1、计算N个节点的哈希值,并依据所述哈希值将N个所述节点配置到对应的服务节点环,N为正整数;其中,N=2x,0≤x<32。优选的,N为128。例如:求出服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。
S2、接收客户端的请求数据,并依据所述请求数据提取键值;步骤S2包括步骤S21-S22:
S21、接收客户端的第一请求数据以向节点填入服务信息,并依据所述第一请求数据提取键值;键值(key)是windows中注册表中的概念。键值位于注册表结构链末端,和文件系统的文件类似,包含当前计算机及应用程序执行时使用的实际配置信息和数据。
S22、接收客户端的第二请求数据以查找节点的可用服务,并依据所述第二请求数据提取用户参数。
S3、将所述键值对N取模以得到第一模值;步骤S3包括步骤S31-S32:
S31、将所述键值对N取模以得到第一模值;其中,取模运算是指:
对于整型数a,b来说:
1.求整数商:c=a/b;
2.计算模或者余数:r=a-c*b。
S32、依据所述用户参数提取内存中的多位字符,将所述多位字符转换为十进制数值,将所述十进制数值对N取模以得到第二模值。
S4、依据所述第一模值获取所述服务节点环中符合预设条件的节点,并将所述节点的属性信息返回至所述客户端。步骤S4包括步骤S41-S42:
S41、依据所述第一模值获取所述服务节点环中的第R个节点,判断所述第R个节点是否为空,若是,则将所述第R个节点的属性信息返回至所述客户端,并于所述第R个节点中填入服务信息;若否,则从所述第R个节点往后查找节点,当查找到空的节点时,将所述空的节点的属性信息返回至所述客户端,并于所述空的节点中填入服务信息;其中,R为第一模值;即如果服务节点环R已经有服务,往后找到一个为空的环点填入服务信息,否则直接填入服务信息,例如:从第R个节点的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台服务器上。
S42、依据所述第二模值获取所述服务节点环中的第T个节点,判断所述第T个节点是否有可用服务,若是,则将所述第T个节点的属性信息返回至所述客户端,并从所述第T个节点中获取所述可用服务;若否,则从所述第T个节点往后查找节点,当查找到具有可用服务的节点时,将所述具有可用服务的节点的属性信息返回至所述客户端,并于所述具有可用服务的节点中获取所述可用服务;其中,T为第二模值。例如:查找服务时,通过提取用户参数的8个字符当作长整数对N取模得到结果T,服务节点环T有可用服务,返回T服务,否则从第T个节点往下找最近的可用服务,并返回。
此外,本发明还提供一种一致性负载均衡装置(即存储介质),其中存储有多条指令,所述指令适于由处理器加载并执行,从而实现上述方法。
综上所述,虽然本发明已以优选实施例揭露如上,但上述优选实施例并非用以限制本发明,本领域的普通技术人员,在不脱离本发明的精神和范围内,均可作各种更动与润饰,因此本发明的保护范围以权利要求界定的范围为准。
Claims (10)
1.一种一致性负载均衡方法,其特征在于,包括:
计算N个节点的哈希值,并依据所述哈希值将N个所述节点配置到对应的服务节点环,N为正整数;
接收客户端的请求数据,并依据所述请求数据提取键值;
将所述键值对N取模以得到第一模值;
依据所述第一模值获取所述服务节点环中符合预设条件的节点,并将所述节点的属性信息返回至所述客户端。
2.根据权利要求1所述的一致性负载均衡方法,其特征在于,所述计算N个节点的哈希值,并依据所述哈希值将N个所述节点配置到对应的服务节点环,N为正整数中:
N=2x,0≤x<32。
3.根据权利要求1所述的一致性负载均衡方法,其特征在于,所述接收客户端的请求数据,并依据所述请求数据提取键值,包括:
接收客户端的第一请求数据以向节点填入服务信息,并依据所述第一请求数据提取键值;
接收客户端的第二请求数据以查找节点的可用服务,并依据所述第二请求数据提取用户参数。
4.根据权利要求3所述的一致性负载均衡方法,其特征在于,所述将所述键值对N取模以得到第一模值,包括:
将所述键值对N取模以得到第一模值;
依据所述用户参数提取内存中的多位字符,将所述多位字符转换为十进制数值,将所述十进制数值对N取模以得到第二模值。
5.根据权利要求4所述的一致性负载均衡方法,其特征在于,所述依据所述第一模值获取所述服务节点环中符合预设条件的节点,并将所述节点的属性信息返回至所述客户端,包括:
依据所述第一模值获取所述服务节点环中的第R个节点,判断所述第R个节点是否为空,若是,则将所述第R个节点的属性信息返回至所述客户端,并于所述第R个节点中填入服务信息;若否,则从所述第R个节点往后查找节点,当查找到空的节点时,将所述空的节点的属性信息返回至所述客户端,并于所述空的节点中填入服务信息;其中,R为第一模值;
依据所述第二模值获取所述服务节点环中的第T个节点,判断所述第T个节点是否有可用服务,若是,则将所述第T个节点的属性信息返回至所述客户端,并从所述第T个节点中获取所述可用服务;若否,则从所述第T个节点往后查找节点,当查找到具有可用服务的节点时,将所述具有可用服务的节点的属性信息返回至所述客户端,并于所述具有可用服务的节点中获取所述可用服务;其中,T为第二模值。
6.一种一致性负载均衡装置,其中存储有多条指令,所述指令适于由处理器加载并执行,其特征在于,包括:
计算N个节点的哈希值,并依据所述哈希值将N个所述节点配置到对应的服务节点环,N为正整数;
接收客户端的请求数据,并依据所述请求数据提取键值;
将所述键值对N取模以得到第一模值;
依据所述第一模值获取所述服务节点环中符合预设条件的节点,并将所述节点的属性信息返回至所述客户端。
7.根据权利要求6所述的一致性负载均衡装置,其特征在于,所述计算N个节点的哈希值,并依据所述哈希值将N个所述节点配置到对应的服务节点环,N为正整数中:
N=2x,0≤x<32。
8.根据权利要求6所述的一致性负载均衡装置,其特征在于,所述接收客户端的请求数据,并依据所述请求数据提取键值,包括:
接收客户端的第一请求数据以向节点填入服务信息,并依据所述第一请求数据提取键值;
接收客户端的第二请求数据以查找节点的可用服务,并依据所述第二请求数据提取用户参数。
9.根据权利要求8所述的一致性负载均衡装置,其特征在于,所述将所述键值对N取模以得到第一模值,包括:
将所述键值对N取模以得到第一模值;
依据所述用户参数提取内存中的多位字符,将所述多位字符转换为十进制数值,将所述十进制数值对N取模以得到第二模值。
10.根据权利要求9所述的一致性负载均衡装置,其特征在于,所述依据所述第一模值获取所述服务节点环中符合预设条件的节点,并将所述节点的属性信息返回至所述客户端,包括:
依据所述第一模值获取所述服务节点环中的第R个节点,判断所述第R个节点是否为空,若是,则将所述第R个节点的属性信息返回至所述客户端,并于所述第R个节点中填入服务信息;若否,则从所述第R个节点往后查找节点,当查找到空的节点时,将所述空的节点的属性信息返回至所述客户端,并于所述空的节点中填入服务信息;其中,R为第一模值;
依据所述第二模值获取所述服务节点环中的第T个节点,判断所述第T个节点是否有可用服务,若是,则将所述第T个节点的属性信息返回至所述客户端,并从所述第T个节点中获取所述可用服务;若否,则从所述第T个节点往后查找节点,当查找到具有可用服务的节点时,将所述具有可用服务的节点的属性信息返回至所述客户端,并于所述具有可用服务的节点中获取所述可用服务;其中,T为第二模值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811653777.2A CN109769019B (zh) | 2018-12-29 | 2018-12-29 | 一种一致性负载均衡方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811653777.2A CN109769019B (zh) | 2018-12-29 | 2018-12-29 | 一种一致性负载均衡方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109769019A true CN109769019A (zh) | 2019-05-17 |
CN109769019B CN109769019B (zh) | 2021-11-09 |
Family
ID=66453151
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811653777.2A Active CN109769019B (zh) | 2018-12-29 | 2018-12-29 | 一种一致性负载均衡方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109769019B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114785737A (zh) * | 2022-04-11 | 2022-07-22 | 阿里巴巴(中国)有限公司 | 报文处理方法、网关设备、服务器及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130091241A1 (en) * | 2011-10-11 | 2013-04-11 | David Goetz | Distributed Rate Limiting Of Handling Requests |
CN104580393A (zh) * | 2014-12-18 | 2015-04-29 | 北京蓝汛通信技术有限责任公司 | 用于服务器集群系统的扩容方法、装置及服务器集群系统 |
CN104683422A (zh) * | 2013-12-03 | 2015-06-03 | 腾讯科技(深圳)有限公司 | 数据传输方法及装置 |
CN102932434B (zh) * | 2012-10-17 | 2015-10-14 | 北京奇虎科技有限公司 | 一种用于对服务器进行负载均衡的方法及装置 |
CN106254240A (zh) * | 2016-09-18 | 2016-12-21 | 腾讯科技(深圳)有限公司 | 一种数据处理方法和路由层设备以及系统 |
CN106648891A (zh) * | 2016-12-09 | 2017-05-10 | 中国联合网络通信集团有限公司 | 基于MapReduce模型的任务执行方法和装置 |
CN107197035A (zh) * | 2017-06-21 | 2017-09-22 | 中国民航大学 | 一种基于一致性哈希算法的亲和性动态负载均衡方法 |
CN108199909A (zh) * | 2018-03-30 | 2018-06-22 | 浙江网新恒天软件有限公司 | 一种基于一致性哈希的高可用负载均衡系统 |
-
2018
- 2018-12-29 CN CN201811653777.2A patent/CN109769019B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130091241A1 (en) * | 2011-10-11 | 2013-04-11 | David Goetz | Distributed Rate Limiting Of Handling Requests |
CN102932434B (zh) * | 2012-10-17 | 2015-10-14 | 北京奇虎科技有限公司 | 一种用于对服务器进行负载均衡的方法及装置 |
CN104683422A (zh) * | 2013-12-03 | 2015-06-03 | 腾讯科技(深圳)有限公司 | 数据传输方法及装置 |
US20160150001A1 (en) * | 2013-12-03 | 2016-05-26 | Tencent Technology (Shenzhen) Company Limited | Method and Apparatus for Data Transmission |
CN104580393A (zh) * | 2014-12-18 | 2015-04-29 | 北京蓝汛通信技术有限责任公司 | 用于服务器集群系统的扩容方法、装置及服务器集群系统 |
CN106254240A (zh) * | 2016-09-18 | 2016-12-21 | 腾讯科技(深圳)有限公司 | 一种数据处理方法和路由层设备以及系统 |
CN106648891A (zh) * | 2016-12-09 | 2017-05-10 | 中国联合网络通信集团有限公司 | 基于MapReduce模型的任务执行方法和装置 |
CN107197035A (zh) * | 2017-06-21 | 2017-09-22 | 中国民航大学 | 一种基于一致性哈希算法的亲和性动态负载均衡方法 |
CN108199909A (zh) * | 2018-03-30 | 2018-06-22 | 浙江网新恒天软件有限公司 | 一种基于一致性哈希的高可用负载均衡系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114785737A (zh) * | 2022-04-11 | 2022-07-22 | 阿里巴巴(中国)有限公司 | 报文处理方法、网关设备、服务器及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109769019B (zh) | 2021-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8208403B2 (en) | Defining an end-to-end path for a network service | |
CN110166570B (zh) | 业务会话管理方法、装置、电子设备 | |
US10091098B1 (en) | Distributed affinity tracking for network connections | |
Guidi et al. | Data persistence in decentralized social applications: The ipfs approach | |
CN109032803B (zh) | 数据处理方法和装置、客户端 | |
CN108933829A (zh) | 一种负载均衡方法及装置 | |
US20140280818A1 (en) | Distributed data center technology | |
Pérez et al. | Performance characterization of the servioticy api: an iot-as-a-service data management platform | |
US20190303869A1 (en) | Search prioritization interfaces for communication platform users | |
CN112468589A (zh) | 数据分发方法、装置、计算机设备和存储介质 | |
CN112653632A (zh) | 一种流量控制实现方法和装置 | |
CN109769019A (zh) | 一种一致性负载均衡方法及装置 | |
CN111400301A (zh) | 一种数据查询方法、装置及设备 | |
CN104852964A (zh) | 一种多功能服务器调度方法 | |
CN110581784A (zh) | 一种节点健康检查方法、装置及设备 | |
CN116743836A (zh) | 长连接通信链路建立方法及其装置、电子设备及存储介质 | |
CN116319806A (zh) | 服务部署方法、装置、设备、存储介质及计算机程序产品 | |
Singh et al. | Load balancing of distributed servers in distributed file systems | |
CN113783919B (zh) | 访问请求分流方法、系统、设备及存储介质 | |
US9479599B2 (en) | Reroute of a web service in a web based application | |
US20110307619A1 (en) | Relay processing method and relay apparatus | |
CN109032804B (zh) | 数据处理方法和装置、服务器 | |
EP2930883A1 (en) | Method for the implementation of network functions virtualization of a telecommunications network providing communication services to subscribers, telecommunications network, program and computer program product | |
EP2993866A1 (en) | Method for distribution of service requests | |
CN108920277B (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 |