【动态路由】系统Web URL资源整合系列(后端技术实现)【apisix实现】

需求说明

软件功能需求:反向代理功能(描述:apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资源等只能通过有限个代理地址访问),不考虑SSO。

软件质量需求:满足基本的性能要求:页面响应耗时:3s内(页面本身不走代理就慢的情况除外)

约束条件:内部web资源权限控制的原因,可申请的web资源数量有限制,成百上千的web应用地址只能通过有限个(10个以内)代理地址访问

原型界面【Axuare】

原型界面视频讲解

系统URL整合系列视频二(界面原型)【axure原型界面】_系统url整合系列视频二(界面原型)-配套文档-CSDN博客

原型设计稿下载

https://download.csdn.net/download/jjk_02027/90335900

前端代码实现【d3js】

前端代码视频讲解

系统URL整合系列视频三(前端代码实现) 【d3js版本】-CSDN博客

前端代码下载

https://download.csdn.net/download/jjk_02027/90335919

后端技术实现【apisix实现】

配置基于请求头的路由

你可以根据请求中的 HTTP 头来决定路由到哪个后端服务。例如,假设你有一个请求头 X-Service-Type,根据这个头部的值来决定转发到不同的后端服务。

首先,确保你已经安装并配置了 APISIX。

然后,你可以使用 APISIX Dashboard 或者 APISIX Admin API 来添加路由规则。以下是通过 APISIX Admin API 添加路由的示例:

curl http://127.0.0.1:9080/apisix/admin/routes/1 -X PUT -d '
{"uri": "/*","hosts": {"example.com": "v1"},"upstream": {"type": "roundrobin","nodes": {"httpbin.org:80": 1}},"plugins": {"serverless-pre-function": {"functions": ["function() if ngx.var.http_x_service_type == 'serviceA' then return {upstream = {nodes = {'http://serviceA:80'}}} end return nil end"],"phase": "rewrite"}}
}
'

apisix dashboard对应界面

配置基于请求参数的路由

类似地,如果你需要根据查询参数来决定路由,可以修改 serverless-pre-function 中的逻辑

curl http://127.0.0.1:9080/apisix/admin/routes/1 -X PUT -d '
{"uri": "/*","hosts": {"example.com": "v1"},"upstream": {"type": "roundrobin","nodes": {"httpbin.org:80": 1}},"plugins": {"serverless-pre-function": {"functions": ["function() if ngx.req.get_uri_args()['paramName'] == 'value' then return {upstream = {nodes = {'http://serviceB:80'}}} end return nil end"],"phase": "rewrite"}}
}
'

在这个例子中,如果请求包含查询参数 paramName=value,则请求会被转发到 http://serviceB:80。否则,它会按照默认的上游设置处理。

apisix dashboard对应界面

总结

通过使用 APISIX 的 serverless-pre-function 插件和 Lua 脚本,你可以非常灵活地根据请求的各种属性(如 HTTP 头、查询参数等)来决定如何路由请求到不同的后端服务。这种方法提供了极高的灵活性和动态性,非常适合需要复杂路由逻辑的场景。

附件一:apisix官方网站

Apache APISIX® -- Cloud-Native API Gateway

附件二:APISIX 安装指南

https://apisix.incubator.apache.org/zh/docs/apisix/3.9/installation-guide/

附件三:‌Apisix路由功能

APISIX的路由功能是其核心组件之一,主要用于定义规则来匹配客户端请求,并根据匹配结果将请求转发到指定的上游服务‌‌。APISIX通过路由功能实现了动态、实时的流量管理,支持多种协议和插件扩展,适用于云原生环境中的微服务架构。

APISIX路由功能的具体实现方式

APISIX的路由功能通过以下步骤实现:

  1. 客户端向APISIX发起请求‌:客户端向APISIX发送请求,请求中包含各种信息,如URL、方法、请求头等。
  2. APISIX根据预设的路由规则匹配请求‌:APISIX根据请求的URL、方法、参数等条件进行匹配。匹配规则可以基于路径、方法、主机名、请求参数等多种维度‌。
  3. 转发请求到上游服务‌:匹配成功后,APISIX将请求转发到相应的上游服务。上游服务是一组后端服务节点,APISIX支持对这些节点进行负载均衡和健康检查‌。

