自研API网关

API网关主要的作用有:接口转发、协议转换(http->dubbo)熔断降级、流量监控。

API网关的存在使系统增加了一个必须开发、部署和维护的高可用组件。如果这个组件没有处理好,那么 API 网关就会变成了应用的性能瓶颈。

技术栈调研

细节对比

技术栈 优点 缺点
Nginx+OpenResty 性能很好 依赖lua语言进行扩展,加大学习成本
Kong/APISIX 基于OpenResty,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可视化平台等,支持gRPC、Dubbo、http协议转换
Netflix Zuul1.0 案例丰富 基于阻塞IO、性能差
SpringCloud GateWay 异步非阻塞、集成SpringCloud性能好
Netfix Zuul1.0 性能接近SpringCloud GateWay Netfix闭源,前景不明

开源网关的不足之处

组件的附加功能太多-难以维护

技术栈不符合团队

性能参差不齐 Zuul1.0阻塞 APISIXluna语言编写

自研优势

因需制宜

研发需求是可以控制的 开源的需要去社区

运维成本低,不需要配备专职人员

技术选型:

基础框架:SpringMVC SpringBoot 原生java

网络通信框架:原生nio Mina Netty

注册中心: Zookeeper(注重数据一致性 不注重可用性) Euraka(SpringCloud) Etcd(通用 没有明显的优势) Nacos

配置中心:SpringCloud Apollo Nacos

关键点:

异步化设计:

​ 1.请求转发异步化

​ 2.请求响应异步化(双异步)

​ 3.插件过滤异步化(单异步)

充分使用缓存:

​ 用尽缓存:尽量使用内存

​ 提供吞吐量:本地缓冲、Disruptor、MPMC

设置合适的工作线程

本项目在进行过程中,发现了一些其他的问题所以目前将本项目搁置,优先完成go-redis的项目。