微服务为什么要用到API网关? 您所在的位置:网站首页 多功能网关有什么用 微服务为什么要用到API网关?

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

2023-04-17 14:49| 来源: 网络整理| 查看: 265

为什么微服务需要 API 网关

Architecture Diagram

如上图所示,API 网关作为客户端和微服务的中间层,它可以将微服务以统一的地址对外提供服务,将外部访问这个地址的流量,根据适当的规则路由到内部集群中正确的服务节点之上,如果没有 API 网关,流量的出入口则不统一,客户端就需要知道所有服务的访问信息,微服务的意义将不复存在,所以,微服务网关在微服务系统架构中的存在是必要的。此外,API 网关在系统的可观测性、身份鉴权认证、稳定性和服务发现等方面也会发挥重要作用。

微服务遇到的挑战

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

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

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

系统稳定性:若大量请求超过微服务的处理能力时,可能会将服务打垮,甚至产生雪崩效应、影响系统的整体稳定性。

服务发现:微服务的分散管理,让微服务的负载均衡的实现也更具有挑战性。

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

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

系统稳定性:若大量请求超过微服务的处理能力时,可能会将服务打垮,甚至产生雪崩效应、影响系统的整体稳定性。

服务发现:微服务的分散管理,让微服务的负载均衡的实现也更具有挑战性。

API 网关作为客户端和服务端的中间桥梁,为微服务系统提供统一的管理机制:

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

Architecture Diagram

监控报警/调用链追踪:

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

Architecture Diagram

限流隔离/熔断降级:

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

Architecture Diagram 主流网关选择

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

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

总结

随着互联网的发展,互联网企业的业务也在不断的飞速发展,进而导致系统的架构也在不断的发生着变化,微服务架构已经在众多公司得到广泛应用。随着微服务的数据越来越多,API 的数量也越来越多,对于大流量的治理,选择一个优秀的 API 网关是至关重要的。

本文列举了常见网关,并进行对比,列出各自的优缺点,如果你正在做 API 网关的技术选型,或者你的微服务系统出现了性能问题,再或者你想搭建一个高效稳定的微服务系统,希望本文可以带给你一定的启发。

END

微软开发快速「结束进程」功能

🌟 活动推荐

2023 年 5 月 27-28 日,GOTC 2023 全球开源技术峰会将在上海张 江科学会堂隆重举行。

为期 2 天的开源行业盛会,将以行业展览、主题发言、特别论坛、分论坛、快闪演讲的形式来诠释此次大会主题 ——“Open Source, Into the Future”。 与会者将一起探讨元宇宙、3D 与游戏、eBPF、Web3.0、区块链等热门技术主题,以及 OSPO、汽车软件、AIGC、开源教育培训、云原生、信创等热门话题,探讨开源未来,助力开源发展。返回搜狐,查看更多



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有