APISIX路由功能的优势和特点

  1. 高性能和可扩展性‌:APISIX作为开源API网关,具有高性能和可扩展性,能够处理高并发请求‌。
  2. 多协议支持‌:支持HTTP(S)、HTTP2、Dubbo、QUIC、MQTT、TCP/UDP等多种协议,适用于不同的应用场景‌。
  3. 插件机制‌:通过插件机制提供丰富的功能,如身份验证、限流、监控、日志记录等。插件可以在不同的请求阶段执行,且可以动态加载和热更新,无需重启服务‌。
  4. 动态路由和热加载‌:APISIX支持动态路由和热加载配置,避免了配置后的reload操作,提高了系统的灵活性和维护性‌。
  5. 运维友好‌:支持与多种监控和日志系统集成,如Prometheus、Apache SkyWalking等,便于运维和问题排查‌。

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

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

相关文章

Vue2 中使用 UniApp 时,生命周期钩子函数总结

在 Vue2 中使用 UniApp 时,生命周期钩子函数是一个重要的概念。它允许开发者在特定的时间点运行代码,管理组件的生命周期。以下是 Vue2 中 UniApp 常用的生命周期钩子函数总结: 1. beforeCreate 说明: 组件实例刚被创建,此时数据…

在Ubuntu24.04上安装Stable-Diffusion1.10.1版本

