作为一个微服务网关,提供不同负载策略配置是一项非常重要的主要功能;在这方向Bumblebee
提供了非常好的支持。Bumblebee
可以针对不同路径制定各自的负载策略,更重要的是这些调整都可以在网关运行过程动态调整!动态策略调整可以更好的应对不同的特发状况,并可以更好的调配负载资源来应对当前的特发情况。在负载上Bumblebee
提供了平均和一致性等负载方案,可以更好地制定不同的并发应用需求。
制定路径策略
路径策略是通过正则来描述一个请求路径,组件会优先长正则配匹。
以上定义了一个^/api.*
负载规则,只要是匹配以上规则的所有API请求都会分配到http://localhost:58387/
服务上,而其他请求则分配给http://192.168.2.26:9090/
;接下来分别访问一下/json
,/api/Index
和/api/hello
,看一下它们的访问日志记录情况.
通过组件记录的日志来看,所有/api/
的请求都分发到http://localhost:58387/
而其他则分发给http://192.168.2.26:9090/
服务负载
应用中往往需要多个服务来处理并发业务,这个时候就存在服务负载的问题;组件提供了权重和一致性等方让用户根据情况来制定不同的服务负载决策。
以上配置是所有服务的权重都是零,所以由三个服务平均负载所有请求。可以通过多次访问/json
看一下访问记录分配情况:
权重分配
由于资源的分配往往不是平均的,所以在实际应用也需要依据服务所拥有的资源多少来配置不同的负载比例。
以上配置是http://192.168.2.26:9090/
并发分配比例是66%
,http://192.168.2.25:9090/
分配比例则是33%
;由于http://192.168.2.27:9090/
分配的权重为零所以不参与分配。接下来多次访问/json
看一下访问记录分配情况:
零权重
一般情况下零权重是不参与负载,但当有权重的服务不可用的时候,那零权重的服务则会提升上来进行处理;因此零权重的服务更多用于备用服务。
以上是把有权重的服务关闭了,访问/json
看一下访问记录分配情况:
一致性分配
有些情况需要把同一路径或不同用户一致性到服务上,这样可以确保这些请求都会被分配到一个服务中。
以上设置了url
作为一致分配规则,接下来多次访问/json
,/employees
,/orders
和/hello
看一下访问记录分配情况:
一致性配置规则
一致性配置规则如下:host
|url
|baseurl
|(h:name)
|(q:name)
host
获取请求头的Host信息作为一致性依据url
获取整个请求url信息作为一致性依据baseurl
获取基础url信息作为一致性依据(h:name)
获取某个头部信息作为一致性依据(q:name)
获取某个QueryString值作为一致性依据