后端程序员之路 9、一个推荐系统的打分过程

1、blocking_queue_t
一个队列的封装,用于feature_logger_t和predict_manager_t

2、feature_logger_t
用于异步将用户特征、内容特征、以及内容得分写到日志

3、content_feature_redis_cluster_t
用于维护一个redis_cluster的单例

4、predictor_t
由predictor_manager_t维护,根据配置文件加载一系列predictor_t
p_model对应到一个GbdtModel
p_db对应到一个kv数据库

5、predict_manager_t
doc_result_t,文章评分结果,含score、gbdt_score、gbdt_features
task_tracker_t,用于跟踪一次打分任务是否已完成
predict_doc_t,要打分的文章,含p_features、p_predictor
predict_task_t,一个打分任务,含tracker、p_predictor、p_user_features、docs,在任务完成时,通过tracker通知等待者
predict_manager_t,根据配置文件开启一堆线程来完成打分任务

6、predict_manager_t::_predict_worker_func 打分过程
    1. feature-extract
        1.1 feature data
        1.2 gen static , fill cfb key dictionary
        1.3 store
    2. batch get cfb
    3. add cfb features which in dictionary
    4. gbdt model predict

7、_model_predict
    1. score the doc
    2. age decay

8、scoring_t 基于Thrift对外提供打分服务
    1. get content profiles
    2. copy predictor for per request param override
    3. parse user features and generate user gbdt features
    4. init task tacker & lock 
    5. init task
    6. add to working queue 
    7. unlock、wait & get result 
    8. acquire lock again to make sure all predict thread finished before tracker deletion

原文地址:https://www.cnblogs.com/zapline/p/6523920.html