itemfilterRPC

command module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 7, 2022 License: MIT Imports: 4 Imported by: 0

README

itemfilterRPC

基于redis的物品过滤rpc服务,提供上下文去重和时间间隔去重功能

注意事项

  1. 本服务仅针对小时级数据去重,天级的请离线算好后与本项目结果配合使用.
  2. 去重使用布隆过滤器,因此存在碰撞概率,不能保证一定不重复
  3. 使用插件RedisBloom

接口类型

  • grpc
  • http-RESTful(需要启动是使用--Use_Gateway开启,同时会启动swagger用于调试)

概念

  • EntitySource,简写ES,指实体资源,也就是要去重的对象

  • EntitySourceType,简写EST指实体资源类型,即要去重的对象类型,比如我们要去重的对象有漫画,音乐,电影,他们往往有自己单独的id,因此分别进行去重

  • EntitySourceID,简写ESID,指实体资源id,即要去重的对象.

  • BlackListID,简写BID,指黑名单.

  • RangeID,简写RID,指范围的id,往往一个范围下的资源类型和资源范围都是相对固定的,规定每个范围只能包含同一类实体

  • PickerID,简写PID,指挑选者id,挑选者就是获取资源的对象.

  • PickerInterval,简写PI,会根据服务设置记录用户一个时间范围内的资源使用情况,用于长期去重,可以选的时间范围包括

    • day,当天(以utc时间记)
    • week,本周
    • month,本月
    • year,本年
    • infi,从记录开始
  • ContextID,简写CID,指上下文id,上下文可以用于限制一次去重的范围.一次上下文中的资源不会重复,上下文在每次有行为时都会刷新过期时间,这意味着它可以记录活跃行为序列中使用的资源,可以用于短期去重.

  • Candidate,简写C,指请求中用于操作的实体

  • Survivor,简写S,指请求操作后剩下的符合要求的实体

  • PickerCounter,简写PC,记录使用用户数的计数器,每天会记录一份,可以设置过期

  • PickerCounterDate,简写PCD,PickerCounter当天的日期

  • Duration,简写D,指时间间隔,我们可以指定间隔以确保从当前时间点到这个间隔内不会重复.

  • 操作,本服务提供2种类型的操作器

    1. 检查器check,用于检查物品是否在集合中
    2. 过滤器filter用于将候选物品中符合要求的保留,不符合要求的删除

基本思路

本项目基于如下假设:

  1. 范围下的实体资源规模很大
  2. 黑名单规模很小,数量级最大为千级,且绝对不可以出现
  3. 范围和黑名单独立
  4. ID均为字符串类型
  5. 需要过滤的物品受范围,黑名单,会话,挑选者3个因素制约变化

本过滤器的过滤流程为

设置:

  1. 预先设置范围,包括范围使用概率型过滤器设置存在项,
  2. 预先设置黑名单,只能使用set结构设置黑名单
  3. 设置挑选者在时间范围下已经使用过的实体资源(根据设置保存每天/周/月/年/总体各一份,写入不会刷新过期时间)
  4. 设置不同上下文中已经使用过的实体(过期时长由请求端带入,如果缺省则默认使用设置的默认值作为刷新时间,写入会刷新过期时间)

过滤: 请求中的实体id如果在结果中对应的值为True则表示可用,False则表示不可用

  1. 使用set首先去掉请求中的重复项
  2. 如果有带挑选者ID将挑选者add到当天的hyperloglog中(配置如果设置)
  3. (如果请求中有带黑名单信息,或范围有配置引用的黑名单)判断在不在这两个黑名单中,如果在则该项返回False
  4. (去过请求中有带范围信息)
    1. 判断在指定范围中是否可用
    2. 如果有带挑选者ID,在对应的当天hyperloglog中(配置如果设置)添加当前挑选者
  5. 如果有带挑选者ID:
    1. 如果有指定会话但没有指定时间间隔,则判断是否在会话中已经被使用
    2. 如果有指定时间间隔但没有指定会话,则判断是否在指定的时间间隔中已经被使用
    3. 如果时间和会话都有指定则两边都会判断
  6. 使用hyperloglog统计当天去重请求的挑选者数量

统计流量: (配置如果设置)如果配置中启动该特性,则本工具还可以顺便各个范围下以及总体下的去重挑选者数

使用

推荐使用docker镜像hsz1273327/itemfilter.它可以使用环境变量,命令行,也可以使用json配置文件配置.配置项可以参考itemfilterRPC_serv/serv.go

本项目需要至少依赖一个redis,如果使用Basic-Components/redis-allinone项目构造的镜像或者自己给redis装了RedisBloom插件,那么就可以使用bloom过滤器和cuckoo过滤器.默认会将范围和黑名单的元信息放在redis中,如果有监听这些元信息变化的需求可以改为放在etcd中.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
Package itemfilterRPC_pb is a reverse proxy.
Package itemfilterRPC_pb is a reverse proxy.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL