TickNet-ApiGateway的一些思考

前言

随着工作室的产品、项目越来越多,运维、开发成本极速增加,也冒出了许许多多的问题。

运维上,我们的项目,都是统一从portal机器调用,通过nginx转发到后端应用服务器。

开发上,我们需要做用户权限认证、流量监控……我们目前的方案是每个APP自己写权限认证,自己写监控……所以每一位加入工作室的同学,都需要完整的开发一次从用户鉴权到数据返回全链路调试过程。现在细细一品,有好处的地方是,按这种模式开发出项目的同学,都会学到很多东西,但是坏处显然易见,门槛高,尤其是当鉴权涉及到微信授权登录时,这导致我们招核心同学很艰难。同学们会开心的进来,但很快被难搞的技术吓跑,我觉得这一方面,我难辞其咎,因为技术团队在我手里,可用的人数太少,导致我们团队校园产品毫无产出,而我当时很多精力却是花在维护学长们留下的老项目的深渊里,当然,维护项目的接锅人目前培养好,抽出身的我,遂希望能通过对一些系统基础建设进行改革,以帮助团队能扩大自己规模,让更多人加入我们团队学到东西。

综上,我们需要实现一个技术,方便我们提高运维开发效率,API网关就是其中需要调研的一部分。通过接入Api网关服务层,可以释放出Api层的开发与维护工作,减少每个业务的重复开发工作,可以更专注与业务/服务逻辑实现。

考虑过两种方案,网关服务and中台服务。

网关服务,api调用,第一入口,统一调用、流量拦截入口。

中台服务,内部调用平台,可通过调用该平台的接口,实现用户权限获取等等接口,流量入口由应用本身去实现,中台只做通用(重复的)功能技术支持。

目前来说,我们的用户表比较单一(学号、姓名),系统基本只需要维护一个用户表即可,主要是维护各应用的权限,所以综上,我偏向做api网关

名词解释

portal:可以理解为流量入口服务器,所有的外部请求都从该入口进;

ApiGateway:业务Api网关服务,文中业务Api接入层亦指此服务;

nginx:一种高性能的http服务器;

功能需求

根据先有技术需求,以及未来展望,需求特点如下:

  • 平台化:

    • 业务注册与管理,联动LB/TLB location/upstream变更

    • 参数及策略配置、规则引擎与策略生成

    • 策略下发,及时生效

  • 身份鉴权:

    • 统一校验用户、鉴权分级策略、Session降级策略
  • 流量调度

    • 负载均衡:支持sharding/RR/WRR/Rand等策略
  • 稳定性

    • 监控报警:统一监控、报警
    • 过载保护:后端服务过载保护
    • 降级策略:灵活降级策略
  • 缓存策略

    • 内存缓存、proxy缓存
  • 流量检查与清洗

    • 安全检查:参数检查与过滤、防攻击、防重放

    • 反作弊:频率控制、非法来源控制

技术方案

方案一:Nginx+Lua => OpenResty => Kong

Nginx稳定、成熟以及高性能的代理性质,工作室目前的Potal机器就是使用的Nginx作为负载均衡Web服务器,目前规范是每一个应用创建一个.conf文件,然后也是由于业务拓展,越来越多的.conf文件缺乏管理。由于Nginx支持拓展,Lua很好的被利用实现拓展功能,我当时实习(Tencent)部门,中台网关,就是这种方案,Lua写代码逻辑,Mysql存储网关配置(比如应用的转发配置)

But,学习成本很高,但是试图看公司中台网关代码,就被C编译给整懵了,门槛很高,没有C、Lua语言编程基础,很难上手。

OpenResty是以Nginx为核心的Web开发平台,可以解析执行Lua脚本;OpenResty与Lua的关系类似于Jvm与Java

Kong是一个OpenResty应用,一个api gateway。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章