微服务-微服务为什么要用到 API 网关

news2024/11/17 10:32:11

什么是微服务

微服务架构(通常简称为微服务)是指开发应用所用的一种架构形式。通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。
在处理一个用户请求时,基于微服务的应用可能会调用许多内部微服务来共同生成其响应。微服务是互联网业务发展的结果,互联网业务的飞速发展导致系统的架构也在不断地发生变化,总体来说,系统的架构大致经历了:单体应用架构—>
SOA 架构—>微服务架构 的演变,具体发展历程和各自的优缺点如下表所示。

因此,微服务是互联网发展的必然结果,很多传统公司的系统架构也在逐步微服务化。但是,随着互联网业务的发展,API 的数量也在剧增,使用网关对API统一管理也将面临挑战,选择一个更强大的
API 网关,可以有效地增强系统的监控、容灾、鉴权和限流等能力。

什么是微服务网关

API网关是一个服务器,是系统的唯一入口。 从面向对象设计的角度看,它与外观模式类似。

API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、协议转换、限流熔断、静态响应处理。

API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。 通常,网关也是提供REST/HTTP的访问API。

微服务网关作为微服务后端服务的统一入口,它可以统筹管理后端服务,主要分为数据平面和控制平面:

数据平面主要功能是接入用户的HTTP请求和微服务被拆分后的聚合。使用微服务网关统一对外暴露后端服务的API和契约,路由和过滤功能正是网关的核心能力模块。另外,微服务网关可以实现拦截机制和专注跨横切面的功能,包括协议转换、安全认证、熔断限流、灰度发布、日志管理、流量监控等。
控制平面主要功能是对后端服务做统一的管控和配置管理。例如,可以控制网关的弹性伸缩;可以统一下发配置;可以对网关服务添加标签;可以在微服务网关上通过配置Swagger功能统一将后端服务的API契约暴露给使用方,完成文档服务,提高工作效率和降低沟通成本。

微服务遇到的挑战

微服务网关应该首先要具备 API 路由能力,微服务数量变多,API 数量急剧增加,网关还可以根据具体的场景作为流量过滤器来使用,以提供某些额外可选功能,因此对微服务
API Gateway 提出了更高要求,比如:

  • 可观测性:在以往的单体应用中,排查问题往往通过查看日志定位错误信息和异常堆栈;但是在微服务架构中服务繁多,出现问题时的问题定位变得非常困难;因此,如何监控微服务的运行状况、当出现异常时能快速给出报警,这给开发人员带来很大挑战。

鉴权认证:而微服务架构下,一个应用会被拆分成若干个微应用,每个微应用都需要对访问进行鉴权,每个微应用都需要明确当前访问用户以及其权限。尤其当访问来源不只是浏览器,还包括其它服务的调用时,单体应用架构下的鉴权方式就不是特别合适了。在微服务架构下,要考虑外部应用接入的场景、用户 -

  • 服务的鉴权、服务 - 服务的鉴权等多种鉴权场景。
  • 系统稳定性:若大量请求超过微服务的处理能力时,可能会将服务打垮,甚至产生雪崩效应、影响系统的整体稳定性。
  • 服务发现:微服务的分散管理,让微服务的负载均衡的实现也更具有挑战性。

解决方案

API 网关作为客户端和服务端的中间桥梁,为微服务系统提供统一的管理机制:
除了基础的请求分发、API 管理和条件路由等功能,还包括身份验证、监控报警、调用链追踪、负载均衡、限流隔离和熔断降级。身份认证:下图表示的是微服务联合
API 网关如何进行身份认证的,由图可见所有请求都通过网关,从而有效地隐藏了微服务。


监控报警/调用链追踪:
API 作为客户端和服务端的中间桥梁,是微服务监控的最好载体,API 网关监控功能的主要职责是及时发现网关以及后端服务器的连接异常,在 API
的监控平台上面用户可以随时查看日志信息,监控信息,调用链等等,并且主机发生的任何异常都会自动报警到控制台。有些网关甚至可以做到给客户端和服务端双向报警。

限流隔离/熔断降级:
随着互联网业务规模的增加,系统的并发度增高,多个服务之间相互调用链路,一条核心链路往往可能调用十个服务。如果在链路中,某个服务的
rt(响应时间)急剧上升,上游服务不断请求,造成恶性循环,上游等待结果线程数越多,使得更上游服务阻塞最终整条链路无法使用,从而导致服务雪崩,所以对入口流量进行整治管理是很有必要的,下图表示微服务系统是如何结合
API 网关进行限流隔离和熔断降级的。

