什么是Packer
我们的业务存在许多实体,比如item/music/challenge/user等。每个实体之间存在组合关系,比如item中存在使用的music,user拥有post item list。所以实体之间的关系是可以构成一张图。对于调用方来说,如果用标准的Restful方式交互,即先根据id拿到一个实体,再去拿它对应的实体信息,会存在两个问题:1. 整体延时高,特别是涉及到前后端交互的场景;2.调用方需要感知两个实体之间的调用关系,前后端耦合。所以我们需要一个统一的服务将一个实体及其关联的实体的信息打包后返回给客户端
一个好的Packer需要哪些特性
- 按需获取:对于一个实体,它内部存在许多字段,然而并非每个请求都需要所有字段,并且有些字段可能需要较高的计算量,所以字段按需获取将降低计算代价和降低带宽
- DAG:实体之间存在依赖关系,比如需要拿到user中的post_item_list_ids才能获取对应的item信息。所以我们需要构建实体之间调用链的DAG
- 并发访问:对于没有依赖关系的实体,我们可以并发获取信息,从而降低延时
实现
基于graphql实现https://graphql.cn/
概念解释
Schema
schema可以类比于文档数据库的表,由服务端定义,它定义了该服务提供的所有字段。它包含字段名、类型、参数等
example1: