.net core自定义高性能的Web API服务网关

网关对于服务起到一个统一控制处理的做用,也便于客户端更好的调用;经过网关能够灵活地控制服务应用接口负载,故障迁移,安全控制,监控跟踪和日志处理等。因为网关在性能和可靠性上都要求很是严格,因此针对业务需求来制定一个服务网关须要花费比较大的成本。如下介绍一下Bumblebee基础Web API网关组件,经过它能够灵活扩展更适合业务需求的应用接口网关服务。git

简介

Bumblebee是基于BeetleX开发的HTTP网关服务组件,提供了高效的处理性能和基础的网关代理功能;因为Bumblebee是一个基础组件因此它并不像Nginx这些服务直接运行,使用者必须引用Bumblebee经过代码的方式来制定符合本身需求的网关应用。虽然须要编写代码来制定网关,但组件提供简单的方法和事件可让网关的制定变得很是简单。接下来介绍一下如何经过Bumblebee来实现一个简单的Web API负载网关。github

构建控制台程序

引用Bumblebee

能够经过Nuget的方式进行引用组件,搜索Beetlex选择BeetleX.Bumblebee便可以,也能够经过Git下载项目代码进行项目引用 https://github.com/IKende/Bumblebee浏览器

网关实现

class Program { private static Gateway g; static void Main(string[] args) { g = new Gateway(); g.HttpOptions(h => h.LogToConsole = true); g.AddServer("http://192.168.2.25:9090").AddUrl("*", 0); g.AddServer("http://192.168.2.26:9090").AddUrl("*", 0); g.Open(); Console.Read(); } }

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

程序运行后组件默认是监听8080端口,能够经过浏览器访问网关服务器

这时候你会看到请求返回的服务信息头是Server: Bumblebee(BeetleX),经过输出日志能够查看请求的状况性能

 

日志显示,请求被路由到不一样的服务器上测试

HTTP配置

组件默认提供了一些HTTP服务配置信息,在默认的状况不做任何配置便可提供网关服务,若是想须要更换端口或启用HTTPS服务能够经过HttpOptions方法进行设置,具体配置以下:url

g.HttpOptions(h => { h.Port = 80; h.SSL = true; h.CertificateFile = "ikende.com.pfx"; h.CertificatePassword = "******"; h.LogToConsole = true; h.LogLevel = BeetleX.EventArgs.LogType.Info; });

以上配置服务端口为80,而且开启SSL来支持HTTPS访问(开启HTTPS须要指定证书和密码)。spa

重权分配

上面的示例是全部请求负载到这两个服务中;因为二者的权重都是0因此会进行平均负载。若是想192.168.2.26:9090的负载比重大些能够调整相关仅重值如:代理

g.AddServer("http://192.168.2.25:9090").AddUrl("*", 5); g.AddServer("http://192.168.2.26:9090").AddUrl("*", 10);

以上配置是描述192.168.2.26:9090192.168.2.25:9090多负载一倍的请求量;权重配置的最大值是10最小值是0,权重值为0的服务是默认不参与负载处理工做,当其余服务不可用的状况下0权重的服务才会生效。

Url配置

通常状况下使用*来匹配请求负载,但能够针对某些Url正则匹配的方式来制定负载策略,组件是优先匹配长正则,在没有匹配的状况下才会使用*的负载策略.

g.AddServer("http://192.168.2.25:9090").AddUrl("*", 0); g.AddServer("http://192.168.2.26:9090").AddUrl("*", 0); g.AddServer("http://192.168.2.27:9090").AddUrl("/order.*", 0); g.AddServer("http://192.168.2.28:9090").AddUrl("/order.*", 0);

以上配置/order.*请求的路由负载到192.168.2.27:9090192.168.2.28:9090上,其实则负载到192.168.2.25:9090192.168.2.26:9090

基础事件

组件提供了一些基础事件用于记录和控制一些请求处理

Requesting事件

网关接受请求的时候触发这个事件,用户能够经过这个事件取消转发并返回自定义内容

g.Requesting += (o, e) => { e.Cancel = true; e.Response.Result(new NotFoundResult("url not found")); };

Requested事件

网关接受请求并完成响应后触发这个事件,经过这个事件能够记录网关转发完成的状态状况。

g.Requested += (o, e) => { var code = e.Code; };

ResponseError事件

网关接受请求,但处理错误触发这个事件,经过这个事件能够自定义错误响应的内容

g.ResponseError += (o, e) => { e.Result = new BadGateway("order not found"); };

基础性能指标

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

测试内容

 

测试结果

 

Bumblebee项目地址

https://github.com/IKende/Bumblebee

相关文章
相关标签/搜索