什么是网关?
两个独立的局域网之间通信的桥梁/ 或可以理解为外部所有请求都会打在网关上,网关对请求分发路由等处理,隐藏了内部服务的各种API接口
网关作用及功能
1. 动态路由 根据请求路由到对应的服务上去,如果服务不可用还会有重试机制
2. 负载均衡 多服务器提供同一种服务,网关会从注册中心拉取各服务注册信息,然后将请求负载均衡处理
3. 流量控制 限制流量 避免内部系统受到冲击
4. 统一鉴权 网关对相关权限验证 (请求者的访问权限,还可实现SSO单点登录)
5. 熔断降级 当服务不可用或者访问量过大,网关可以将请求做降级 打到其他服务器或者做其他处理,提示用户暂时不可用
6. 灰度发布 只给少量服务器升级,通过网关将少量的服务打到已升级的服务器用来测试升级的服务器,大量请求还是打在老版本服务器
7. 日志服务 服务访问情况报表,请求吞吐量,并发数,日常告警
常用网关框架
Zuul SringCloud对应的网关
Kong Nginx + Lua 在Nginx运行的Lua应用程序
网关涉及原理
协议转换 : 每个系统使用的协议不同(http,grpc,dubbo协议) 通过网关进行协调统一
链式处理 : 网关处理请求类似责任链模式 经过各个过滤器处理请求
异步请求 : 网关中线程数量有限,每个线程带着请求去访问服务 然后等待服务访问结果返回 这个过程是很浪费时间的,在高并发下无法完成
异步请求 工作线程不必要等待服务返回结果就可以去处理下一个请求,网关的Reactor线程专门负责select轮询 Socket访问结果,一旦发现有结果返回 就通知工作线程来处理返回结果