网关对于服务起到一个统一控制处理的作用,也便于客户端更好的调用;通过网关可以灵活地控制服务应用接口负载,故障迁移,安全控制,监控跟踪和日志处理等。由于网关在性能和可靠性上都要求非常严格,所以针对业务需求来制定一个服务网关需要花费比较大的成本。以下介绍一下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:9090http://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:9090192.168.2.25:9090多负载一倍的请求量;权重配置的最大值是10最小值是0,权重值为0的服务默认是不参与负载处理工作,当其他服务不可用的情况下0权重的服务才会生效。

Url配置

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

以上配置/order.*请求的路由负载到192.168.2.27:9090192.168.2.28:9090上,其他则路由到192.168.2.25:9090192.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

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

  1. 使用HttpClient消费ASP.NET Web API服务

    本篇体验使用HttpClient消费ASP.NET Web API服务,例子比较简单. 依次点击"文件","新建","项目". 选择&quo ...

  2. 使用 ASP.NET Core Razor 页、Web API 和实体框架进行分页和排序

    目录 核心类 数据层 The API Razor页面 如何使用 .NET Core Razor 页.Web API 和实体框架实现分页和排序,以产生良好的性能. 该项目的特点是: 选择页面大小(Pag ...

  3. 使用SQL Server 2017 Docker容器在.NET Core中进行本地Web API开发

    目录 介绍 先决条件 最好事先知道 假设 动机 跨平台 快速安装 经济有效 不同版本/多个实例 速度 持久性 找到SQL Server 2017镜像并在本地下载它 在没有卷挂载的情况下在本地执行SQ​ ...

  4. ASP.NET Core 1.0开发Web API程序

    .NET Core版本:1.0.0-rc2 Visual Studio版本:Microsoft Visual Studio Community 2015 Update 2 开发及运行平台:Window ...

  5. dotNET Core 3.X 使用 Web API

    现在的 Web 开发大多都是前后端分离的方式,后端接口的正确使用显得尤为重要,本文讲下在 dotNET Core 3.X 下使用 Web API . 环境 操作系统:Mac IDE:Rider dot ...

  6. abp构建Web API服务

    构建动态Web API控制器 ABP可以自动地为应用层生成Web API 层.比如说我们之前创建的应用层: namespace Noah.ChargeStation.Application.Citie ...

  7. php如何访问web api,如何在PHP中创建Web API服务?

    SOAP和REST API是广泛使用的API. 考虑存在一个名为manage.php的PHP类,该类有助于管理数据库中的条目.class manage { private $entryId; func ...

  8. asp.net core 2.0 web api基于JWT自定义策略授权

    JWT(json web token)是一种基于json的身份验证机制,流程如下: 通过登录,来获取Token,再在之后每次请求的Header中追加Authorization为Token的凭据,服务端 ...

  9. ASP.NET Core和Web API:用于管理异常和一致响应的自定义包装器

    目录 介绍 为什么? 怎么做? VMD.RESTApiResponseWrapper Nuget软件包 安装及使用 ASP.NET Core集成 ASP.NET Web API集成 样本响应输出 定义 ...

最新文章

  1. linux下pptpd的安装配置(×××)
  2. 在项目中使用JMail发送邮件
  3. v4l2 框架下如何设置分辨率_如何在端外投放的场景下实现前端实时CEP框架?
  4. CSS手写代码总结02
  5. Fiori Elements value help的工作原理
  6. RecyclerView多布局的简单使用
  7. 4qam、16qam、64qam、256qam理论仿真曲线
  8. Js操作Select大全(取值、设置选中)
  9. 数学图形(1.47)贝塞尔(Bézier)曲线
  10. mysql数据库的函数_详解数据库_MySQL: mysql函数
  11. 五万pv的小程序需要什么服务器,一个公式,告诉你PV千万的刷屏小程序都是怎么玩的...
  12. (二)pscc学习笔记
  13. 瑞星、360、金山卫士、BaiduPlayer、SOSO开聚会,电脑吃不消了
  14. 铃木敏文《零售的哲学》品读之对产品经理和程序员的现实意义 下篇
  15. c语言 随机生成数独,数独高效随机生成算法的研究与实现
  16. PS 导入笔刷和导入字体和导入滤镜
  17. SSD、eMMC、UFS的区别
  18. windows server 2003的一些设置
  19. 大电影 剧来风 山东方言版 下载
  20. 从奥运门票系统瘫痪到家乐福踩踏事件看软件设计中业务模型的处理

热门文章

  1. 什么是Google On.Here,以及如何设置?
  2. dock怎么自定义_如何自定义和调整Mac的Dock
  3. BZOJ4327:[JSOI2012]玄武密码(SAM)
  4. 奉献一波鹅厂的面经!纪念最后的校招!| 掘金技术征文
  5. 在 Linux 下使用 RAID(二):使用 mdadm 工具创建软件 RAID 0 (条带化)
  6. Centos6.5使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践
  7. java泛型不是计算运行时的数据类型
  8. ssl certificate 验证
  9. Linux运维实战之DNS的高级配置(转发器、视图等)
  10. 把C#.NET程序移植到DB2上的经验浅谈(C#连接DB2可以用IBM.Data.DB2.dll)