「推荐系统从0到1」通信协议

奥利给!

前沿

上回讲到服务发现,也完成了服务发现的基础构建。下面就要确定各个微服务之间的通讯协议了。

总的来说,初步分为几个微服务,分为api,recall,filter,rank,先把这几个微服务之间的通信协议定下来,再将里面每一个模块做完整。

先上github仓库:github仓库

第一版本简单架构

api_server对外提供http服务,推荐系统内部则采用grpc通信。这图确实有点丑,后面找点能看的。。。

通信协议

api_server调用recall_server protobuff

syntax = "proto3";

import "errmsg.proto";

package api;
option go_package = "go_server/src/lib/proto/api";

// 包括人口学特征,一些上下文特征等,后面会一直透传这些特征。
message RecReq {
    string trace_id    = 1;
    string user_id     = 2;
    string gender      = 3;
    int32 age          = 4;
    string app_version = 5;
    string network     = 6;
    int32 page_num     = 7;
    int32 page_size    = 8;
}

message RecRespItems {
    string item_id = 1;
    string params  = 2;
}

message RecResp {
    errmsg.ErrMsg err           = 1;
    repeated RecRespItems items = 2;
}

service Rec {
    rpc Rec (RecReq) returns (RecResp) {}
}

recall_server调用filter_server

syntax = "proto3";

import "errmsg.proto";
import "recall.proto";

package filter;
option go_package = "go_server/src/lib/proto/filter";

message HistoryFilterReq {
    string user_id           = 1;
    recall.RecallResp recallResp = 2;
}

message HistoryFilterResp {
    errmsg.ErrMsg  err       = 1;
    recall.RecallResp recallResp = 2;
}

message HistoryAddReq {
    string user_id           = 1;
    int32 history_action     = 2;
    repeated string item_ids = 3;
}

message HistoryAddResp {
    errmsg.ErrMsg err = 1;
}

service Filter {
    rpc HistoryFilter (HistoryFilterReq) returns (HistoryFilterResp) {}
    rpc HistoryAdd (HistoryAddReq) returns (HistoryAddResp) {}
}

api_server调用rank_server

syntax = "proto3";

import "api.proto";
import "recall.proto";
import "errmsg.proto";

package rank;
option go_package = "go_server/src/lib/proto/rank";

message RankReq {
    api.RecReq req               = 1;
    recall.RecallResp recallResp = 2;
    string bucket                = 3;
}

message RankResp {
    errmsg.ErrMsg err                     = 1;
    repeated recall.RecallRespItems items = 2;
}

service Rank {
    rpc Rank (RankReq) returns (RankResp) {}
}

需要注意的点

其中go_package参数,需要加上go_server前缀,不然编译后,会有一点小问题,在go mod包管理下,pb文件里import的路径会不对,同时需要在Makefile里加一些小改动,具体看github仓库吧。

跑一下

起4个窗口,启动etcd,将4个微服务启动,进入etcd docker容器,可以看到服务已经注册成功。

➜  ~ docker exec -it etcd /bin/sh
# etcdctl get --prefix ""
/etcd/test/filter_server/192.168.31.71:59270
192.168.31.71:59270
/etcd/test/rank_server/192.168.31.71:59275
192.168.31.71:59275
/etcd/test/recall_server/192.168.31.71:59280
192.168.31.71:59280

简单调用一下,返回结果符合预期,没问题。

➜  ~ curl -d '{"user_id":"jinfeng"}' "http://127.0.0.1:20019/rec"
{"items":[{"item_id":"item_id1"},{"item_id":"item_id2"}]}

后面就可以加一些简单的召回了,下周搞起,奥利给!


微信公众号:算法工厂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值