【API Gateway 技术选型】
文章图片
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。
核心是一个透明代理,可以用它来实现一个专用的基础设施层以提供服务间的通信,进而为软件应用提供服务发现、路由、错误处理以及服务可见性等功能,而无需侵入应用内部本身的实现。
推荐阅读
- Redis|Redis性能解析--Redis为什么那么快()
- 程序设计|IT业比较好的几个社区论坛
- 1. GRPC的使用
- elasticsearch浅入
- Redis事务处理不回滚
- 数据库|replication-manager之switchover剖析
- java|什么拜占庭将军问题(比特币是如何解决的?——深入浅出分布式共识性(一))
- 中间件|中间件 — Apache POI & EasyExcel(POI读写03和07版本excel、EasyExcel读写07版本excel)
- Springboot整合RabbitMQ--初学者探路者