网关的产生背景
微服务架构演变
单体架构
所有服务集中在单个项目中,每次部署需要部署整个项目
好处:
- 部署简单: 由于是完整的结构体,可以直接部署在一个服务器上即可。
- 技术单一: 项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发。
- 用人成本低: 单个程序员可以完成业务接口到数据库的整个流程。
弊端
- 系统启动慢, 一个进程包含了所有的业务逻辑,涉及到的启动模块过多,导致系统的启动、重启时间周期过长;
- 系统错误隔离性差、可用性差,任何一个模块的错误均可能造成整个系统的宕机;
- 扩缩容困难:系统的扩容只能只对这个应用进行扩容,不能做到对某个功能点进行扩容;
- 线上问题修复周期长:任何一个线上问题修复需要对整个应用系统进行全面升级。
分布式架构
将系统进行垂直和横向拆分后分别部署在服务器上
- 纵向拆分:根据业务分类进行拆分
- 横向拆分:将拆分后的业务横向部署多个节点,保证服务高可用性
优点
- 增大系统容量:垂直或是水平拆分业务系统,让其变成一个分布式的架构
- 加强系统可用:通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性
模块重用度高 - 软件服务模块被拆分,开发和发布速度可以并行而变得更快
- 系统扩展性更高
- 团队协作流程改善
弊端
- 架构设计变得复杂(尤其是其中的分布式事务)
- 部署单个服务会比较快,但是如果一次部署需要多个服务,流程会变得复杂
- 系统的吞吐量会变大,但是响应时间会变长
- 运维复杂度会因为服务变多而变得很复杂
- 架构复杂导致学习曲线变大
- 测试和查错的复杂度增大
- 技术多元化,这会带来维护和运维的复杂度
- 管理分布式系统中的服务和调度变得困难和复杂
SOA架构
面向服务即将共用的服务抽取出来做为一个服务供所有系统使用,每个系统不再各自实现
ESB:是一个集中式的服务总线。通过ESB,可以实现集成业务处理,监控系统间消息流动,管理系统间交互的业务服务。ESB的关注点是集成,核心概念是服务和消息,主要方式是协议适配和中介处理。
微服务
- 优点:逻辑清晰、简化部署、可扩展、灵活组合,技术异构、高可靠
- 缺点:复杂度高、运维复杂、影响性能
微服务架构产生的原因
微服务架构基于SOA架构演变过来的,在传统的WebService架构中有如下问题:
- 依赖中心化服务发现机制
- 使用Soap通讯协议,通常使用XML格式来序列化通讯数据,xml格式非常喜欢重,比较占宽带传输。
- 服务化管理和治理设施不完善
API网关
capi:对接三方合作平台
iapi:对接内部流量
bapi:对接商家
oapi:对接外部流量
企业级微服务网关
什么是网关
1、流量入口
能聚合所有请求到微服务的流量
2、请求路由
接收进来的请求经过网关策略拦截后,通过负载均衡转发后端服务
3、请求拦截过滤器
在网关进行横切功能:权限校验,限流,监控
为什么需要API网关
1、采用微服务架构后,一个项目中微服务节点很多
2、在网关层处理所有非业务功能:如负载均衡,鉴权认证,Session处理,安全检查,日志处理,熔断限流等。如果每个服务自己实现,逻辑冗余,难以维护
网管技术选型
网关解决哪些问题
- 路由转发:客户端和服务消费方,无需知道请求到下游哪台机器
- 请求安全:请求签名,Oauth2,鉴权,令牌鉴权
- 高可用请求:下游服务的高可用依托网关进行负载
- 资源隔离:资源就是流量,隔离流量
- 流量灰度:线上灰度部署,可以减小风险。
网关的分类
-
流量网关:关注稳定和安全
全局性流量控制
日志统计
防止SQK注入
防止Web攻击
屏蔽工具扫描
黑白IP名单
证书 加解密处理 -
业务网关:提供更好的服务
服务级别流控
服务降级和熔断
服务与负载均衡,灰度策略
服务过滤,聚合与发现
权限验证与用户等级策略
业务规则与参数检验
多级缓存策略
目前常见的开元网关大致安语言分类:
- Nginx+lua:Open Restry、Kong、Orange、Abtesting Gateway等;
- Java:Zuul/Zuul2 、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等
- Go:Janus、fagongzi、Grpc-Gateway
- NET:Ocelot
- Node.js:Express Gateway、MicroGateway。
网关管理平台
功能:
灰度管理:网关灰度 服务灰度
路由管理 令牌分发 服务编排 认证授权 黑白名单 健康检测 指纹证书
为什么需要网关管理平台
痛点
- 随着业务规模扩大,API接口数据不断增加
- Apollo配置中心容易出错,可视化效果差
- 多站点,多环境,多业务场景,网关数量成倍增加
优势
- 整个生命周期,全部通过配置化,流程化的方式全自助管理,易上手极大的提升研发效率
- 所有API都可以集中一起管理,通过切换站点,集群就可以相应操作,方便问题定位查询
- 路由发布支持网关节点选择性发布,Apollo支持较弱
- 对网关做Mock测试,方便功能点扩展