arrangeable
Jetsの機能をサーベイしてアーキテクチャを考える
1分毎にjobをkickして
Twitter連携を考える
ok
アーキテクチャ
twitterからデータを引っ張ってくるときの考え方
ジョブを表すitemをdynamoにenqueueする
cloudwatchでn分ごとにワーカー lambdaをkickする
lambdaは起動時に、ロックを取った証としてdynamoに現在時刻を書き込む
もしdynamoにすでに時刻が書いてあり、
それが n + 1分以内であれば他のjobが動いていると判定して、そこで終了する
otherwise、jobが終了したと思って無視して自分の時刻を書き込む
lambdaは時間が許す限りfetchを行う。fetchするたびに、next_page_tokenをdynamoに書いておく。また、rate limitに引っかかったら、rate復活時刻を書き込んで終了する。
endpoints
/signin
sigin in with twitterボタン
/auth/twitter
/auth/twitter/callback
session[:uid] = twitter_uid
current_twitter_user = TwitterUser.find(uid: session[:uid])
/
start analyzeボタン
analysises一覧
POST /analysises
current_twitter_user のデータ集計ジョブを作成
GET /analysis/:analysis_id
ジョブの状態・結果を表示
POST /unfollow_job
bodyで指定されたuidを、current_userでunfollowするジョブを作成
resources
TwitterUser
Analysis
FetchedLikes
FetchedFriends
UnfollowJob
TargetFriends
jobs
AnalysisJob
だいたい実装終わった気がする
あとは、finishedになったらRunningから別テーブルに移すみたいなのがある
UnfollowJob