自研网关架构设计

news2024/9/16 22:42:28

网关项目

  • 1. 了解网关
    • 网关横向对比
    • 为什么自研网关
  • 2. 架构设计
    • 技术栈
    • 技术要点
      • 异步化设计
      • 使用缓存缓冲
      • 合理使用串行化
      • 吞吐量为王
      • 合适的工作线程
    • 架构图

1. 了解网关

概念

  • 访问数据、业务逻辑或功能的 “前门
  • 负责处理接受和处理调用过程中的所有任务

类型

  • RESTful APl 使用HTTP API构建
  • WebSocket APl 通过WebSocket API构建

优势

  • 简化客户端的工作
  • 降低函数间的耦合度
  • 解放开发人员把精力专注于业务逻辑开发

劣势

  • 在微服务这种去中心化架构中,成为瓶颈点
  • 服务如果不是异步或者同步非阻塞,耦合度高

解决问题

  • 路由转发
  • 协议转换
  • 服务监控统计
  • 熔断限流
  • 日志
  • 优雅下线

网关横向对比

  1. Nginx + OpenResty
    • 同时作为流量网关和业务网关
    • C语言开发,性能非常好
    • 基于 lua 语言扩展功能
  2. Kong / APISIX
    • 基于Openresty
    • 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能
    • 支持gRPC,Dubbo,Http等协议转换
  3. Netflix Zuul1.0
    • 中小厂落地案例丰富
    • 基于同步阻塞O,性能差
  4. SpringCloud Gateway
    • 与SpringCloud生态完美兼容
    • 异步非阻塞IO,性能好
  5. Netflix Zuul2.0
    • 性能接近SpringCloud Gateway
    • Netflixi进入维护期,前景不明

在这里插入图片描述

为什么自研网关

开源网关缺点:

  1. 开源网关的组件以及附加功能太多,使用起来就越麻烦,我们希望网关足够的薄,只满足我们的业务即可。
  2. 技术栈不符合团队,如果我们使用的是Go语言,那么以上的开源网关都不符合
  3. 开源网关性能参差不齐

自研网关优点:

  1. 因需制宜。例如:可以定义某个接口走同步还是异步,比如要求一致性高的接口走同步,不要求一致性的走异步。
  2. 研发需求以及进度可控。例如:如果开源网关出现漏洞,则需要等开源社区完善。

2. 架构设计

在这里插入图片描述

在这里插入图片描述

技术栈

基础框架

  • 原生Java

网络通信框架

  • Netty

注册中心

  • Nacos

配置中心

  • Nacos

技术要点

异步化设计

需要异步化的地方

  1. 请求转发异步化
  2. 请求响应异步化
  3. 插件过滤异步化

插件过滤使用单异步模式,单异步模式:发送和接收请求使用的是同一个线程,但是可以多线程同时发送和接收
请求响应使用双异步模式,双异步模式:发送和接收请求可以使用不同的线程。

如果下游服务器性能不是很高,响应时间在 500 - 2000 毫秒,则可以使用 双异步模式,如果性能高,则使用 单异步模式

异步神器CompletableFuture

  1. Future局限性
  2. CompletableFuture简介

使用缓存缓冲

尽量使用内存作为缓存(Map、Queue)

合理使用串行化

串行化使用场景:

  • 耗时较小,性能较高的场景。(避免线程频繁的切换)

并行化使用场景:

  • 耗时较久,任务之间没有依赖关系,比如远程RPC调用场景

吞吐量为王

流量高峰使用本地缓冲(Disruptor、MPMC)

合适的工作线程

CPU密集型

  • CPU核数 + 1

IO密集型

  • 公式1:CPU核数 * 2
  • 公式2:CPU核数 / (1 - 阻塞系数)。阻塞系数:0.8 - 0.9 之间

架构图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

数据结构_优先级队列(堆)

目录 一、优先级队列 1.1 堆 1.2 PriorityQueue接口 二、模拟实现优先级队列 2.1 初始化 2.2 创建大根堆 (向下调整) 2.3 堆的插入 2.4 堆的删除 2.5 堆排序 总结 一、优先级队列 优先级队列是一种特殊的队列,其出队顺序与入队顺序无关,而与优…

如何清空Comfyui的gpu缓存

由于我电脑上同时装了两个Comfyui作为我站点的绘图服务,一个是给正式服使用,一个是开发测试使用,在使用过程中经常会因为两个Comfyui服务跑图后没有自动释放显存导致爆显存。所以我需要让Comfyui跑完图之后可以自动释放显存。 我自己在网上找…

Python的Django部署uwsgi后自签名实现的HTTPS

通过SSL/TLS来加密和客户端的通信内容。提高网络安全性,但是会损耗部分的服务器资源。 HTTPS 的原理图。 web.key 是打死也不能给其他人的。一定要保存好。里面主要是私钥。是各种认证的根基。本地测试的话生成1024的即可,如果是生产环境推荐使用2048。…

高考后的抉择:专业优先还是学校优先?

随着2024年高考的帷幕落下,高考生们面临的一个重要抉择再度浮上心头:在分数受限的情况下,是选择一个心仪的专业,还是选择一个知名度更高的学校?这是一个困扰了众多考生和家长的长期难题。在这个关键的时刻,…

Vip-智能预估+大数据标签+人群全选=用户分群!

Mobpush用户分群功能升级,创建推送入口vip用户可进入自有选择标签创建“用户分群”,相比于免费标签,“用户标签”维度更丰富。在应用基础属性上,增加“品牌”、“网络状态”、“运营商”,众所周知,不同厂商…

公文出错事非小,这些公文写作的常见错误,你中过招吗?

