您当前的位置: 首页 >  面试

阿里面试官:写个微服务网关?

发布时间:2021-01-11 12:30:01 ,浏览量:0

架构
  • 基于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,做到了高可用。 缺点: 集群同步复杂适用于小规模网关, 数据存储不合理,内存开销大

Session共享

使用缓存服务 Redis,统一存储 Session 优点: 网关层无状态 缓存服务本身高可用 缺点: 多一次服务调用 IO

Session客户端存储(token)

优点: 简单高性能 接入层无状态 缺点: 依赖客户端 Cookie存储

但是服务端存储的好处是比如微信,限制你只能登录一台终端,就是通过心跳判断你的终端是否改变了而实现单点登录。

Session 生成算法

Session是一串具有一定时效性的加密字符串,通常由服务端生成和解析。

业务强相关的字段
  • deviceld、 clientType、 uid、 ts
AES加密方案(常用的非对称加密方案)

  • 加解密过程都在服务端,高并发下很消耗 CPU 性能。
网关高性能
  • 本地算法+远程校验

参考

  • https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0545s