shu22203 / internet_ranking

Internet ranking system for music gamer.
2 stars 0 forks source link

構成妄想 #1

Open shu22203 opened 3 years ago

shu22203 commented 3 years ago

React + Goで作る

hidollara commented 3 years ago

これ要件的な話になるんですけど、リザルト画像って永続化する必要ありますか?(IR係が不正な入力を正すためだけならSlackとかにそのまま飛ばすのが一番楽なんじゃないかなとか思いました

hidollara commented 3 years ago

IRサイトって一時的に負荷が上がるタイプなので、永続化のコストによってはFargateとかの方がトータルで安上がりだったりしませんか?あんまりAWS詳しくないので適当言ってたらすいません

shu22203 commented 3 years ago

リザルト画像

やりたいことは大まかに

  1. IR終了タイミングでの各プレイヤーの最新の登録スコアとリザルト画像が合致しているかIR係が確認できるようにする
    • スコアと画像がなんらかの方法で紐付けられている必要がある
    • 途中のタイミングで不整合が起きていても構わない・それについてIR係が確認する必要はない
  2. プレイヤーが登録したスコアについてリザルト画像を貼り忘れているか確認できる手段がある
    • IR係が画像登録を促すコスト削減のため

で、1は登録された段階でslackなりにスコアとともに流すことで達成できるけど、どれが最終状態か分からないため登録されたものすべて見る必要があるので、ややコスト増

2はスコアに対して画像登録されましたフラグみたいなものを付ければ出来るけど、スコアが更新されたときのフラグのふるまいが煩雑になりそう。UPDATEなしで全てINSERTでやるのも一つの手。

永続化しないとなると、前日などにリザルト画像が正しいものか確認してください〜という声掛けができなくなるので、終了後のIR係の作業コストが増える可能性があるって感じかな。

shu22203 commented 3 years ago

Fargate

APIサーバーだけならリクエスト来たときだけ動くLambda系が一番安いかな。Fargateは結局立ててる時間課金なので微妙そう(計算してない)。 どちらかと言うとDBがネックで時間単位でないRDBが無いので結局DBサーバー自前で立てるかRDSとか使うしか無いという。

RDSは一番安いt3.micro + SingleAZでも 0.026$*110*24*30 = 2059円/month くらいかかるので余裕で月のVPS費超えてしまう。

IR開催期間以外DB止めるという選択肢もあるが、その期間IRサイトでスコアとか参照できなくなる →DBのスナップショットから静的なHTML吐き出して見れるようにしておくとかも出来るけどダルいなという

shu22203 commented 3 years ago

RDBじゃなくてスコア・曲・難易度などを管理できてJOIN出来るようなデータベースがあればそれでもいいけど思い付いていない

hidollara commented 3 years ago

リザルト画像

自分は最後にまとめて確認するよりちまちま確認したいかなと思った(これはIR係経験者に聞きたいですね)ので、こんな感じの運用が楽なんじゃないかと考えてました。

  1. スコア登録時に画像登録を必須にする
  2. スコア登録が走るとデータベースにINSERTされる(スコア更新時もUPDATEではなくINSERT)
  3. 登録時にはスコアのレコードは常にactive
  4. 不整合があった時に、IR係がスコアのレコードをdeactivateできる
  5. 表示されるスコアは最新のactiveなレコードが反映される

で、自分が全然細かくスコアを更新しなかったタイプなので、無駄になる登録ってそんな無いんじゃないかな…と思ったので提案したって感じです。

(追記: プレイヤーが登録画像を確認できるっていうのは、あとから見返すものを提供するよりも登録する時に画像をプレビューするとかで良いような気がします。 現状の画像投稿って選んだファイルがファイル名でしか表示されない現状がまずよっぽどつらいのと、あと後から確認してと言っても多分しないので(自分はしたこと無い) )

(追記2: activeって書いたけど、PENDING/APPROVED/REJECTEDみたいなenum入れたほうがユーザーフレンドリーかもなどと ランキングへの表示は承認待ちでもしておけば挙動は多分変わらないので )

Fargate

RDBたっっっっっっっか VPSで良いと思います(手のひらくるくる)

shu22203 commented 3 years ago

自分がリニューアルする前にPHPで書かれていた初代IRシステムは、登録されたスコアが管理者用画面にリスト化されて、 別途メールで届いた画像と照合して正しければ承認済みにしてランキングにも反映されるというものでした。

そのときは毎日承認作業をしなければならない(そうしないとランキングに反映されないので)というコストが大変だったという意見を汲んで、 今のような最後に一括確認という形になりました。

pending / approved / rejectect (pendingでもランキングには出す)

は確かに良さそうだねー。ただ、最終日までずっとpendingだと出した人は逆に間違ってないかな・・と不安になる人も出てくる気がという不安w

何日かに一回かでもちまちまと承認作業してくれる人がIR係ならいいんだけど!w

というか承認制にすると結局管理画面とslack両方見なくちゃいけないという・・・

あとはslackのサービスレベルに依存することになってしまうというのがどうなんだろうなというのもややあり(別になんでもいいけど何らかの投稿先)

shu22203 commented 3 years ago

あと、IRは基本的に最終日近くまでリザルト溜めないで、最初からどんどん登録して盛り上げていって欲しいという思いもあるかなー。

実際どのくらい無駄な登録があるかは計測してないので分からないけど。

プレビューはよさそう、今のは確かに何もわからないw

hidollara commented 3 years ago

これはちょっと考えてて、approve/rejectをSlackのInteractive Messageとか使って簡単に出来ないかと思ってます 管理画面に入るのは修正の時だけとかにすれば良い気がしてるんですが、どうでしょう…

shu22203 commented 3 years ago

あとは画像登録必須とすることによるUX低下・登録障壁の上昇が気になるかな

shu22203 commented 3 years ago

SlackのInteractive Messageとか使って簡単に出来ないか

簡単にできるならよさそう!画面遷移ないから今より簡単だしね

hidollara commented 3 years ago

最終日までずっとpendingだと出した人は逆に間違ってないかな・・と不安になる人も出てくる気が

これは凄い分かるので、PENDING/APPROVEDは目につく場所には出さなくてもいいかなと思います

slackのサービスレベルに依存することになってしまうというのがどうなんだろうな

確かにそうなので、通知機構として抽象度上げておけばいいかなと思います(必要ならメールでもLINEでもDiscordでもTwitterでも切り替えられるように

画像登録必須とすることによるUX低下・登録障壁の上昇

画像登録しないと結局REJECTされるなら一緒では?と思っちゃってますね…

hidollara commented 3 years ago

(構成の話から脱線して機能の話してる気がしてきた……) (画像の保存の話が気になってるのは、画像さえなければ保存すべきデータの量がぐっと減り、運用コスト上楽なんじゃないかと思ってるからです)

shu22203 commented 3 years ago

目につく場所には出さなくてもいいかなと思います

これは管理者だけが見えるステータスでもよさそうね

結局REJECT

というより、とりあえず画像 or スコアだけ先に登録しておいて、後でまとめてやろうーという人がいるらしい(過去に画像一括登録機能の要望があった) 人々がどんな風に登録作業をしているかいまいち分かってない部分がある

運用コスト減る

それはそうなんよねw 量もそうだしレコードと紐付けたり、他の人から推測されないURLにするだったりダルいので 無くす方向で考えてみるかー

(ちなみに毎回のIRでの画像サイズはだいたい50~100MBくらい)