Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

構成妄想 #1

Open
shu22203 opened this issue Aug 8, 2020 · 14 comments
Open

構成妄想 #1

shu22203 opened this issue Aug 8, 2020 · 14 comments

Comments

@shu22203
Copy link
Owner

shu22203 commented Aug 8, 2020

React + Goで作る

  • できるだけお金はかけないようにする

  • フレームワークなどは使うとしても薄いやつを採用したい

  • 認証: Firebase Authentication

  • ホスティング: Firebase Hosting

  • ストレージ(リザルト画像): Firebase Storage

  • RDB: マネージドサービスは高いので借りてるVPSに直接立てるかな・・

  • API: API Gateway + LambdaとかFargateでやっても良いが、どうせRDBのためにサーバー用意する必要あるのでそこで立てるのでいいかな・・

@hidollara
Copy link
Collaborator

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

@hidollara
Copy link
Collaborator

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

@shu22203
Copy link
Owner Author

shu22203 commented Aug 8, 2020

リザルト画像

やりたいことは大まかに

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

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

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

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

@shu22203
Copy link
Owner Author

shu22203 commented Aug 8, 2020

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
Copy link
Owner Author

shu22203 commented Aug 8, 2020

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

@hidollara
Copy link
Collaborator

hidollara commented Aug 8, 2020

リザルト画像

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

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

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

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

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

Fargate

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

@shu22203
Copy link
Owner Author

shu22203 commented Aug 8, 2020

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

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

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

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

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

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

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

@shu22203
Copy link
Owner Author

shu22203 commented Aug 8, 2020

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

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

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

@hidollara
Copy link
Collaborator

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

@shu22203
Copy link
Owner Author

shu22203 commented Aug 8, 2020

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

@shu22203
Copy link
Owner Author

shu22203 commented Aug 8, 2020

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

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

@hidollara
Copy link
Collaborator

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

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

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

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

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

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

@hidollara
Copy link
Collaborator

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

@shu22203
Copy link
Owner Author

shu22203 commented Aug 8, 2020

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

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

結局REJECT

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

運用コスト減る

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants