关于后端:微服务为什么要用到-API-网关

40次阅读

共计 3858 个字符,预计需要花费 10 分钟才能阅读完成。

本文介绍了 API 网关日志的价值,并以出名网关 Apache APISIX 为例,展现如何集成 API 网关日志。

作者程小兰,API7.ai 技术工程师,Apache APISIX Contributor。

原文链接

什么是微服务

微服务架构(通常简称为微服务)是指开发利用所用的一种架构模式。通过微服务,可将大型利用分解成多个独立的组件,其中每个组件都有各自的责任畛域。在解决一个用户申请时,基于微服务的利用可能会调用许多外部微服务来独特生成其响应。微服务是互联网业务倒退的后果,互联网业务的飞速发展导致系统的架构也在一直地发生变化,总体来说,零碎的架构大抵经验了:单体利用架构—> SOA 架构—> 微服务架构的演变,具体倒退历程和各自的优缺点如下表所示。

架构类型 简介 长处 毛病
单体利用架构 将所有的性能代码打包成一个服务。1. 架构简略,我的项目开发和保护成本低。 所有模块耦合在一起,比拟有利于小型我的项目的开发和保护;然而,对于大型项目来说却存在问题,比方:<br/> 1. 我的项目各模块之间过于耦合,一个模块的性能问题可能导致整个我的项目的不可用;<br/> 2. 我的项目的扩展性差。
SOA 架构 中文意思为“面向服务的架构”,通常蕴含多个服务,<br/> 一个服务通常以独立的模式存在于操作系统过程中,服务之间通过相互依赖或者通过通信机制来实现通信的,<br/> 最终提供一系列的性能。1. 系统集成:站在零碎的角度,解决企业零碎间的通信问题,把原先散乱、无布局的零碎间的网状结构,梳理成规整、可治理的零碎间星形构造;<br/> 2. 零碎的服务化:站在性能的角度,把业务逻辑形象成可复用、可组装的服务,通过服务的编排实现业务的疾速再 <br/> 3. 业务的服务化:站在企业的角度,把企业职能形象成可复用、可组装的服务。1. 服务的中心化,各服务之间存在依赖关系,如果某个服务呈现故障可能会造成服务的雪崩;<br/> 2. 服务之间的依赖与调用关系简单,测试部署的艰难比拟大。
微服务架构 微服务是在 SOA 上做的升华。微服务架构重点强调的一个是 ” 业务须要彻底的组件化和服务化 ”,<br/> 原有的单个业务零碎会拆分为多个能够独立开发、设计、<br/> 运行的小利用。各个小利用之间,互相去合作通信,来实现一个交互和集成,这就是微服务架构。1. 去中心化;<br/> 2. 通过服务实现组件化;<br/> 3. 按业务能力来划分服务和开发团队;<br/> 4. 基础设施自动化(Devops、自动化部署)。1. 开发的老本比拟高;<br/> 2. 会引发服务的容错性问题;<br/> 3. 会引发数据的一致性问题;<br/> 4. 会波及分布式事务。

因而,微服务是互联网倒退的必然结果,很多传统公司的零碎架构也在逐渐微服务化。然而,随着互联网业务的倒退,API 的数量也在剧增,应用网关对 API 对立治理也将面临挑战,抉择一个更弱小的 API 网关,能够无效地加强零碎的监控、容灾、鉴权和限流等能力。

什么是 API 网关

API 网关为客户与服务零碎之间的交互提供了对立的接口,也是治理申请和响应的中心点,抉择一个适宜的 API 网关,能够无效地简化开发并进步零碎的运维与管理效率。
API 网关在微服务架构中是零碎设计的一个解决方案,用来整合各个不同模块的微服务,对立协调服务。API 网关作为一个零碎拜访的切面,对外提供对立的入口供客户端拜访,暗藏零碎架构实现的细节,让微服务应用更为敌对;并集成了一些通用个性(如鉴权、限流、熔断),防止每个微服务独自开发,晋升效率,使零碎更加标准化,比方身份验证、监控、负载平衡、限流、降级与利用检测等性能。

为什么微服务须要 API 网关

如上图所示,API 网关作为客户端和微服务的中间层,它能够将微服务以对立的地址对外提供服务,将内部拜访这个地址的流量,依据适当的规定路由到外部集群中正确的服务节点之上,如果没有 API 网关,流量的出入口则不对立,客户端就须要晓得所有服务的访问信息,微服务的意义将不复存在,所以,微服务网关在微服务零碎架构中的存在是必要的。此外,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?”,上面做个简略比照。

网关 痛点 劣势
NGINX1. 批改配置须要 Reload 能力失效,跟不上云原生的倒退。1. 老牌利用;<br/> 2. 稳固牢靠,久经考验;<br/> 3. 高性能。
Apache APISIX1. 文档不够丰盛和清晰,须要待改良。1. Apache 基金会顶级我的项目;<br/> 2. 技术架构更贴合云原生;3. 性能体现优良;<br/> 4. 生态丰盛;5. 除了反对 Lua 开发插件外,还反对 Java、Go、Python、Node 等语言插件。
Kong1. 默认应用 PostgreSQL 或 Cassandra 数据库,使得整个架构十分臃肿,并且会带来高可用的问题;<br/> 2. 路由应用的是遍历查找,当网关内有超过上千个路由时,它的性能就会呈现比拟急剧的降落;<br/> 3. 一些重要性能是须要付费的。1. 开源 API 网关的鼻祖,用户数泛滥;<br/> 2. 性能满足大部分用户的需要;<br/> 3. 生态丰盛;<br/> 4. 反对 Lua 和 Go 开发插件。
Envoy1. 应用 C++,二次开发难度大;<br/> 2. 除了 C++ 开发 filter 外,还反对 WASM 和 Lua。1. CNCF 毕业我的项目 更适宜服务网格场景多语言架构部署。
Spring Cloud Gateway1. 尽管 Spring 社区成熟,然而 Gateway 资源不足。1. 内置了十分多的开箱即用性能,并且都能够通过 SpringBoot 配置或者手工编码链式调用来应用;<br/> 2. Spring 系列可扩展性强,易配置,可维护性好;<br/> 3. Spring 社区成熟;<br/> 4. 简略易用;<br/> 5. 对于 Java 技术栈来说不便。

总结

随着互联网的倒退,互联网企业的业务也在一直的飞速发展,进而导致系统的架构也在一直的产生着变动,微服务架构曾经在泛滥公司失去广泛应用。随着微服务的数据越来越多,API 的数量也越来越多,对于大流量的治理,抉择一个优良的 API 网关是至关重要的。本文列举了常见网关,并进行比照,列出各自的优缺点,如果你正在做 API 网关的技术选型,或者你的微服务零碎呈现了性能问题,再或者你想搭建一个高效稳固的微服务零碎,心愿本文能够带给你肯定的启发。

对于 API7.ai 与 APISIX

API7.ai 是一家提供 API 解决和剖析的开源根底软件公司,于 2019 年开源了新一代云原生 API 网关 — APISIX 并捐献给 Apache 软件基金会。尔后,API7.ai 始终踊跃投入反对 Apache APISIX 的开发、保护和社区经营。与千万贡献者、使用者、支持者一起做出世界级的开源我的项目,是 API7.ai 致力的指标。

正文完
 0