背景
解决什么问题:服务端API相对稳定, 客户端API需求变化大, 在复杂多服务复杂业务开发中, 资源协调成本高德问题。
API 网关:
所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。
作用:作为一个系统的后端总入口,接口聚合、路由转换、安全、限流、缓存、日志、监控、重试、熔断等。
分类:
- 单节点API网关
- BFF网关
什么是BFF?
优点
场景:
nodejs与java通信
面临的问题:
- 跨语言序列协议hession
- 弱乐境nodejs中如何强调java服务
- 配置jar包依赖
- 安装类库
- 配置Consumer
- 开发业务代码
mvn install proxy // maven命令
多App适配
聚合
基础服务接口
目录结构
├── SSR 服务端渲染
├── client RPC 客户端
├── protocols RPC 协议内容
├── schema graphql 接口模型
├── server 用 Node.js 模拟的后端
├── static 静态资源
└── views 视图
RPC
RPC(Remote Procedure Call)中文名「远程过程调用」,调用其他进程或机器上面的函数。
一个完整的 RPC 框架主要有三部分组成:
- 通信框架、
- 通信协议、
- 序列化和反序列化格式。
基于 TCP 的 RPC 调用的基本流程
RPC VS HTTP
RPC | HTTP | |
---|---|---|
传输协议 | 可以基于TCP, 也可以基于HTTP | 基于HTTP |
传输效率 | 请求报文体积更小 | |
性能消耗 (主要在于序列化和反序列化的耗时) |
基于thrift实现高效的二进制传输 | 大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能 |
负载均衡 | 自带了负载均衡策 | 需要配置Nginx,HAProxy来实现 |
服务治理 (下游服务新增,重启,下线时如何不影响上游调用者) |
能做到自动通知,不影响上游 | 需要事先通知,修改Nginx/HAProxy配置 |
场景 | 主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便 | 主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等 |
参考:
https://os.alipayobjects.com/rmsportal/WtUmBLJSmqtDHkvJzuzM.pdf