APIGateway设计的思路
APIGateway简述一下APIGateway的设计思路,准备从头写一个网关。
API网关的职能
- 请求接入,承接所有外部请求。
- 中介策略,承担了外部请求和实际服务中间的功能,比如:鉴权、验签、路由、流控、缓存、黑白名单过滤等等。
- 业务聚合,所有后端业务服务都可以在这里聚合,通过某种方式将业务服务都聚集到这里。
- 统一管理,提供管理工具、后台服务等等,可以对服务进行注册、修改以及各种配置。
API网关需要实现的功能
- 流控,控制流量,针对同一个ip在指定的时间段内访问次数做限制
- 验签解密,校验参数、验证签名信息、将加密的信息解密
- 接口验证,验证接口是否存在、接口信息是否是当前调用者的接口
- 接口权限验证,调用的ip是否在白名单内
- 业务参数验证,校验业务接口参数是否正确
- 调用业务接口,可以使用dubbo泛化调用
- 熔断降级,业务方接口不可用的时候或者业务方处理速度变慢,考虑进行熔断降级
- 加密返回,将调用结果封装、加密、返回
- 管理控制台,负责接口服务注册、配置等
实现要点
- 实现方式使用责任链模式,链中每个模块负责一个功能
- 本地缓存和分布式缓存配合,需要考虑本地缓存的更新,可以使用zookeeper通知或者MQ通知
- 异步处理请求,使用Jetty容器部署应用
- 线程池隔离,请求接收、请求处理、服务调用可以使用不同线程池进行隔离
- 日志记录,请求以及处理等日志记录,方便问题查询
- 数据统计,接口的调用信息统计,方便直观查看接口调用情况
- 报警监控,针对异常或者其他错误选择报警
源码:https://github.com/pulllock/APIGateway