公文是企事业单位、相关部门内外沟通交流的重要工具,不少“笔杆子”经常需要与公文打交道,每天会接触大量的公文。然而在公文撰写的细微之处,稍有不慎,便可能犯下一些常见的错误。这些错误如同蚁穴,虽小却足以破坏公文…

图片管理大革新:一键批量转换、美化与底片效果制作,轻松打造专业级图片库!

在数字时代,图片已成为我们生活、工作中不可或缺的一部分。然而,随着图片数量的不断增加,如何高效、便捷地管理、转换和美化这些图片,成为了许多人头疼的问题。今天,我们向您推荐一款全新的图片批量管理工具&#xff0…

边缘计算盒子是什么、有哪些作用?如何选型?这篇文章全面帮你了解!边缘计算云服务器ECS

一、边缘盒子是什么? 近年,边缘盒子被大家所了解,那么边缘盒子到底是什么呢? 边缘计算盒子内部配置了丰富的 AI 算法,这些算法可以帮助用户在很多场景下实现数据识别等作用。比如,在工地场景下安装边缘盒…

Nvidia jetson Orin/RK3588+AI仿生事件相机

EVS 事件相机 速度,性能,效率和安全,为自动驾驶、自动化和高速运动带来新的高度 采用SONY IMX646 EVS图像传感器,基于PROPHESEE METAVISION 技术 高帧率,120dB高动态范围 实现高速和高时间分辨率。现在已经没有帧率的概…

po文件并转换成mo文件

po文件转换成mo文件 简介 .po和.mo文件是WordPress中语言相关的两种文件。po 是Portable Object(可移植对象)的缩写,存放待翻译的字符串信息,可直接用文本编辑器打开编辑;mo 是Machine Object的缩写,二进制文件,程序…

SmartEDA电路仿真教学VS传统教学:谁将颠覆未来教育战场?

在科技飞速发展的今天,教育领域也迎来了前所未有的变革。传统的教学方式正面临着在线教学工具的强劲挑战,特别是在电路仿真教学领域,SmartEDA这样的在线工具正逐渐崭露头角。那么,SmartEDA电路仿真教学与传统教学之间,…

超支化聚合物(HBPs)应用潜力巨大 我国研究、产业化及应用取得了显著进展

超支化聚合物(HBPs)应用潜力巨大 我国研究、产业化及应用取得了显著进展 超支化聚合物简称HBPs,是一类高度支化的三维拓扑高分子,由沿聚合物骨架随机分布的树枝状单元、线性单元、末端单元组成。超支化聚合物结构独特,…

一名HR,在招聘嵌入式开发岗位,为什么感觉一年比一年难?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 1.嵌入式学用不一致, 高…

【星海随笔】vue+vite

开头问一个问题&#xff0c;我发现有的人粉丝是点赞数的好几倍&#xff0c;可能和必须关注他才能阅读他的文章有关。 所以问一下怎么设置为关注才能查看该文章。 screen -ls #查看 id 列表 screen -S <session_name> # 创建一个会话 screen -R <session_id> # 根据…

高考填报志愿三连问,从人格优势分析兴趣和专业

“我的兴趣爱好什么&#xff1f;” “我的理想是什么&#xff1f;” “我想成为什么&#xff1f;” ------高考填报志愿三连问&#xff01; 最近我在知乎上看过一个比较有意义的提问&#xff0c;提问的也是高考填报志愿的同学&#xff0c;自从高考后&#xff0c;每日三连问&…

笔记本电脑升级实战手册[1]:开始之前的准备与清单

文章目录 前言&#xff1a;一、升级流程1. 备份2. 清灰换硅脂3. 扩展内存与硬盘4. 硬盘设置5. 系统重装6. 升级后性能测试 二、升级清单1. 工具清单2. 升级清单 总结&#xff1a; 前言&#xff1a; 将要毕业之际&#xff0c;发现我的笔记本电脑已经陪我“征战沙场”快有四年之…

iOS政策解读之三丨商务、设计和法律 “三重奏“

上一篇的iOS政策解读文章&#xff0c;我们从安全和性能两方面进行了学习和解读&#xff0c;这两个方面是最为重要&#xff0c;也是优先级最高的方面。 如果您还没来得及阅读&#xff0c;欢迎移步我们前两篇的解读文章&#xff1a; iOS政策解读之一丨App提交审核前注意事项必知…

3d怎么把歪的模型摆正?---模大狮模型网

在进行3D建模过程中&#xff0c;有时候会遇到模型出现歪曲或者旋转不正确的情况&#xff0c;这可能会影响到后续的设计和渲染效果。因此&#xff0c;学会将歪曲的模型摆正是一个非常重要的技巧。模大狮将介绍几种常用的方法&#xff0c;帮助您有效地将歪曲的3D模型摆正&#xf…

有什么简单易上手的CRM系统推荐?五款CRM软件评测

在数字化时代&#xff0c;企业急需一个能全面展示客户、销售和分析数据的CRM系统。当然&#xff0c;简单易用的CRM系统成了企业首选。选择系统时&#xff0c;同时要关注它的实际功能是否满足需求&#xff0c;是否容易上手&#xff0c;能否根据企业需求灵活定制&#xff0c;能否…

MyBatisX插件生成MyBatis Plus代码

MyBatis-Plus为我们提供了强大的mapper和service模板&#xff0c;能够大大的提高开发效率 但是在真正开发过程中&#xff0c;MyBatis-Plus并不能为我们解决所有问题&#xff0c;例如一些复杂的SQL&#xff0c;多表 联查&#xff0c;我们就需要自己去编写代码和SQL语句&#xf…