Gorse v0.2.7更新

374 阅读4分钟

Github Releases: Gorse v0.2.7

新特性

  • 支持获取推荐结果时分页。

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分钟之后的时间戳。 image.png

  • 支持插入带有未来时间戳的反馈。

在用户实际的浏览过程中,用户没有对已读物品做出正反馈并不能说明用户对该推荐不感兴趣,应该给予推荐物品足够的曝光时间。因此,新版本支持将反馈的时间戳设置为在未来的时间点,同时系统只会读取当前时间之前的反馈。只有当超过一定时间后用户没有做出正反馈,才将此物品从用户推荐中移除并判定为不感兴趣的物品。新版本增加了对时间戳的利用,为了对反馈进行更精细地操作,从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指定缓存文件路径。