自研高性能网关-技术选型-架构设计
自研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的项目。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.