【微服务架构实战】第1篇之API网关概述

news2024/12/26 0:09:00

1.网关概述

采用分布式、微服务的架构模式开发系统时,API 网关是整个系统中必不可少的一环。

1.1 没有网关会有什么问题?

image

在微服务架构模式下,1个系统会被拆分成多个微服务,如果每个微服务都直接暴露给调用方,会有以下问题:

  • 调用方直接调用不同的微服务,增加调用方的代码复杂性,维护起来非常复杂

  • 调用方记录和管理每个微服务的接口,缺乏安全性

  • 需要在每个微服务中增加对用户的认证和鉴权逻辑或者限流的逻辑,代码冗余

  • 由于每个微服务部署的服务器不同,存在跨域的请求

1.2 增加API网关服务

上面的问题都可以借助 API 网关来解决。所谓的API网关,就是指系统的统一入口**,所有的外部请求率先经过网关,调用方只需要知道网关的地址,与网关交互即可。**

image

它屏蔽了系统的内部复杂结构,为调用方提供统一服务。

一些与业务功能无关的公共逻辑可以在这里实现,例如认证、授权、限流、监控、路由转发等等

2.主流的网关解决方案

业界通过不断的探索与创新,出现了多种API网关的解决方案。

现在比较主流的API网关有以下几种:

1. Nginx + Lua

Nginx 是一个高性能的HTTP和反向代理服务器,Nginx 一方面可以做反向代理,另一方面可以做静态资源服务器。

Nginx 的一些常用插件本身就实现了限流、缓存、黑白名单和灰度发布的功能,再加上 Nginx 的反向代理和负载均衡,便能够实现对服务接口的负载均衡和高可用。

而 Nginx 支持 Lua 语言,通过 Lua 语言可以完成简单的业务逻辑实现。所以可以基于 Nginx+Lua 脚本实现 API 网关,较麻烦。

2. Kong

Kong 网关本身是基于 Nginx + Lua 实现的,但比 Nginx 提供了更简单的配置方式,数据采用了ApacheCassandra/PostgreSQL储存,性能高并且比较稳定,并且提供了一些优秀的插件,例如验证、日志、调用频次限制等。Kong 网关提供了大量的插件来扩展应用,通过设置不同的插件可以为服务提供各种增强的功能,并且提供了管理页面。

但是和 SpringCloud 整合比较难,并且只支持 http 协议;进行二次开发和自由扩展困难。

3.Zuul

Zuul 是 NetFlix 公司开源的一个 API网关组件,SpringCloud 对其进行二次开发基于 SpringBoot 注解式封装做到开箱即用。目前来说结合 SpringCloud 提供的服务治理体系,可以做到请求转发,根据配置或者默认的路由规则进行路由和负载均衡,无缝继承 Hystrix。

Zuul 本身是的设计是基于单线程的接收请求和转发处理,是阻塞 IO,不支持长连接,2.0开始支持异步调用模式。

但是 Zuul 网关无法实现动态配置规则,依赖的组件相对来说也比较多,处理 http 请求依赖的是 web容器,在性能上不如 Nginx。

4.SpringCloud Gateway

SpringCloud Gateway 作为 SpringCloud 生态系统中的网关,目标是替代 Zuul,其不仅提供了统一的 API 路由管理方式,并且还基于 Filter 链的方式提供了网关的基本功能,例如:安全、监控、重试、限流等。

优点:

  • 性能是第一代网关 Zuul 的 1.6 倍

  • 功能强大:内置了很多实用的功能,例如:路由转发、监控、限流等

  • 简单易用、设计优雅、容易扩展

缺点:

  • 其实现依赖于 Netty 和 WebFlux,不是传统的 Servlet 编程模型,基于响应式编程,源码学习成本高

  • 需要 Spring Boot 2.0 以上才能支持

  • 性能相对 zuul2、openrestry、nginx、kong来说是最差的,但是轻量级的网关系统还是首选gateway,出现性能瓶颈可以通过多加几台服务器的方式解决

SpringCloud Alibaba 技术栈中,并没有单独实现网关的组件。所以在我们的系统实现中,会使用SpringCloud Gateway 实现 API 网关功能。

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

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

相关文章

MySQL主键和唯一键的区别

主键和唯一键基本知识参考这篇文章 MySQL表的约束 ,本篇文章主要是谈一谈主键和唯一键的区别从而更好的理解唯一键和主键。 在上篇文章中已经提到 主键: primary key 用来唯一的约束该字段里面的数据,不能重复,不能为空&#x…

vue父页面调用子页面及方法及传参,鼠标光标定位

项目场景: vue父页面调用子页面及方法 问题描述 vue中父界面调用子界面及方法时界面可以调用,但是调用方法的时候第一次报错,但是关掉界面再次重新打开就没问题了 原因分析: 在我之前添加鼠标指针定位的时候,如果在…

记录scoped属性的使用和引发的问题

背景 在对表格数据进行样式处理时,通过业务逻辑判断,进行对符合要求的表格填充背景色,没有符合预期的效果。反复排查校验代码和判断逻辑,都没有什么问题,可能还是样式上出现问题。再通过F12 选取元素对表格设置背景色时…

获取树形结构中,父节点下所有子/孙节点(递归方式)

获取树形结构中,父节点下所有子/孙节点(递归方式)1 树形结构(TreeItem类)2 测试代码(main函数)3 运行效果1 树形结构(TreeItem类) 这里通用型树形结构为TreeItem类&…

初学Java web(七)RequestResponse