主流网关选择

在微服务领域,有许多开源网关实现,有 NGINX、Kong、Apache APISIX 和 Envoy 等,Java 技术栈的有 Netfilx Zuul、Spring Cloud Gateway、Soul 等。或许你会问“有了
NGINX 和 Kong,为什么还需要 Apache APISIX?” ,下面做个简单对比。

网关痛点优势
NGINX修改配置需要 Reload 才能生效,跟不上云原生的发展。1. 老牌应用;2. 稳定可靠,久经考验;3. 高性能。
Apache APISIX文档不够丰富和清晰,需要待改进。1. Apache 基金会顶级项目;2. 技术架构更贴合云原生;3. 性能表现优秀;4. 生态丰富;5. 除了支持 Lua 开发插件外,还支持 Java、Go、Python、Node 等语言插件
Kong1. 默认使用 PostgreSQL 或 Cassandra 数据库,使得整个架构非常臃肿,并且会带来高可用的问题;2. 路由使用的是遍历查找,当网关内有超过上千个路由时,它的性能就会出现比较急剧的下降;3. 一些重要功能是需要付费的。1. 开源 API 网关的鼻祖,用户数众多;2. 性能满足大部分用户的需求;3. 生态丰富;4. 支持 Lua 和 Go 开发插件。
Spring Cloud Gateway虽然 Spring 社区成熟,但是 Gateway 资源缺乏。1. 内置了非常多的开箱即用功能,并且都可以通过 SpringBoot 配置或者手工编码链式调用来使用;2. Spring 系列可扩展性强,易配置,可维护性好; 3. Spring 社区成熟;4. 简单易用;5. 对于 Java 技术栈来说方便
Traefik生产案例不太多1. 基于 golang开发 2. 云原生可编程 api/对接各种服务发现

参考

微服务为什么要用到 API 网关?
5 种主流API网关技术选型,yyds!

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

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

相关文章

C语言标准CRC-16校验函数

C语言标准CRC-16校验函数 CRC-16校验产生2个字节长度的数据校验码,通过计算得到的校验码和获得的校验码比较,用于验证获得的数据的正确性。获得的校验码是随数据绑定获得。 CRC校验原理及标准CRC-8校验函数可参考:C语言标准CRC-8校验函数。…

48.现有移动端开源框架及其特点—MDL(mobile-deep-learning)

48.1 功能特点 一键部署,脚本参数就可以切换ios或者android支持iOS gpu运行MobileNet、squeezenet模型已经测试过可以稳定运行MobileNet、GoogLeNet v1、squeezenet、ResNet-50模型体积极小,无任何第三方依赖。纯手工打造。提供量化函数,对32位float转8位uint直接支持,模型…

嵌套列表,与摩尔投票进阶

title: “Python fishC 22” author: “hou wei” date: “2023-04-16” output: html_document knitr::opts_chunk$set(echo TRUE)问答题 0.请问 运算符和 is 运算符有什么区别呢? 在Python中运算符用于比较两个变量的值是否相等,而is运算符用于判断…

2023年MathorCup数模A题赛题详细思路

MathorCup俗称妈杯,是除了美赛国赛外参赛人数首屈一指的比赛,而我们的妈杯今天也如期开赛。今年的妈杯难度,至少在我看来应该是2023年截至目前来讲最难的一场比赛。问题的设置、背景的选取等各个方面都吐露着我要难死你们的想法。难度是恒定的…

MySQL-自带工具介绍

目录 🍁mysql 🍁mysqladmin 🦐博客主页:大虾好吃吗的博客 🦐MySQL专栏:MySQL专栏地址 MySQL数据库不仅提供了数据库的服务器端应用程序,同时还提供了大量的客户端工具程序,如mysql&a…

elasticsearch——自动补全

拼音分词器 当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图: 要实现根据字母做补全,就必须对文档按照拼音分词。在GitHub上恰好有elasticsearch的拼音分词插件。地址: GitHub - medcl/elasticse…

考研数二第十六讲 不定积分-换元积分和分部积分以及有理函数的积分

第一类换元积分法——凑微分法 假设现在我们要对一个复合函数f[g(x)] 求不定积分,但我只有∫f(x)dxF(x)\int f(x)dx F(x)∫f(x)dxF(x) 这一积分公式。这时候就要想,要是中括号里不是g(x) 而是 x该多好啊。 如果我直接令ug(x) ,强行让原式变…

Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?

