kanemeate

働きたくない

レコメンド?機能をのっけた

廃墟としてほそぼそと維持しているレコメンド2434に「レコメンド」を名乗る機能を追加した。
https://recommend-2434.netlify.com/recommend

構成としては下記のような感じになっている。
レコメンド用のデータはRDSに蓄えているが、直接APIを通して呼びたくない。よって、SQSに一旦リクエストを貯めておき、SQS経由でRDSを扱うLambdaを起動するようにしている。このLambdaは同時実行数を絞っており、RDSの接続数制限で困らないようにしている。最終的に結果取得用のリクエストを行えばレコメンド結果が返ってくる仕組みとなっている。
別に誰も使ってないので直接RDS呼んでも特に問題は起きないのですが……。

f:id:i_ll:20200412165026p:plain

このサイトのデータ源は全てYouTube APIの定期実行で賄っている。RDSにマザーとなるデータを格納し、ユーザーにすぐに返したい情報はDynamoDBに格納する処理を行っている。
※レコメンド用のデータはsearch APIを利用しているが、これは定期実行に組み込めておらず、実は毎日数秒程度の工数が発生している。

最初はアカウント機能作ってデータ保持してみたいなことを考えていたが、わけのわからないサイトのユーザー登録なんて冷静にしたくないし、普通にめんどくさい。こっちも情報極力持ちたくない。どうせ大した情報いらないので、ブラウザのストレージ機能でいいじゃんってなった。別に情報いじられても特に困らないし(バリデーションは前提)。

非同期で動いている以上、一旦レコメンド機能のリクエストを行い、その後で結果取得のリクエストを行う必要がある。色々面倒だったのでボタン2回押してねで済ませている。リクエストボタン押したら定期的に自動リクエスト飛ばす案もあったが、それはそれで色々考えることがあってやめてしまった。ユーザーのことをあまり考えないシステム。

ちなみにこのレコメンド機能はレコメンドロジックを実質実装していない。システムの振る舞いとしてはsearch APIの結果をRDSに貯めておき、ユーザーの入力(閲覧した動画情報)に応じた結果を返しているだけである。
search APIAPI利用制限リソース(quota)をめちゃくちゃに食うものであり、あまり多く実行できないことが問題になっている。search APIは動画一つに関連した情報を引っ張ってくるものだが、この問題で全動画の関連情報をカバーできていない。結果、五つの動画を見ていたとしても、実際にレコメンドに使われる動画は一つとか二つというケースが出てきてしまう。また、フレッシュな情報が常に蓄えられているわけではないので、割と古い動画になりがち。優先して最近の動画を出すようにしているが、これはこれで偏りの原因になり悩ましい所。

一応サービスとして体を成すものを一通り作って拡張したり破壊したりしているとそれなりに学ぶものがある。
自分で使って改善サイクル回すべきなんだけど、普通に切り抜き見るよねってとこはあってサービスそのものの存在意義は自分でも謎。