设计一个HTTP网关

最近在使用公司的网关,发现一些不好用的地方,加上之前自己有做一个熔断器,其原理其实都差不多, 总结一些我心目中的网关应有的特性:

当然只是YY,并没有实际去实现一个。YY基于之前做的熔断器和公司的网关的使用体验。

  • 不更改URL Path,这样子就不会影响一些第三方封装的SDK
  • 路由注册应当支持多级泛匹配,这样就可以容忍网关后面是一个通用代理
  • 理论上完美的网关应当做成Nginx一样,是一个纯粹的代理,这样所有的SDK就无需更改代码即可使用, 同时网关可以完成熔断,统计的功能。但是这样的缺点在于,不能识别流量来源,如果要做到这个功能, 就需要增加一些头部,例如用一个token来标志是什么应用在请求,不过个人以为作用不大,因为HTTP请求 是可以模拟的,攻击者可以伪造。
  • 同时支持HTTP/1.0以上和HTTP/2,最好还能支持websocket,如果要做到这三个,估计RFC要熟读了。
  • 确实应当提供一个地方去注册路由,并且由管理员来审核,这样在大规模团队的时候,可以提高安全度。


所以如果要我在guard上改,我大概会做这些事情,因为guard总体上还是比较符合我的预期的(当然我不会改了, 因为这是一篇YY文):

  • 自己重写fasthttp,支持HTTP/1.0以上,HTTP/2和websocket,但是要充分借鉴fasthttp的思想,以提供高性能 代理
  • 把由后端App自主注册更改成web界面注册,管理员审核
  • 增加统计功能,可以是日志统计,这样对网关性能没有影响,但是展示效果会差一些因为数据肯定会有滞后性;也可以是 即时统计,但是这样有缺点就是对性能会有比较大的影响,我会采取前者。

更多文章
  • Python的yield关键字有什么作用?
  • 借助coroutine用同步的语法写异步
  • Python3函数参数中的星号
  • 使用Git Hooks
  • Token Bucket 算法
  • nginx配置笔记
  • 阅读Flask源码
  • 尤克里里
  • 学习使用Bootstrap4的栅格系统
  • 利用Github的WebHook完成自动部署
  • 使用Tornado和rst来写博客
  • Haskell do notation
  • foldl 和 foldr 的变换
  • Haskell TypeClass 笔记
  • 重新捡起你那吃灰的树莓派