热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.netcore自定义高性能的WebAPI服务网关

网关对于服务起到一个统一控制处理的作用,也便于客户端更好的调用;通过网关可以灵活地控制服务应用接口负载,故障迁移,安全控制&

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




推荐阅读
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • Nature Microbiology: 人类肠道古菌基因组目录
    本研究揭示了人类肠道微生物群落中古细菌的多样性,分析了来自24个国家、农村和城市人群的1,167个非冗余古细菌基因组。研究鉴定了多个新分类群,并探讨了古菌对宿主的适应性及其与社会人口特征的关系。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 精致小屏灰色风格苹果CMS v10模板,支持DIY主题管理系统
    探索一款专为影视站设计的苹果CMS v10模板,具备强大的主题管理系统和500多个设置项,无需二次开发即可轻松配置。下载地址:https://www.mytheme.cn/maccms/244.html,演示地址:http://demo.mytheme.cn/index.php?id=244。 ... [详细]
  • 探讨如何修复Visual Studio Code中JavaScript的智能感知和自动完成功能在特定场景下无法正常工作的问题,包括配置检查、语言模式选择以及类型注释的使用。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 智能医疗,即通过先进的物联网技术和信息平台,实现患者、医护人员和医疗机构之间的高效互动。它不仅提升了医疗服务的便捷性和质量,还推动了整个医疗行业的现代化进程。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
author-avatar
小肥沙沙2006_759
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有