Request&Response Request:获取请求数据 Response:设置响应数据 一.Request对象 1.Request继承体系 Tomcat需要解析请求数据,封装为requestx对象并且创建requestx对象传递到service方法中 使用request对象,查阅JavaEE API文档的HttpServletReque…

rocketMq架构原理精华分析(一)

rocketMq架构原理精华分析是我们这篇文章的核心,从消息中间件的对比、架构模型、消息模型、常见问题等逐一分析: 一、中间件对比: RabbitMq 集群效果不太好,底层不是java 语言,研究原理比较困难; Kafka是…

前端面试题之计算机网络篇 OSI七层网络参考模型

互联网数据传输原理 |OSI七层网络参考模型 OSI七层网络参考模型 应用层:产生网络流量的程序表示层:传输之前是否进行加密或者压缩处理会话层:查看会话,查木马 netstat-n传输层:可靠传输、流量控制、不可…

亿级流量的互联网项目如何快速构建?手把手教你构建思路

一. 大流量的互联网项目 1.项目背景 索尔老师之前负责的一个项目,业务背景是这样的。城市的基础设施建设是每个城市和地区都会涉及到的,如何在基建工地中实现人性化管理,是当前项目的主要诉求。该项目要实现如下目标: 工地工人的…

C语言实现http下载器(附代码)

C语言实现http的下载器。 例:做OTA升级功能时,我们能直接拿到的往往只是升级包的链接,需要我们自己去下载,这时候就需要用到http下载器。 这里分享一个: 功能: 1、支持chunked方式传输的下载 2、被重定…

Apollo开放平台8.0发布:多维升级“为开发者而生”

Apollo开放平台8.0重磅发布:多维升级“为开发者而生” Apollo开放平台迎来8.0版本,百度自动驾驶开放平台迈向易用性时代 百度Apollo EDU计划进展公布:已覆盖自动驾驶技术人才33.5万、700多所院校 Apollo Studio学习实践社区上线,新…

剑指offer----C语言版----第一天

目录 1. 数组中重复的数字Ⅰ 1.1 题目描述 1.2 思路一 1.3 思路二 1.4 思路三(最优解) 1. 数组中重复的数字Ⅰ 原题:剑指 Offer 03. 数组中重复的数字 - 力扣(LeetCode)https://leetcode.cn/problems/shu-zu-zhong-…

Python语言快速入门上

目录 1、前言 2、变量和常量 1)Python对象模型 2)Python变量 二、运算符和表达式 【运算符和表达式】 【位运算符】 【逻辑运算符】 【成员运算符】 【身份运算符】 【常用内置函数】 【基本输入输出】 【模块导入与使用】 【Python代码编…

【PCB专题】Allegro导出3D文件

在PCB布局时,已经决定了大部分器件要放置的位置。如接口、主要的芯片、模块等。因为放置好器件后可能与结构干涉,如果没有发现,那么不得不在Layout的后期调整器件位置,增加工作量。所以前期布局基本确定后就需要导出3D文件给结构工程师,由他查看是否有器件与结构、螺丝孔等…

全志Tina Linux Display 开发指南支持百问网T113 D1-H哪吒DongshanPI-D1s V853-Pro等开发板

1 概述 让显示应用开发人员了解显示驱动的接口及使用流程,快速上手,进行开发;让新人接手工作时能快速地了解驱动接口,进行调试排查问题。sunxi 平台DE1.0/DE2.0。与显示相关的应用开发人员,及与显示相关的其他模块的开…

操作系统期末考试必会题库1——引言+用户界面

1.请简要描述操作系统的定义及其功能。 操作系统定义: 是计算机系统中的一个系统软件,是一些程序模块的集合 ,它们管理和控制计算机系统中的软硬件资源,合理的组织计算机的工作流程,以便有效的利用这些资源为用户提供一…

Linux用户权限详解

为什么有人冲了钱就能享受至尊VIP待遇?为什么冲了黄钻、绿钻、紫钻就会享受一些特殊活动呢?我们起初都是一群普通用户,为什么有些人就能通过某些手段得到一些异于常人的服务呢?这其中的奥秘是什么呢?接下来带大家了解这…

【Vue】course_1

一、vue简介 Vue是一款用于构建用户界面的 JavaScript 框架。 它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。 无论是简单还是复杂的界面,Vue 都可以胜任。 二、vue3选项式…

ASEMI肖特基二极管MBR30100CT和MBR40200PT有什么区别

编辑-Z 别看ASEMI肖特基二极管MBR30100CT和MBR40200PT两种型号从名字上看很像,其实他们的参数和封装都是不一样的,具体MBR30100CT和MBR40200PT有什么区别呢? 肖特基二极管MBR30100CT参数: 型号:MBR30100CT 封装&…

[开源工具]使用Fiddler/Postman简单计算QPS[新手开箱可用]

使用Fiddler/Postman简单计算QPS1.什么是QPS?2.怎么计算QPS?3.如何使用Fiddler/Postman得到一个API接口的QPS?3.1Fiddler使用3.2Postman使用4.如何得到本机的核心数?5.根据公式计算QPS?6.扩展计算单机可支撑PV(理论值)?1.什么是QPS? qps即每秒查询率,是对一…

Postfix + Extmail 企业邮件服务器搭建

ExtMail套件用于提供从浏览器中登录、使用邮件系统的Web操作界面,而Extman套件用于提供从浏览器中管理邮件系统的Web操作界面。它以GPL版权释出,设计初衷是希望设计一个适应当前高速发展的IT应用环境,满足用户多变的需求,能快速进…