对于服务应用来说支持的并发越高越好,但很多时候资源有限,超负载的并发则会给整体应用带来更大的危险性(更何况有些并发来源是恶意的)。作为微服务网关应该具有一定的挡洪作用,这样可以一定程度保障后台逻辑服务的稳定性。Bumblebee基础只有请求队列来对大并发进一个导流控制,对更精准的控制并没有默认实现;虽然组件基础不提供持不过可以通过插件的方式来进行一个并发控制处理,接下来通过引入BeetleX.Bumblebee.ConcurrentLimits来实现对IP或Url进行一个并发限制。

引用插件

Bumblebee中使用ConcurrentLimits需要引用两个插件,分别是Bumblebee.ConfigurationBeetleX.Bumblebee.ConcurrentLimits。加载启动后就可以通过管理工具进行插件配置.

            g = new Gateway();g.HttpOptions(o =>                {o.Port = 80;o.LogToConsole = true;o.LogLevel = BeetleX.EventArgs.LogType.Error;                });g.Open();g.LoadPlugin(typeof(Bumblebee.Configuration.Management).Assembly,typeof(Bumblebee.ConcurrentLimits.UrlConcurrentLimits).Assembly               );

引用插件后就可以在插件管理查看到这两个插件,插件默认是关闭。  在使用这两个插件的时候需要进行配置相应的规则才能生效,接下来介绍如何使用这两个插件.

default_ip_concurrent_limits

这是针对一个IP并发请求的限制,它可以限制一个IP每秒并发的数量,如果超出这个数量那这个IP则会被禁止访问一段时间。为了更好的解决实际情况项配置里加入了白名单设置用来排除相关IP或IP范围的限制,接下来通过一个配置来描述这个插件的使用.

{"Limit": 100,"DisabledTime": 100,"CleanTime": 1800,"WhiteList": ["192.168.1.1/24","192.168.2.18"    ]}
  • Limit 每秒最大并发数

  • DisabledTime 禁用时间,当IP访问超过每秒并发数时禁止请求的时间,单位秒

  • CleanTime每隔一段时间清除在限制表没有活跃的IP,单位秒

  • WhiteList 白名单,在这个白名单里的IP不被限制

以上配置是对每个IP每秒并发限制在100次,但排除 "192.168.1.1/24"和"192.168.2.18".接下来看一下测试结果

以上是使用192.168.2.19进行两次压测的结果,第一次压测触发了限制,然后99%的请求被拒绝;然后接下来的一次测试的所有请求都被拒绝了。从结果上来看每秒的20万rps都被认为是非法,可以想像这些压力流入到正常服务中会产生有多大的损耗!接下来测试白名单IP

从正常测试来看,上游的服务每秒只能处理4万的rps,所以并发控制是会起到非常好的挡洪效果。

default_url_concurrent_limits

这是针对不同Url制定不同并发限制的插件,在一个服务中难免有些API需要处理复杂的逻辑而占用大量的资源,如果这些接口的并发过量可能对整个服务的资源使用受到影响。通过这个插件可以限制某些API的并发数量,从而控制其它对整体资源的影响。下面看一下简单的示例配置

{"UrlLimits": [        {"Url": "^/jso.*","Rps": 300        },        {"Url": "^/emp.*","Rps": 100        }    ],"CleanTime": 1800}

以上配置两组Url并发限制,限制秒请求量分别是300和100.配置完成后设置生产看一下压测结果

  • /Json

并发限制是每秒300测试了5秒多,有1800个请求是成功能的,其他99万多次是被拒绝

  • /Employee/2

并发限制是每秒100测试了5秒多,有600个请求是成功能的,其他99万多次是被拒绝.


关注公众号

https://github.com/IKende/

高性能的服务通讯框架 Beetlex(http,rpc,gateway的详细实现)

