目的
- 避免让客户端感知微服务边界的存在
- 不同的后端、前端团队需要统一的接口设计、接入规范
思路
- API网关是请求进入系统的唯一节点
- API网关负责服务请求路由及协议转换
- 它可能还具有其它职责,如身份验证、权限控制、负载均衡、“请求整形”与管理
参考链接
https://www.nginx.com/blog/building-microservices-using-an-api-gateway/
功能
-
协议解析
以透明的方式实现Http到Rpc调用的转换:
http请求到rpc调用实例的映射;
无类型的参数转换为带类型的参数;
api register
- 服务代理
-
组合调用
dubbo attachement提供了一种从consumer到provider的隐式传参机制
attachement机制
dubbo notification机制
是扩展的从provider向consumer的旁路消息机制。
变更DubboCodec中encodeResponseData,增加notification写入;
变更DecodeableRpcResult中decode,增加notification解析;
不同于attachement的传递属性,默认notification只传递给服务consumer不再向上传递,对于特定的notification需要一直向上传递我们通过DubboFilter机制实现copy and write隐式的完成特定notfication的连续传播
notificaton机制
- 安全验证
目的:api gateway作为外部访问api的唯一入口,需要尽可能的拦截掉非正常请求,解析出真实的设备/用户信息,再向微服务发起调用。
主要手段:设备识别;数字签名; - 集中式日志与监控
ELK:Elasticsearch(日志检索引擎,OLAP),Logstash(日志采集) Kibana(数据可视化)
Zabbix(系统监控和通知)
使用es数据源,按照服务、错误码等维度聚合错误 - 敏捷开发工具
灵感:SOAP使用WSDL进行stub生成
实现:ApiParser解析得到了完备的接口信息,基于这个信息我们采用模板技术(xslt/velocity/handlerbars),生成出java/oc/js的客户端调用代码,以及在线文档; - 热发布(scan变为离线操作,推送ApiMethodInfo+Interface至apigateway,并动态创建新的代理实例,进行热替换)
附图
在项目启动的时候,会连上zookeeper,进入docker,下载docker项目中的Jar包,并解析内容
apigw代码结构分析 apigw一次http请求调用多个api时序图
网友评论