API Gateway 技术选型

API Gateway 技术选型_第1张图片

1、 kong

优点: nginx + lua,提供了许多有价值的插件;
缺点:与我们整体技术栈不匹配,维护承包比较高

Nginx 采用的是 master-worker 模型,一个 master 进程管理多个 worker 进程,基本的事件处理都是放在 woker 中,master 负责一些全局初始化,以及对 worker 的管理。在OpenResty中,每个 woker 使用一个 LuaVM,当请求被分配到 woker 时,将在这个 LuaVM 里创建一个 coroutine(协程)。协程之间数据隔离,每个协程具有独立的全局变量_G。

ps. 协程和多线程下的线程类似:有自己的堆栈,自己的局部变量,有自己的指令指针,但是和其他协程程序共享全局变量等信息。线程和协程的主要不同在于:多处理器的情况下,概念上来说多线程是同时运行多个线程,而协程是通过代码来完成协程的切换,任何时刻只有一个协程程序在运行。并且这个在运行的协程只有明确被要求挂起时才会被挂起。

2、Spring cloud zuul1

优点:编程模型简单、开发调试运维简单,线程请求、处理、响应都在以一个线程处理。线程局部变量(ThreadLocal)在同步线程模型下可以使用
缺点: per thread per connetcion

3、Zuul2(场景IO密集型)

优点:采用了Netty实现异步非阻塞编程模型,线程开销小,连接数容易扩展

缺点:编程模型复杂、开发调试复杂、ThreadLocal不支持

4、Spring Cloud gateway

zuul2连续跳票和zuul1的性能表现不是很理想,Spring这样的整合专家可能也不愿意再继续等待, 所以催生了spring孵化Gateway项目

Spring Cloud Gateway是由spring官方基于Spring5.0、Spring Boot2.x、Project Reactor等技术开发的网关,目的是代替原先版本中的Spring Cloud Netfilx Zuul,目前Netfilx已经开源了Zuul2.0,但Spring没有考虑集成,而是推出了自己开发的Spring Cloud GateWay

Spring Cloud 基于 Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。

4、Netty自研

优势: 1、完整掌握HTTP协议处理过程 2、掌握异步处理IO的过程 3、能与内部协议进行较好得结合 4、和内部的配置中心、注册中心、安全中心能够较好对接
劣势: 1、研发周期较长,短时间可能不会有产出 2、HTTP协议需要踩坑 3、大量性能优化过程

5、Linkerd

Linkerd 是 Service Mesh(服务网格)技术的一个实现,另一个实现是 Istio。
核心是一个透明代理,可以用它来实现一个专用的基础设施层以提供服务间的通信,进而为软件应用提供服务发现、路由、错误处理以及服务可见性等功能,而无需侵入应用内部本身的实现。

你可能感兴趣的:(中间件)