Bumblebee微服务网关之并发限制相关推荐

  1. Bumblebee微服务网关之负载策略

    作为一个微服务网关,提供不同负载策略配置是一项非常重要的主要功能:在这方向Bumblebee提供了非常好的支持.Bumblebee可以针对不同路径制定各自的负载策略,更重要的是这些调整都可以在网关运行 ...

  2. Bumblebee微服务网关之请求统一验证

    对于微服务网关来说,统一请求验证是一个比较重要和常用的功能,通过网关验证后台服务就无须关注请求验证:对于多语言平台的服务而言制定验证方式和变更验证配置都是一件比较繁琐和工作量大的事情.Bumblebe ...

  3. Bumblebee微服务网关之consul服务发现

    网关需要维护相关负载的服务器,手动添加相对来说是一件比较麻烦的工作:为了解决这一问题组件扩展了一个基于consul服务发现插件,通过配置这个插件和启用后网关会自动从consul服务中获取服务并添加到网 ...

  4. Bumblebee微服务网关之访问日志处理

    记录访问日志可以起到非常重要的作用,它不仅记录了API的使用情况,更可以反映API各种相关数据:通过分析日志可以得到API不同时间的负载情况,访问效率和流量分布,更进一步还能分析出用户的操作历史和行为 ...

  5. Bumblebee微服务网关之Url重写

    为了提高Url访问的统一和友好性,一般访问的Url和服务定义的Url有所不同;为了解决这一问题Bumblebee提供Url重写功能;通过Url重写功能可以在转发前进行一个重写后再转发到后台服务. 引用 ...

  6. 你的微服务网关还只在用负载均衡吗?

    随着业务场景日益复杂,我们经常采用微服务架构来进行松耦合,但由于系统和服务的细分,导致系统结构变得非常复杂,微服务网关作为分散在各个业务系统微服务的API聚合点和统一接入点,需要担负整个流量管控的职责 ...

  7. 微服务网关Zuul迁移到Spring Cloud Gateway

    https://juejin.im/post/5ba8daa56fb9a05cfe486ebf 背景 在之前的文章中,我们介绍过微服务网关Spring Cloud Netflix Zuul,前段时间有 ...

  8. 微服务网关Ocelot

    微服务网关是微服务架构中的核心组件,它是客户端请求的门户,它是调用具体服务端的桥梁.下面我们将使用开源项目Ocelot(https://github.com/geffzhang/Ocelot)搭建一款 ...

  9. 微服务实现不同登陆_微服务网关——实现篇

    在<微服务网关--需求篇 >中,我们讨论了微服务网关的需求:而在<微服务网关--设计篇 >中,我们讨论了微服务网关的设计.本文将对微服务网关进行实现. 对于网关的开发,完全自研 ...

最新文章

  1. Feign实现服务调用
  2. ubuntu 安装RPM软件包
  3. mysql 修改字符集
  4. Python更改数据类型——astype()方法和to_numeric()函数
  5. mac 系统下 autoconf 安装
  6. win7打开chm文件问题解决之道
  7. 上辈子做鸡 这辈子学计算机,上辈子造了什么孽,这辈子才会当老师?
  8. lol游戏挂机软件_“本不想挂机,但系统不让重连!”LOL成“挂机联盟”,5局3挂机...
  9. 微博股市直播实时监控提醒
  10. win10更新后C盘空间变小解决方法
  11. 仿ios网易支付登录特效
  12. 路由器恢复出厂设置后dns服务器未响应,路由器恢复出厂设置后连不上网怎么办?...
  13. EMV(二)交易流程
  14. Matlab求一阶导数
  15. IOC流程解析-BeanFactory的创建
  16. Mybaits-Plus Invalid bound statement (not found) 问题
  17. docker bind source path does not exist: /etc/timezone“
  18. 双向广搜(DBFS)
  19. 汉语是世界上最好的语言
  20. 无Internet,安全的解决方法

热门文章

  1. poj--2019 Cornfields 2维RMQ
  2. 复制一个文件夹中的所有文件和文件夹的java程序实现
  3. 写出C语言中5种数据类型的名称及其关键字,求C语言中的32个关键字及其意思?...
  4. 使用lodash防抖_什么,lodash 的防抖失效了?
  5. Ubuntu安装Samba文件共享服务器(NAS)
  6. 深入剖析Redis系列(五) - Redis数据结构之字符串
  7. linux系统启动流程及常见问题的解决
  8. ChatForFun 公众号使用说明
  9. 模块化 JS Ajax 请求
  10. 【设计模式】—— 中介者模式Mediator