本发明涉及对象存储系统,具体的说是一种在对象存储系统中实现网络资源限流的方法。
背景技术:
1、对象存储系统中,随着用户的不断增多,同一时刻向对象存储系统上传下载的对象数量越来越多,对象存储服务所面对的负载压力随之越来越大,这对对象存储服务能提供的iops和带宽能力形成了较大的挑战。在应对海量文件上传下载的过程中,为了维系整个系统的性能和运行稳定,需要在带宽、请求等方面进行相关限制设置,避免出现短时大量请求引起的产品不可用或特定用户短时大量请求或占用带宽引起的资源抢占情况发生。
2、此外,除了应对这种整体的负载压力挑战,对象存储系统还应该考虑到如何能更细粒度地控制所能提供的带宽和iops网络资源限制,例如,对象存储系统中有用户、桶等数据实体的概念,不同的用户需要的网络资源能力可能不尽相同,不同的桶也同样如此。细粒度地控制某一个数据实体所能提供的网络资源能力,能够更大程度地提升对象存储服务的稳定性和灵活性。
技术实现思路
1、本发明针对目前技术发展的需求和不足之处,提供一种在对象存储系统中实现网络资源限流的方法,用于提升对象存储服务的稳定性和灵活性。
2、本发明的一种在对象存储系统中实现网络资源限流的方法,解决上述技术问题采用的技术方案如下:
3、一种在对象存储系统中实现网络资源限流的方法,其包括如下步骤:
4、s1、通过命令行工具或管理员接口,配置全局或本地的限流规则;
5、s2、在对象存储系统服务端部署限流逻辑程序;当有请求到达对象存储系统服务端时,对象存储系统服务端从集群中读取限流规则,并将读取的限流规则临时存储在内存中;
6、s3、判断已设置的限流规则是否被激活,如果限流规则处于激活状态,则继续执行后续步骤,否则,不进行任何限流逻辑判断;
7、s4、从对象存储集群中检索与限流规则相对应的令牌桶信息,并存储在内存中待用;
8、s5、根据限流信息和对应的令牌桶信息,更新对应操作类型的可用令牌数量,每一次操作都会消耗掉预设数目的令牌,当令牌用完时则不能进行该操作,此时达到了限流条件;
9、s6、如果达到了限流条件,当前的请求将被终止,并且客户端会收到提示,说明请求被终止是由于达到了限流条件。
10、可选的,执行步骤s1时,
11、配置的全局限流规则适用于全局用户、全局桶和匿名用户三类数据实体;配置的全局限流规则允许为前述三类数据实体分别设置读i/o操作次数、写i/o操作次数、读带宽和写带宽的限制;在配置过程中,需要明确指定所针对的数据实体类型:使用“globaluser”表示全局用户,使用“global bucket”表示全局桶,使用“anon”代表匿名用户;
12、配置的本地限流规则只针对预先指定的单一用户、桶或接口,即:网络资源的限制仅影响到被预先指定的数据实体,而不会影响到未被指定的用户、桶或者接口。
13、进一步可选的,匿名用户是一种访问对象存储时不提供秘钥的用户,针对此类用户的操作单独进行限流;
14、在对象存储系统中,数据实体包括用户、存储桶和对象,这三者之间存在层级关系,其中:用户是对象存储系统的使用者,一个用户拥有一个或多个存储桶;存储桶作为对象的容器,用于存放对象;对象是存储的基本单位;
15、用户级别的限流设置影响该用户的所有操作,桶级别的限流设置影响该桶上的所有操作,接口级别的限流设置影响该接口的所有操作。
16、进一步可选的,限流规则根据所设置数据实体的不同而保存在对象存储集群中的不同位置,其中:
17、全局限流规则保存在对象存储系统服务端的全局变量中;
18、本地限流规则中,用户级别的限流规则保存在该用户对应的扩展属性中,桶级别和接口级别的限流规则保存在该桶对应的扩展属性中。
19、可选的,执行步骤s2时,当有请求到达对象存储系统服务端时,对象存储系统服务端从集群中读取限流规则时:
20、a)如果限流规则属于全局限流规则,则从集群的全局变量中读取;
21、b)如果限流规则属于本地用户限流规则,则从该用户对应的扩展属性中读取;
22、c)如果限流规则属于本地桶或者接口限流规则,则从该桶对应的扩展属性中读取。
23、可选的,执行步骤s4时,所述桶令牌信息存放在一个map容器中,key是用户名、桶名或者接口名,value中存放着该用户、桶或者接口对应的令牌桶信息;所述map容器基于哈希表实现,能够高效地存储和查找限流信息;
24、所述令牌桶中保存了读iops、写iops、读带宽和写带宽四类令牌的数目,四类令牌相互独立、互不影响。
25、可选的,执行步骤s5时,如果对象存储集群的map容器中还没有为该请求对应的操作类型初始化令牌桶,则在第一次请求到达后,对象存储系统会根据配置的限流规则初始化该规则对应的桶令牌个数,其中:
26、限流规则中配置的限流阈值决定了桶中令牌的初始数量,阈值越大,桶中初始令牌数越多;
27、桶令牌个数代表了该操作可以消耗的网络资源量,在使用网络资源之前,必须确保有预设的令牌数量才能进行操作,每一次操作都会按照设定的规则消耗预设数量的令牌,如果操作消耗的令牌数量超过了桶中可用的令牌数量,那么该操作将不能继续,这时就达到了限流条件。
28、进一步可选的,执行步骤s5,更新令牌桶时,令牌需要按照设定的数量进行填充,时间间隔越大,填充的令牌数量越多,但不能超过限流规则中定义的上限;
29、令牌填充的最小时间间隔是60ms,如果两次请求之间的时间差小于60ms,则不会进行令牌填充;
30、对于iops,当把令牌桶中的令牌全部使用完后,再次发起的请求将会失败;对于带宽,当令牌桶中的令牌全部使用完后,未完成的数据上传或下载将形成“负债”,需在设定的时间间隔内通过流控来“偿还”,“偿还”期间不允许进一步的数据上传或下载。
31、进一步可选的,在限流逻辑判断中,如果同时配置了全局、局部用户、局部桶、接口的限流规则,具体执行哪个层级的限流规则需要进行判断,整体的优先级是:局部用户大于全局,局部桶大于局部用户,接口大于局部桶。
32、进一步可选的,在进行接口操作时,该操作首先会消耗预设数量的用户级iops令牌和桶级iops令牌;
33、当接口级iops限流生效即令牌消耗殆尽时,需要向从属的桶和用户对应的iops令牌桶补充令牌,以恢复之前操作所消耗的令牌数。
34、本发明的一种在对象存储系统中实现网络资源限流的方法,与现有技术相比具有的有益效果是:
35、1、本发明可以同时提供多个层级粒度的限流功能,配置简单灵活,可以提升对象存储服务的稳定性和灵活性,满足大部分的对象存储限流需求;
36、2、本发明在进行限流逻辑判断时使用了令牌桶算法,能够高效稳定地满足对象存储服务的限流要求。
1.一种在对象存储系统中实现网络资源限流的方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的一种在对象存储系统中实现网络资源限流的方法,其特征在于,执行步骤s1时,
3.根据权利要求2所述的一种在对象存储系统中实现网络资源限流的方法,其特征在于,所述匿名用户是一种访问对象存储时不提供秘钥的用户,针对此类用户的操作单独进行限流;
4.根据权利要求3所述的一种在对象存储系统中实现网络资源限流的方法,其特征在于,所述限流规则根据所设置数据实体的不同而保存在对象存储集群中的不同位置,其中:
5.根据权利要求2所述的一种在对象存储系统中实现网络资源限流的方法,其特征在于,执行步骤s2时,当有请求到达对象存储系统服务端时,对象存储系统服务端从集群中读取限流规则时:
6.根据权利要求2所述的一种在对象存储系统中实现网络资源限流的方法,其特征在于,执行步骤s4时,所述桶令牌信息存放在一个map容器中,key是用户名、桶名或者接口名,value中存放着该用户、桶或者接口对应的令牌桶信息;所述map容器基于哈希表实现,能够高效地存储和查找限流信息;
7.根据权利要求6所述的一种在对象存储系统中实现网络资源限流的方法,其特征在于,执行步骤s5时,如果对象存储集群的map容器中还没有为该请求对应的操作类型初始化令牌桶,则在第一次请求到达后,对象存储系统会根据配置的限流规则初始化该规则对应的桶令牌个数,其中:
8.根据权利要求7所述的一种在对象存储系统中实现网络资源限流的方法,其特征在于,执行步骤s5,更新令牌桶时,令牌需要按照设定的数量进行填充,时间间隔越大,填充的令牌数量越多,但不能超过限流规则中定义的上限;
9.根据权利要求8所述的一种在对象存储系统中实现网络资源限流的方法,其特征在于,在限流逻辑判断中,如果同时配置了全局、局部用户、局部桶、接口的限流规则,具体执行哪个层级的限流规则需要进行判断,整体的优先级是:局部用户大于全局,局部桶大于局部用户,接口大于局部桶。
10.根据权利要求9所述的一种在对象存储系统中实现网络资源限流的方法,其特征在于,在进行接口操作时,该操作首先会消耗预设数量的用户级iops令牌和桶级iops令牌;