Open shu22203 opened 3 years ago
これ要件的な話になるんですけど、リザルト画像って永続化する必要ありますか?(IR係が不正な入力を正すためだけならSlackとかにそのまま飛ばすのが一番楽なんじゃないかなとか思いました
IRサイトって一時的に負荷が上がるタイプなので、永続化のコストによってはFargateとかの方がトータルで安上がりだったりしませんか?あんまりAWS詳しくないので適当言ってたらすいません
リザルト画像
やりたいことは大まかに
で、1は登録された段階でslackなりにスコアとともに流すことで達成できるけど、どれが最終状態か分からないため登録されたものすべて見る必要があるので、ややコスト増
2はスコアに対して画像登録されましたフラグみたいなものを付ければ出来るけど、スコアが更新されたときのフラグのふるまいが煩雑になりそう。UPDATEなしで全てINSERTでやるのも一つの手。
永続化しないとなると、前日などにリザルト画像が正しいものか確認してください〜という声掛けができなくなるので、終了後のIR係の作業コストが増える可能性があるって感じかな。
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吐き出して見れるようにしておくとかも出来るけどダルいなという
RDBじゃなくてスコア・曲・難易度などを管理できてJOIN出来るようなデータベースがあればそれでもいいけど思い付いていない
リザルト画像
自分は最後にまとめて確認するよりちまちま確認したいかなと思った(これはIR係経験者に聞きたいですね)ので、こんな感じの運用が楽なんじゃないかと考えてました。
で、自分が全然細かくスコアを更新しなかったタイプなので、無駄になる登録ってそんな無いんじゃないかな…と思ったので提案したって感じです。
(追記: プレイヤーが登録画像を確認できるっていうのは、あとから見返すものを提供するよりも登録する時に画像をプレビューするとかで良いような気がします。 現状の画像投稿って選んだファイルがファイル名でしか表示されない現状がまずよっぽどつらいのと、あと後から確認してと言っても多分しないので(自分はしたこと無い) )
(追記2: activeって書いたけど、PENDING/APPROVED/REJECTEDみたいなenum入れたほうがユーザーフレンドリーかもなどと ランキングへの表示は承認待ちでもしておけば挙動は多分変わらないので )
Fargate
RDBたっっっっっっっか VPSで良いと思います(手のひらくるくる)
自分がリニューアルする前にPHPで書かれていた初代IRシステムは、登録されたスコアが管理者用画面にリスト化されて、 別途メールで届いた画像と照合して正しければ承認済みにしてランキングにも反映されるというものでした。
そのときは毎日承認作業をしなければならない(そうしないとランキングに反映されないので)というコストが大変だったという意見を汲んで、 今のような最後に一括確認という形になりました。
pending / approved / rejectect (pendingでもランキングには出す)
は確かに良さそうだねー。ただ、最終日までずっとpendingだと出した人は逆に間違ってないかな・・と不安になる人も出てくる気がという不安w
何日かに一回かでもちまちまと承認作業してくれる人がIR係ならいいんだけど!w
というか承認制にすると結局管理画面とslack両方見なくちゃいけないという・・・
あとはslackのサービスレベルに依存することになってしまうというのがどうなんだろうなというのもややあり(別になんでもいいけど何らかの投稿先)
あと、IRは基本的に最終日近くまでリザルト溜めないで、最初からどんどん登録して盛り上げていって欲しいという思いもあるかなー。
実際どのくらい無駄な登録があるかは計測してないので分からないけど。
プレビューはよさそう、今のは確かに何もわからないw
これはちょっと考えてて、approve/rejectをSlackのInteractive Messageとか使って簡単に出来ないかと思ってます 管理画面に入るのは修正の時だけとかにすれば良い気がしてるんですが、どうでしょう…
あとは画像登録必須とすることによるUX低下・登録障壁の上昇が気になるかな
SlackのInteractive Messageとか使って簡単に出来ないか
簡単にできるならよさそう!画面遷移ないから今より簡単だしね
最終日までずっとpendingだと出した人は逆に間違ってないかな・・と不安になる人も出てくる気が
これは凄い分かるので、PENDING/APPROVEDは目につく場所には出さなくてもいいかなと思います
slackのサービスレベルに依存することになってしまうというのがどうなんだろうな
確かにそうなので、通知機構として抽象度上げておけばいいかなと思います(必要ならメールでもLINEでもDiscordでもTwitterでも切り替えられるように
画像登録必須とすることによるUX低下・登録障壁の上昇
画像登録しないと結局REJECTされるなら一緒では?と思っちゃってますね…
(構成の話から脱線して機能の話してる気がしてきた……) (画像の保存の話が気になってるのは、画像さえなければ保存すべきデータの量がぐっと減り、運用コスト上楽なんじゃないかと思ってるからです)
目につく場所には出さなくてもいいかなと思います
これは管理者だけが見えるステータスでもよさそうね
結局REJECT
というより、とりあえず画像 or スコアだけ先に登録しておいて、後でまとめてやろうーという人がいるらしい(過去に画像一括登録機能の要望があった) 人々がどんな風に登録作業をしているかいまいち分かってない部分がある
運用コスト減る
それはそうなんよねw 量もそうだしレコードと紐付けたり、他の人から推測されないURLにするだったりダルいので 無くす方向で考えてみるかー
(ちなみに毎回のIRでの画像サイズはだいたい50~100MBくらい)
React + Goで作る
できるだけお金はかけないようにする
フレームワークなどは使うとしても薄いやつを採用したい
認証: Firebase Authentication
ホスティング: Firebase Hosting
ストレージ(リザルト画像): Firebase Storage
RDB: マネージドサービスは高いので借りてるVPSに直接立てるかな・・
API: API Gateway + LambdaとかFargateでやっても良いが、どうせRDBのためにサーバー用意する必要あるのでそこで立てるのでいいかな・・