谈谈我想要的API网关

在当前的系统架构中,微服务架构大行其道,在微服务架构中一个很重要的组件就是API网关。

API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。 --百度

微服务本身当然需要有效的监控管理,而API作为微服务对外提供的核心能力,同样需要进行细致、高效的管控。
一个强大、高效、可靠、可控的API网关可以极大的提升对整个系统架构下的微服务API的梳理、管控能力,使得API用的放心,管的舒心。
目前业界也有多款成熟的API网关可用:Kong、Zuul、Traefik、Spring
Cloud Gateway等等

  • Kong
    基于Nginx+Lua开发,性能高,稳定,有多个可用的插件(限流、鉴权等等)可以开箱即用。
    问题:只支持Http协议;二次开发,自由扩展困难;提供管理API,缺乏更易用的管控、配置方式。
  • Zuul
    Netflix开源,功能丰富,使用JAVA开发,易于二次开发;需要运行在web容器中,如Tomcat。
    问题:缺乏管控,无法动态配置;依赖组件较多;处理Http请求依赖的是Web容器,性能不如Nginx;
  • Traefik
    Go语言开发;轻量易用;提供大多数的功能:服务路由,负载均衡等等;提供WebUI
    问题:二进制文件部署,二次开发难度大;UI更多的是监控,缺乏配置、管理能力;
  • Spring Cloud Gateway & Zuul2
    开发完善中,期待一下。。。

综合比较一番后,除了常规的API网关应有的能力外,(我的)理想中的API网关要有哪些能力呢?

  1. 协议转换
    上游服务多种多样,虽然现在流行Spring Cloud架构,直接提供Http协议的服务API,但是毫无疑问,还是后端系统间采用RPC调用的较多,如果API网关可以对此类服务进行协议转换,对外将其适配为HTTP接口,对内仍为RPC调用,这无疑可以极大的提升系统整体性能,同时不用约束上游系统的实现方式,双赢!
  2. 动态配置
    API网关必然需要和多个系统打交道,一些配置工作如:路由映射,超时配置,服务地址,权重调整等等是必不可少的了,动态配置,动态加载,实时生效是一个提升稳定性的有效手段。
  3. 管控平台
    API网关是一个承前启后的重要节点,其管理着大量的来自不同系统的API,每时每刻都会有大量的请求通过API网关到达不同的上游系统服务,同样有大量的响应从上游回到API网关,并最终发送给调用者,除非所有服务的API永不出错,否则一个高效的管控平台必不可少!更重要的是不但要监控,更可以管理!

脑海中的Pampas

脑洞开一开,我需要的API网关大概应该是这个样_

谈谈我想要的API网关_第1张图片
image.png

造出来

把想法实现出来是一件有意思的事。
附上github项目地址……
PAMPAS@github
PAMPAS-UI@github

欢迎贡献Idea和Code

你可能感兴趣的:(谈谈我想要的API网关)