文章目录Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?配置环境构建 RedisSharding1安装 Redis配置 RedisSharding1构建 RedisSharding2安装 Redis配置 RedisSharding2构建 Sentinel Cluster配置 Sentinel启动 Sentinel构建 Twemproxy Cluster安装 Twe…

AI 腾讯云人脸核身之独立H5接入

一、概述 人脸识别,使用官方API:腾讯云人脸核身之独立H5接入。接口官方返回code 0 表示成功,其他code码值均为对应码值信息,详见错误码。 注意: 1.合作方上送身份信息的计算签名参数与启动人脸核身计算签名参数不一致&#xff0…

Python-DQN代码阅读(13)

目录 1.代码 1.1 代码阅读 1.2 代码分解 1.2.1 导入库 1.2.2 data np.loadtxt(performance.txt) 1.2.3 mva np.zeros((data.shape[0]), dtypenp.float) 1.2.4 mva[i] data[i,1],mva[i] alpha * data[i,1] (1.0 - alpha) * mva[i-1] 1.2.5 plt.plot(data…

【C++项目】高并发内存池

前言: 本篇博客大致记录基于tcmalloc实现高并发内存池的思想与实现方案。 使用语言:C,编译器:vs2022,开始时间:2023/4/3,结束时间:2023/4/12。 项目源码地址:Cproject: 我…

第八天并发编程篇

一、简述线程、进程、程序的基本概念? 1.进程: 我们把运行中的程序叫做进程,每个进程都会占用内存与CPU资源,进程与进程之间互相独立. 2.线程: 线程就是进程中的一个执行单元,负责当前进程中程序的执行。一个进程可以包含多个线程…

【电子秤方案】LCD口袋秤芯片方案

LCD高精度口袋电子秤方案,即便携式称重仪,是一种应用于生活中的称重设备。便珠宝秤具有体积小、重量轻、功耗低、结构紧凑等特点。 LCD高精度口袋电子秤方案产品简介 口袋电子秤是一种体积小、重量轻、功耗低,可用于多种场合的电子秤。它通常…

如何检查 Linux 内存使用量是否耗尽?这5个命令堪称绝了!

在 Linux 操作系统中,内存是一个关键资源,用于存储正在运行的程序和操作系统本身的数据。如果系统的内存使用量过高,可能会导致性能下降、应用程序崩溃或者系统崩溃。因此,了解如何检查 Linux 内存使用量是否耗尽是非常重要的。下…

【网络安全】文件上传绕过思路

引言 分享一些文件上传绕过的思路,下文内容多包含实战图片,所以打码会非常严重,可多看文字表达;本文仅用于交流学习, 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人…

什么是划分子网?网络工程师划分子网有啥技巧?

随着互联网的快速发展,越来越多的组织和企业在其内部建立了复杂的网络系统来满足日常的信息传输和资源共享需求。而在这些网络系统中,划分子网(也称为子网划分)作为一种常见的网络管理方法,为组织和企业提供了更加灵活…

【面试】记一次安恒面试及总结

文章目录SQL 注入sql注入的原理?如何通过SQL注入判断对方数据库类型?补充一下其他方法判断数据库类型时间盲注的函数XPath注入抓不到http/https包,怎么办?app无自己的ssl证书app有自己的ssl证书-证书绑定(SSL pinning)逻辑漏洞有哪…

【学习笔记】滑动窗口

acwing.滑动窗口https://www.acwing.com/problem/content/156/ 给定一个大小为 n≤106≤106 的数组。 有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: …

Python使用Opencv进行图像人脸、眼睛识别实例演示

效果展示 下面使用 haarcasecade_eye.xml 进行人眼识别的效果图: 人脸识别是一种可以自动检测图像或视频中存在的人脸的技术。它可以用于各种应用,例如安全控制,自动标记照片和视频,以及人脸识别解锁设备等。在这篇博客中&#…

水声功率放大器模块基于通道接收和发射的水声通信机的应用

实验名称:基于多通道接收和发射的水声通信机 研究方向:水声通信 测试设备:数模转化器、ATA-ML180水声功率放大器模块、示波器、接收换能器、发射换能器等。 图:实验原理 一、发射机的双通道发送实验: 实验过程&#xf…