网关对于服务起到一个统一控制处理的作用,也便于客户端更好的调用;通过网关可以灵活地控制服务应用接口负载,故障迁移,安全控制,监控跟踪和日志处理等。由于网关在性能和可靠性上都要求非常严格,所以针对业务需求来制定一个服务网关需要花费比较大的成本。以下介绍一下Bumblebee
基础Web API网关组件,通过它可以灵活扩展更适合业务需求的应用接口网关服务。
简介
Bumblebee
是基于BeetleX
开发的HTTP网关服务组件,提供了高效的处理性能和基础的网关代理功能;由于Bumblebee
是一个基础组件所以它并不像Nginx这些服务直接运行,使用者必须引用Bumblebee
通过代码的方式来制定符合自己需求的网关应用。虽然需要编写代码来制定网关,但组件提供简单的方法和事件可以让网关的制定变得非常简单。接下来介绍一下如何通过Bumblebee
来实现一个简单的Web API负载网关。
构建控制台程序

引用Bumblebee

可以通过Nuget
的方式进行引用组件,搜索Beetlex
选择BeetleX.Bumblebee
即可以,也可以通过Git下载项目代码进行项目引用 https://github.com/IKende/Bumblebee
网关实现

以上代码实现由http://192.168.2.25:9090
和http://192.168.2.26:9090
两个服务器负载的网关服务,这样一个网关服务就构建完成,运行程序可以看到相关日志情况:

程序运行后组件默认是监听8080端口,这个时候可以通过浏览器访问网关

你会看到请求返回的服务信息头是Server: Bumblebee(BeetleX)
,通过输出日志可以查看请求的情况

日志显示请求被路由到不同的服务器上
HTTP配置
组件默认提供了一些HTTP服务配置信息,在默认的情况不作任何配置即可提供网关服务,如果想需要更换端口或启用HTTPS服务可以通过HttpOptions
方法进行设置,具体配置如下:

以上配置服务端口为80,并且开启SSL来支持HTTPS访问(开启HTTPS需要指定证书和密码)。
重权分配
以上示例是所有请求负载到这两个服务中;由于两者的权重都是0所以会进行平均负载。如果想192.168.2.26:9090
的负载比重大些可以调整相关仅重值如:

以上配置是描述192.168.2.26:9090
比192.168.2.25:9090
多负载一倍的请求量;权重配置的最大值是10最小值是0,权重值为0的服务默认是不参与负载处理工作,当其他服务不可用的情况下0权重的服务才会生效。
Url配置
一般情况下使用*
来匹配请求负载,但可以针对某些Url正则匹配的方式来制定负载策略,组件是优先匹配长正则,在没有匹配的情况下才会使用*
的负载策略.

以上配置/order.*
请求的路由负载到192.168.2.27:9090
和192.168.2.28:9090
上,其他则路由到192.168.2.25:9090
和192.168.2.26:9090
上
基础事件
组件提供了一些基础事件用于记录和控制一些请求处理
Requesting事件
网关接受请求的时候触发这个事件,用户可以通过这个事件取消转发并返回自定义内容

Requested事件
网关接受请求并完成响应后触发这个事件,通过这个事件可以记录网关转发完成的状态情况。

ResponseError事件
网关接受请求,但处理错误触发这个事件,通过这个事件可以自定义错误响应的内容

基础性能指标
作为一个网关组件,必须有着可靠和高效的性能。以下针对Bumblebee
组件的一个简单测试,测试方式是开启200个用户进行1亿次请求测试,在一台E3-1230V2的服务器上测出的结果是7万多RPS代理转发处理,代理上下行带宽达到7Gb
测试内容

试结果

Bumblebee项目地址
https://github.com/IKende/Bumblebee
原文地址:https://www.cnblogs.com/smark/p/10382650.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
