=============
== Pullock ==
=============
脚踏实地

APIGateway设计的思路

APIGateway

简述一下APIGateway的设计思路,准备从头写一个网关。

API网关的职能

  • 请求接入,承接所有外部请求。
  • 中介策略,承担了外部请求和实际服务中间的功能,比如:鉴权、验签、路由、流控、缓存、黑白名单过滤等等。
  • 业务聚合,所有后端业务服务都可以在这里聚合,通过某种方式将业务服务都聚集到这里。
  • 统一管理,提供管理工具、后台服务等等,可以对服务进行注册、修改以及各种配置。

API网关需要实现的功能

  • 流控,控制流量,针对同一个ip在指定的时间段内访问次数做限制
  • 验签解密,校验参数、验证签名信息、将加密的信息解密
  • 接口验证,验证接口是否存在、接口信息是否是当前调用者的接口
  • 接口权限验证,调用的ip是否在白名单内
  • 业务参数验证,校验业务接口参数是否正确
  • 调用业务接口,可以使用dubbo泛化调用
  • 熔断降级,业务方接口不可用的时候或者业务方处理速度变慢,考虑进行熔断降级
  • 加密返回,将调用结果封装、加密、返回
  • 管理控制台,负责接口服务注册、配置等

实现要点

  • 实现方式使用责任链模式,链中每个模块负责一个功能
  • 本地缓存和分布式缓存配合,需要考虑本地缓存的更新,可以使用zookeeper通知或者MQ通知
  • 异步处理请求,使用Jetty容器部署应用
  • 线程池隔离,请求接收、请求处理、服务调用可以使用不同线程池进行隔离
  • 日志记录,请求以及处理等日志记录,方便问题查询
  • 数据统计,接口的调用信息统计,方便直观查看接口调用情况
  • 报警监控,针对异常或者其他错误选择报警

源码:https://github.com/pulllock/APIGateway

参考