新特性
- 支持获取推荐结果时分页。
v0.1版本曾经支持获取推荐结果时翻页,然后随着版本演进,翻页功能被破坏,v0.2.7版本恢复对于推荐结果翻页的支持。通过offset
参数向API传递偏移量实现推荐结果分页。
- 获取推荐结果时提供了write-back-delay参数。
之前版本推荐接口的write-back
参数可以在获取推荐结果的同时,向推荐系统写入类型为write-back
的反馈。在新版本中write-back
参数更改为write-back-type
,同时添加了write-back-delay
参数,可以将回写的反馈记录的时间戳设置为write-back-delay
分钟之后的时间戳。
- 支持插入带有未来时间戳的反馈。
在用户实际的浏览过程中,用户没有对已读物品做出正反馈并不能说明用户对该推荐不感兴趣,应该给予推荐物品足够的曝光时间。因此,新版本支持将反馈的时间戳设置为在未来的时间点,同时系统只会读取当前时间之前的反馈。只有当超过一定时间后用户没有做出正反馈,才将此物品从用户推荐中移除并判定为不感兴趣的物品。新版本增加了对时间戳的利用,为了对反馈进行更精细地操作,从v0.2.7开始提供了两个插入反馈的接口:
方法 | URL | 行为 |
---|---|---|
POST | /api/feedback | 如果反馈已经存在,那么忽略插入 |
PUT | /api/feedback | 如果反馈已经存在,那么覆盖原先的反馈 |
“反馈已经存在”是指由反馈类型、用户编号和物品编号构成的三元组已经存在于数据库反馈表中。
-
支持Prometheus监控数据库访问和API调用延迟。 通过Prometheus监控推荐系统实时状态,为后续性能优化提供数据支持,后续会详细介绍如何对系统进行监控。
-
支持将日志输出到文件。 在主节点、工作节点和服务节点的命令行中,使用--log-path设置日志文件路径。将日志保存到文件,可以方便进行进一步处理。
-
支持设置本地缓存文件位置。
在主节点、工作节点和服务节点的命令行中,使用--cache-path
设置缓存文件路径。
- 支持多种已读反馈类型。
在配置文件中,read_feedback_type
替换为read_feedback_types
数组。
性能优化
- 将模型序列化方案从
encoding/gob
替换为自定义方案。
在使用encoding/gob
序列化模型时,encoding/gob
会将整个数据结构序列化到内存中后才写入到字节流中。将encoding/gob
替换为自定义方案之后,可以将模型直接序列化到字节流之中,节省了序列化时的内存开销。
- 支持流式传输模型。
在v0.2.6之前,模型需要首先序列化到内存缓冲区中,然后再通过gRPC发送给工作节点。而从v0.2.7开始,模型将以字节流的形式分发给工作节点。流失传输能够突破gRPC消息大小上限,同时通过多线程流水线协作提高了传输效率。
- 为数据库中的反馈表添加了物品编号索引。
为物品编号添加索引可以加速获取物品相关的反馈,另外也可以加速物品删除。由于ClickHouse并不支持二级索引,因此ClickHouse的反馈表上依然没有物品编号索引。
修复问题
- 修复了数据库读取完成后连接未关闭的问题。
系统长时间运行后出现“pq: sorry, too many clients already”的问题,修复未关闭的连接可以解决此问题。
升级指南
升级新版本需要对API调用、配置文件和命令行进行以下改动。
- 配置文件:
read\_feedback\_type
替换为read\_feedback\_types
数组。
# The feedback types for read events.
read_feedback_types = ["read"]
- 推荐API接口
/api/recommend/{user-id}
:- 使用
write-back-type
设置回写的反馈类型。 - 使用
write-back-delay
设置回写反馈的延时时间戳。 - 使用
offset
设置分页偏移量。
- 使用
- 主节点、工作节点以及服务节点的命令行:
- 使用
--log-path
指定日志文件路径。 - 使用
--cache-path
指定缓存文件路径。
- 使用