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

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

简介

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

构建控制台程序

640?wx_fmt=jpeg

引用Bumblebee

640?wx_fmt=jpeg

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

网关实现

640?wx_fmt=png

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

640?wx_fmt=jpeg

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

640?wx_fmt=png


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


640?wx_fmt=jpeg

日志显示请求被路由到不同的服务器上

HTTP配置

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

640?wx_fmt=png

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

重权分配

以上示例是所有请求负载到这两个服务中;由于两者的权重都是0所以会进行平均负载。如果想192.168.2.26:9090的负载比重大些可以调整相关仅重值如:

640?wx_fmt=png

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

Url配置

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

640?wx_fmt=png

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

基础事件

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

Requesting事件

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

640?wx_fmt=png

Requested事件

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

640?wx_fmt=png

ResponseError事件

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

640?wx_fmt=png

基础性能指标

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

测试内容

640?wx_fmt=jpeg


试结果

640?wx_fmt=jpeg

Bumblebee项目地址

https://github.com/IKende/Bumblebee

原文地址:https://www.cnblogs.com/smark/p/10382650.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软宣布 Visual Studio 2019 将于4月2日正式发布

微软于去年发布了 Visual Studio 2019 预览版。今天,该公司宣布 Visual Studio 2019 正式版将于4月2日发布。微软在公告中表示:“欢迎加入我们在4月2号当天举办的 VS 2019 线上发布活动,这是一款更加现代化、创新且实用的生产力工具”。据悉&…

DotNetty 实现 Modbus TCP 系列 (三) Codecs Handler

DotNetty 实现 Modbus TCP 系列 (一) 报文类DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例DotNetty 作为一个半成品,我们不需要关注细节的实现,只需要关注自己的业务即可,所以最主要的就是处理 Codecs 和 Handler。所有…

Acwing -- 单调队列优化的DP问题

文章目录引入acwing154 滑动窗口应用135 最大子序和1088.旅行问题AcWing 1087. 修剪草坪28AcWing 1089. 烽火传递AcWing 1090. 绿色通道AcWing 1091. 理想的正方形引入 acwing154 滑动窗口 题目链接 题解 应用 闫氏最优化问题分析法 135 最大子序和 题目: 输入…

模板:半平面交(计算几何)

所谓半平面交,就是和“半平先生”当面交谈。顾名思义,这是一个源于日本的算法。 (逃) 前言 感觉应用很灵活的一个算法,一切有两个变量的线性规划问题都可以转化为半平面交。 有时可能要注意取等问题(指射…

[小技巧]C#中如何为枚举类型添加描述方法

背景在我们的日常开发中,我们会经常使用枚举类型。有时我们只需要显示枚举的值或者枚举值对应名称, 但是在某些场景下,我们可能需要将枚举值显示为不同的字符串。例: 当前我们有如下枚举Level这个枚举有4个可选值B, N, G, VG。 现…

Loj#3320-「CCO 2020」旅行商问题

正题 题目链接:https://loj.ac/p/3320 题目大意 有一张nnn个点的无向完全图,每一条边是红色或者蓝色,对于每个点sss求从这个点出发的一条尽量短的经过所有点的路径。 1≤n≤20001\leq n\leq 20001≤n≤2000 解题思路 显然地猜测一下最短的长度肯定是n…

AcWing 1087. 修剪草坪28

AcWing 1087. 修剪草坪 题意: 有n个数,不能选超过连续的k个数,问所能选的最大值是多少? 题解: 我们首先分析dp过程: dp[i]表示选择完前i个数的最大值 sum[i]表示前i项和 对于第i个数,它有两个情况&#…

工业通信的开源项目 HslCommunication 介绍

前言:本项目的孵化说来也是机缘巧合的事,本人于13年大学毕业后去了一家大型的国企工作,慢慢的走上了工业软件,上位机软件开发的道路。于14年正式开发基于windows的软件,当时可选的技术栈就是MFC和C#的winform&#xff…

【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)

文章目录Gorgeous SequenceTyvj 1518 CPU监控【清华集训2015】VNaive OperationsPictureWalking RaceGorgeous Sequence HDU5306 操作 区间与xxx取min\rm minmin查询区间最大值查询区间和 比较暴力的线段树维护区间 Max : 区间最大值sub_max : 严格小于最大值的区间次大值…

Acwing 1089. 烽火传递

Acwing 1089. 烽火传递 题意: 有n个数,要保证每m个数中必须选一个,问所选数的最小总和是多少 题解: 我一开始设的状态为:dp[i]表示前i个数选完的最小值,第i个数可以选也可以不选,但是这样一个状态&…

IIS作为ASP.NET Core2.1 反向代理服务器未说的秘密

--以下内容针对 ASP.NET Core2.1,2.2出现IIS进程内寄宿 暂不展开讨论---相比ASP.NET,出现了3个新的组件:ASP.NET Core Module、Kestrel、dotnet.exe, 后面我们会理清楚这三个组件的作用和组件之间的交互原理。 ASP.NET Core 设计的初衷是开源…

程序员修神之路--分布式缓存的一条明路(附代码)

菜菜呀,由于公司业务不断扩大,线上分布式缓存服务器扛不住了呀程序员主力 Y总如果加硬件能解决的问题,那就不需要修改程序菜菜我是想加服务器来解决这个问题,但是有个问题呀程序员主力 Y总???菜…

长沙.NET技术社区正式成立

感谢大家的关注,请允许我冒昧的向大家汇报长沙.NET技术社区第一次交流会的会议进展情况。活动过程汇报2019年2月17日,继深圳,广州,西安,成都,苏州相继成立了.net社区之后,酝酿已久的长沙.net社区…

Asp.NetCore轻松学-部署到 IIS 进行托管

前言经过一段时间的学习,终于来到了部署服务这个环节,.NetCore 的部署方式非常的灵活多样,但是其万变不离其宗,所有的 Asp.NetCore 程序都基于端口的侦听,在部署的时候仅需要配置侦听地址、端口(一个或者多…

响应式编程知多少 | Rx.NET 了解下

1. 引言An API for asynchronous programming with observable streams. ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming.ReactiveX 使用可观察数据流进行异步编程的API。 ReactiveX结合了观察者…

.NET Core中的验证组件FluentValidation的实战分享

今天有人问我能不能出一篇FluentValidation的教程,刚好今天在实现我们的.NET Core实战项目之CMS的修改密码部分的功能中有用到FluentValidation,所以就以修改用户密码为实例来为大家进行一下ASP.NET Core中的验证组件FluentValidation的实战分享&#xf…

笛卡尔树详解带建树模板及例题运用(Largest Submatrix of All 1’s,洗车 Myjnie,Removing Blocks,SPOJ PERIODNI)

文章目录笛卡尔树介绍例题Largest Submatrix of All 1’s应用「POI2015」洗车 Myjnie[AGC028B] Removing BlocksSPOJ PERIODNI笛卡尔树 介绍 笛卡尔树是一种数据结构,每个点由两个值,键值key和权值val,组成 其键值满足二叉树性质 即点的左子…

如何为ASP.NET Core设置客户端IP白名单验证

本篇博文中展示了如何在ASP.NET Core应用程序中设置IP白名单验证的3种方式。你可以使用一下3种方式:使用中间件检查每个请求的远程IP地址使用Action过滤器为指定的Controller或action方法添加针对远程IP地址的检查使用IPageFilter为Razor Pages应用添加针对远程IP地…

让ASP.NET Core支持GraphQL之-GraphQL的实现原理

众所周知RESTful API是目前最流行的软件架构风格之一,它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。RESTful的优越性是毋庸置疑的,不过GraphQL也可以作为一种补充&am…

[2021-09-02 contest]CF1251C,可达性统计(bitset优化dp),Boomerang Tournament(状压dp),小蓝的好友(mrx)(treap平衡树)

文章目录CF1251C Minimize The Integeracwing164:可达性统计Facebook Hacker Cup 2016 Round 1 Boomerang Tournament[Zjoi2012]小蓝的好友(mrx)CF1251C Minimize The Integer ………………… 给你一个大整数aaa,它由nnn位数字,也可能有前导…