之前曾介绍过在Ubuntu22.04上安装Stable-Diffusion: 在Ubuntu22.04上部署Stable Diffusion_ubuntu stable dif-CSDN博客 这个安装我们使用conda python虚拟机。这次我们介绍的是在Ubuntu24.04安装Stable-Diffusion的最新版本V1.10.1(截止到今天最新版&…

IIS asp.net权限不足

检查应用程序池的权限 IIS 应用程序池默认使用一个低权限账户(如 IIS_IUSRS),这可能导致无法删除某些文件或目录。可以通过以下方式提升权限: 方法 1:修改应用程序池的标识 打开 IIS 管理器。 在左侧导航树中&#x…

MongoDB 常用命令速查表

以下是一份 MongoDB 常用命令速查表&#xff0c;涵盖数据库、集合、文档的增删改查、索引管理、聚合操作等场景&#xff1a; 1. 数据库操作 命令说明show dbs查看所有数据库use <db-name>切换/创建数据库&#xff08;需插入数据后才会显示&#xff09;db.dropDatabase()…

23种设计模式 - 模板方法

模式定义 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它通过定义算法的骨架&#xff08;固定步骤&#xff09;&#xff0c;允许子类在不改变算法结构的情况下重写特定步骤。该模式的核心是将通用流程封装在基类中&#xff…

使用Java爬虫获取1688自定义API操作接口

在电商领域&#xff0c;1688作为国内领先的B2B平台&#xff0c;提供了丰富的API接口&#xff0c;允许开发者获取商品信息、店铺信息等。其中&#xff0c;custom 接口允许开发者进行自定义操作&#xff0c;获取特定的数据。本文将详细介绍如何使用Java爬虫技术&#xff0c;通过1…

MVTEC数据集笔记

前言 网上的博客只有从论文里摘出的介绍&#xff0c;没有数据集文件详细的样子&#xff0c;下载数据集之后&#xff0c;对数据集具体的构成做一个补充的笔记。 下载链接&#xff1a;https://ai-studio-online.bj.bcebos.com/v1/7d4a3cf558254bbaaf4778ea336cb14ed8bbb96a7f2a…

记一次渗透测试实战之Sightless

信息收集 端口扫描 使用nmap进行端口探测&#xff0c;发现存在21、22、80端口开放。 FTP未授权访问 尝试21端口未授权访问。 目录爆破 使用工具进行爆破目录。 未发现有用的路径&#xff0c;接着尝试访问80端口。 Web网站 访问主页 发现存在一个数据库调用页面 右上角有一…

前端监控的具体实现细节

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【网络安全 | 漏洞挖掘】我如何通过Cookie Manipulation发现主域上的关键PII?

未经许可,不得转载。 文章目录 正文正文 在分析 Example.com 的认证机制时,我注意到一个特定的 cookie,USER_ID,包含了一个具有预测性的会话标识符,其格式为: USER_ID="VYCVCDs-TZBI:XXXX-random-data"其中,XXXX 是由四个大写字母组成的部分,我使用 Burp S…

PostgreSQL 的崛起与无服务器数据库的新时代

根据 2023 年 Stack Overflow 开发人员调查 &#xff0c;PostgreSQL 超越 MySQL 成为最受开发人员推崇和期望的数据库系统&#xff0c;这是一个重要的里程碑。这一转变反映了开发人员社区对 PostgreSQL 强大的功能集、可靠性和可扩展性的日益认同。 这种不断变化的格局激发了数…

计算机视觉+Numpy和OpenCV入门

Day 1&#xff1a;Python基础Numpy和OpenCV入门 Python基础 变量与数据类型、函数与类的定义、列表与字典操作文件读写操作&#xff08;读写图像和数据文件&#xff09; 练习任务&#xff1a;写一个Python脚本&#xff0c;读取一个图像并保存灰度图像。 import cv2 img cv2.im…

cesium基础设置

cesium官网下载&#xff1a;https://cesium.com/downloads/ 1.安装cesium 选择下载到本地使用&#xff0c;或者通过npm下载到项目中 2.代码书写 &#xff08;1&#xff09;创建容器 <div id"cesiumContainer" style"width: 100%; height: 100%"><…

C++ 实践扩展(Qt Creator 联动 Visual Studio 2022)

​ 这里我们将在 VS 上实现 QT 编程&#xff0c;实现如下&#xff1a; 一、Vs 2022 配置&#xff08;若已安装&#xff0c;可直接跳过&#xff09; 点击链接&#xff1a;​​​​​Visual Studio 2022 我们先去 Vs 官网下载&#xff0c;如下&#xff1a; 等待程序安装完成之…

《解锁自然语言处理:让公众正确拥抱AI语言魔法》

在当今数字化浪潮中&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术作为人工智能领域的璀璨明珠&#xff0c;正以惊人的速度融入我们的生活。从智能语音助手到智能客服&#xff0c;从机器翻译到内容创作辅助&#xff0c;NLP技术无处不在。然而&#xff0c;如同任何强…

uniapp webview嵌入外部h5网页后的消息通知

最近开发了个oa系统&#xff0c;pc端的表单使用form-create开发&#xff0c;form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。移动端使用uniapp开发&#xff0c;但是因为form-create移动端只支持vant&#xff0c;不支持uniapp。官…

Python在网络安全中的应用 python与网络安全

前言 网络安全是保护网络、系统和程序免受数字攻击的做法。据估计&#xff0c; 2019 年该行业价值 1120 亿美元&#xff0c;到2021 年估计有 350 万个职位空缺。 许多编程语言用于执行与网络安全相关的日常任务&#xff0c;但其中一种已成为行业标准&#xff1a;Python&#…

设计模式15:中介者模式

系列总链接&#xff1a;《大话设计模式》学习记录_net 大话设计-CSDN博客 1.概述 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为设计模式&#xff0c;旨在通过一个中介对象来封装一系列对象之间的交互方式&#xff0c;从而减少这些对象间的直接依赖。在该模式…

golang常用库之-swaggo/swag根据注释生成接口文档

golang常用库之-swaggo/swag库根据注释生成接口文档 什么是swaggo/swag github&#xff1a;https://github.com/swaggo/swag 参考文档&#xff1a;https://golang.halfiisland.com/community/pkgs/web/swag.html#%E4%BD%BF%E7%94%A8 swaggo/swag 是 Swagger API 2.0 在 go 语…

爬取网站内容转为markdown 和 html(通常模式)

我们遇到一些自己喜欢内容&#xff0c;想保存下来&#xff0c;手动复制粘贴很麻烦&#xff0c;我们使用 python 来爬取这些内容。 一、代码 downlod.py import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin# 目标网页&#xff08;可…