エンジニア的なネタを毎週書くブログ

東京でWebサービスの開発をしています 【英語版やってみました】http://taichiw-e.hatenablog.com/

リアルタイムにそこそこ重い処理を実行するためには、前処理が重要… なのかな? #jsug

JSUG勉強会 2019その3 LINEにおけるSpringの活用 に参加してきました。
ここがとっても気になったのです。

Personalized content recommender systemであるSmart Channelは、ユーザーの属性や趣味趣向を推定し、各個人に最適なコンテンツを推薦するServiceです。
LINEの膨大なトラフィックを受けながら、可能な限りリアルタイムにRecommendをするために、Architectureや実装にいくつかの工夫をしています。

「個人個人に違う結果を出すために、毎回リアルタイムで計算」ってどこかで(私が)(業務上)聞いたことある!
すごい気になる!

ということで行ってまいりました。初LINEさんオフィスです。
f:id:taichiw:20190325234503j:plain
f:id:taichiw:20190325234523j:plain
会場のカフェ。おしゃれだった。


さて、@hackmylife さんの Personalized content recommender system on Springです。

自分が気になっていた、以下にリアルタイムに処理をするか、という点。

以下の二点が特にミソなのではないか と感じました。

・Redisとの通信がWebflax形式のNon-Blocking. フィルタリングなどの処理はSubscribeしたときに動く。
・前もってTrainer側で、Rankerが「扱いやすいように」処理する。例えば、逆行列を求める処理がアルゴリズム上必要なのだが、これは事前に処理しておく。
この「事前処理」はスライドのこちらのページで触れられています。

"User traffic" を起点に動作する、CRS Engineが見に行く"CRS Model Redis Parameter"。
こちらに格納されているデータが、「CRS Engineが扱いやすいように処理された」ものなんだそうです。