综述
经调研,使用Spring Cloud Zuul解决方案的占多数,已经能满足绝大多数公司需求。但除了一些超级公司外,比如阿里,京东,他们是自己撸的一套网关。此外,点评直接采用的nginx负载均衡前置网关,而没用第七层网关,原因据说是七层网关会影响性能,但由于对其架构不甚了解,所以也不得而知。
一 各企业网关调研
1 京东: tomcat sevelet ,基于netty自研
目前大部分服务位于tomcat,但由于tomcat只能同步,所以正在向netty一步步迁移
2 苏宁: netty
3 点融:基于zuul定制
基于框架:https://github.com/venus-boot...,saluki is a microservice framework rely on grpc-java,可能是结合Spring cloud的东西做了一些定制化开发,加入比如rpc的一些东西。
saluki gateway是以zuul、saluki、oauth2为基础构建的网关系统,主要功能如下
api限流,利用令牌桶机制进行限流操作
授权,oauth2进行api的授权
协议转化,将http的请求转化为grpc的服务请求
saluki框架在Spring Cloud基础上进行了进一步封装,提供了对rpc的支持、用户权限等等
4 美团点评
貌似没有第七层网关,只有nginx+lua,基于tengine定制
咨询过美团的童鞋,他说网关会增加机器负担,而且有可能成为系统瓶颈。因此将统一的鉴权、日志都打成统一的jar包,让各个微服务自己去做,但具体系统的具体结构不得而知,可能存在一定的合理性,对于日活上亿体量的系统,或许网关确实有可能成为瓶颈,因为加入统一网关意味着机器数量增加一倍,
5 携程:zuul
6 megaease
还有megaease这家公司,是IT骨灰级程序员兼网红陈皓所创建,他认为一个好的gateway需要具备如下关键技术
高性能。必须使用高性能的技术,而且需要高性能的语言(比如他所推崇的go)
抗流量。集群技术
业务逻辑。要能够支持简单的业务逻辑
服务化。可以不停机的修改管理配置
所以,他们自己用go开发了一套easegateway
产品说明:http://megaease.com/docs/gate...
其架构说明图如下
二 常用网关方案
网关(API Gateway)技术选型
zuul
kong
nginx+lua(nginx+openresty )
自己撸:难度大
网关(API Gateway)的设计要素
限流:实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则。
缓存:数据缓存。
日志:日志记录。
监控:记录请求响应数据,api耗时分析,性能监控。
鉴权:权限身份认证。
灰度:线上灰度部署,可以减小风险。
路由:路由是API网关很核心的模块功能,此模块实现根据请求,锁定目标微服务并将请求进行转发。
三 基于Zuul的网关设计
Spring Cloud生态中,标准配置是基于Zuul的网关,而且,已经有多加大型互联网公司是基于Zuul来实现,比如携程、点融,所以,我们不妨用Zuul网关来首先搭建网关,已经能满足大部分企业的需求了
四 探索,阿里无线: ACCS网关方案
阿里粑粑当然财大气粗,自己撸一个呗
在线集群用于实时消息,而离线集群用于诸如营销信息推广等允许很高延时等的的请求
以及两个优化点
用ECDH机密代替RSA。带来加密效率的巨大提升,以及SPDY协议
用类似tcp-fast-open的技术,在握手时直接带数据包