架构
- 基于SpringBoot的Web Server
- 网关属于高并发模块
逻辑简单,业务逻辑剥离到业务层 - 设计目标-高性能
缓存设计
异步线程设计
网关时序图
跨域
从一个源(如baidu.com) 加载的文档或者脚本默认不能访问另一个源(如tencent.com)的资源。
CORS (Cross-Origin Resources Sharing)解决跨域问题
对HTTP请求头进行豁免
- 建立豁免清单
- Access-Control- Allow-Origin
如需允许所有资源都可以访问您的资源,您可以如此设置:
Access-Control-Allow-Origin: *
如需允许https://developer.mozilla.org访问您的资源,您可以设置:
Access-Control-Allow-Origin: https://developer.mozilla.org
CORS和缓存
如果服务器未使用“*”,而是指定了一个域,那么为了向客户端表明服务器的返回会根据Origin请求头而有所不同,必须在Vary响应头中包含Origin。
Access-Control-Allow-Origin: https://developer.mozilla.org Vary: Origin
Access-Control- Allow- Credentials
- 是否允许cookie跨域
Access-Control- Allow- Methods
- 允许提交请求的方法
Session 设计(鉴权)
读写请求使用的上下文对象,称之会话(Session).
高可用设计
- 无状态化
单机下不存在Session共享,因此内存存储能保证极大的性能
- 无法应对高并发、高可用
分布式方案
Session绑定
将 uid hash 到固定的节点,可是如何保证高可用呢?使用主从,但这简单问题复杂化,不推荐。
Session复制
Tomcat 有组件支持该机制
优点:
每台机器存储全量的 session,做到了高可用。
缺点:
集群同步复杂适用于小规模网关,
数据存储不合理,内存开销大