自研网关架构设计

网关项目

  • 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.rhkb.cn/news/363452.html

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

相关文章

基于DPU的Ceph存储解决方案

1. 方案背景和挑战 Ceph是一个高度可扩展、高性能的开源分布式存储系统,设计用于提供优秀的对象存储、块存储和文件存储服务。它的几个核心特点是: 弹性扩展:Ceph能够无缝地水平扩展存储容量和性能,只需添加新的存储节点即可&am…

探索绿色消费新纪元:消费增值模式

大家好!我是来自一家备受瞩目的科技公司的产品经理,我叫吴军。今天,我非常荣幸能与大家分享一种正在市场上引起广泛关注的创新商业模式——消费增值模式。 近年来,随着环保意识的日益增强,绿色消费逐渐成为了新时代的消…

【思科】IPv6 过渡技术 - IPv6 in IPv4隧道

【思科】IPv6 过渡技术 - IPv6 in IPv4隧道 实验要求实现思路IPv6 in IPv4 与 GRE 不同点注意点配置R1基础配置OSPFv3 局域网可达 R2基础配置局域网环境(OSPFv3):IPv6 网络IPv6 in IPv4隧道 R3R4基础配置局域网环境(OSPFv3):IPv6 网络IPv6 in IPv4隧道 R…

css做旋转星球可举一反三

<!DOCTYPE html> <html lang"en"><head> <meta charset"UTF-8" /> <title>旋转的星球</title> <style type"text/css">.box {/*position: relative;*/position: absolute;width: 139px;height: 139p…

菜籽桌面4.5.0~4.5.1常见问题解答

目录 如何刷机&#xff1f; 刷机失败&#xff1f; 无法方控&#xff1f; 无法画中画? 原车音乐跟我安装的音乐一起播放&#xff1f; 原车音乐停了&#xff0c;我安装的软件也跟着没声音了&#xff1f; 调节声音时忽大忽小&#xff1f; 怎么安装软件&#xff1f; 软件…

访问外网的安全保障——反向沙箱

反向沙箱作为一种网络安全技术&#xff0c;其核心理念在于通过构建一个隔离且受控的环境&#xff0c;来有效阻止潜在的网络威胁对真实系统的影响。在当今日益复杂的网络环境中&#xff0c;如何借助反向沙箱实现安全上网&#xff0c;已成为众多用户关注的焦点。 随着信息化的发…

net Framework OAuth2.0

grant_type client_credentials 客户端凭证password 密码模式 用于资源所有者密码凭据token 隐藏式 、 简化式 简化模式又称为隐式授权码模式&#xff0c;它是授权码模式的一个简化版本authorization_code 授权码 A. 第三方程序向资源拥有者(用户)发送授权请求&#xf…

[Cloud Networking] VLAN

1 为什么需要 VLAN(Virtual Local Area Network) VLAN是一个逻辑网络&#xff0c;VLAN将设备/用户进行逻辑分组&#xff0c;VLAN需要在Switch上创建。为什么需要这样呢&#xff1f;为何不能所有设备都在同一个网络&#xff1f; 如下网络&#xff0c;如果设备过多&#xff0c;…

计算机网络课程实训:局域网方案设计与实现(基于ensp)

文章目录 前言基本要求操作分公司1分公司2总部核心交换机配置实现内部服务器的搭建acl_deny部分用户与服务器出口出口防火墙配置 前言 本篇文章是小编实训部分内容&#xff0c;内容可能会有错误&#xff0c;另外ensp对电脑兼容性及其挑剔&#xff0c;在使用之前一定要安装好。…

找不到xinput1_3.dll怎么办,实测有效的几种方法分享

在日的使用电脑过程中&#xff0c;我们经常会遇到各种各样的问题。其中之一就是找不到xinput1_3.dll文件。这个问题可能会影响到我们的游戏体验&#xff0c;甚至导致电脑无法正常运行。那么&#xff0c;又该如何解决这个问题呢&#xff1f;小编将全面解析找不到xinput1_3.dll对…

K8S 角色/组件及部署方式的简单概述

1.宏观架构图 2.角色详情 2.1 Master(Controller Plane) 早期是叫 Master 节点&#xff0c;后期改名为 Controller Plane&#xff0c;负责整个集群的控制和管理 Master 不会干活的(当然你让它干也是会干的&#xff0c;涉及到污点容忍)&#xff0c;而是起到访问入口&#xff…

【python】一篇文零基础到入门:快来玩吧~

本笔记材料源于&#xff1a; PyCharm | 创建你的第一个项目_哔哩哔哩_bilibili Python 语法及入门 &#xff08;超全超详细&#xff09; 专为Python零基础 一篇博客让你完全掌握Python语法-CSDN博客 0为什么安装python和pycharm&#xff1f; 不同于c&#xff0c;c&#xff0…

深度学习训练基于Pod和RDMA

目录 ​编辑 引言 RDMA技术概述 InfiniBand iWARP RoCE Pod和容器化环境 深度学习训练与RDMA结合 MPI和RDMA 深度学习框架与RDMA 实战&#xff1a;基于Pod和RDMA的深度学习训练 环境准备 步骤 YAML 性能和优势 结论 引言 随着深度学习在人工智能领域的快速发展…

微服务框架中Nacos的个人学习心得

微服务框架需要学习的东西很多&#xff0c;基本上我把它分为了五个模块&#xff1a; 第一&#xff1a;微服务技术模块 分为三个常用小模块&#xff1a; 1.微服务治理&#xff1a; 注册发现 远程调用 配置管理 网关路由 2.微服务保护&#xff1a; 流量控制 系统保护 熔断降级 服…

OneForAll采坑记录

一、OneForAll 介绍 OneForAll是一款功能强大的子域收集工具。支持子域爆破、子域名验证、子域名置换、接管等功能。处理功能强大&#xff0c;速度极快&#xff0c;体验良好。 二、安装部署问题处理 github地址&#xff1a;https://github.com/shmilylty/OneForAll 环境要求…

探索未来的AI革命:GPT-5的即将登场

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

HarmonyOS ArkUi ArkWeb加载不出网页问题踩坑

使用 使用还是比较简单的&#xff0c;直接贴代码了 别忘了配置网络权限 Entry Component struct WebPage {State isAttachController: boolean falseState url: string State title: string Prop controller: web_webview.WebviewController new web_webview.WebviewCont…

企业级堡垒机JumpServer

文章目录 JumpServer是什么生产应用场景 Docker安装JumpServer1.Docker安装2.MySQL服务安装3.Redis服务安装4.key生成5.JumpServer安装6.登录验证 系统设置邮箱服务器用户和用户组创建系统审计员资产管理用户创建资产节点资产授权查看用户的资产监控仪表盘 命令过滤器创建命令过…

c++ 设计模式 的课本范例(上)

( 0 ) 这里补充面向对象设计的几个原则&#xff1a; 开闭原则 OCP &#xff1a; 面向增补开放&#xff0c;面向代码修改关闭。其实反映到代码设计上就是类的继承&#xff0c;通过继承与多态&#xff0c;可以不修改原代码&#xff0c;又增加新的类似的功能。 依赖倒置原则 Depen…

51单片机定时炸弹-准确计时-两根线随机一根触发中断可“拆弹“(AT89C52)

一、设计介绍: 1、使用定时器按照精确时间读秒倒计时&#xff0c;倒计时在LCD1602中居中显示&#xff0c;格式为mm&#xff1a;ss&#xff0c;每秒变化一次 2、默认倒计时10分钟&#xff0c;时间到后显示“Time over”“&#xff08;&#xff08;&#xff08;Boom&#xff09…