Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ファイルを選択して ZIPダウンロードする機能って どうやって作るの? PHPカンファレンス北海道2024 1
Slide 2
Slide 2 text
meihei / 江間 洋平 株式会社PR TIMES Backend Engineer (PHP/Python/Go) X: @app1e_s GitHub: @meihei3 Bluesky: @meihei.bsky.social 直近の登壇 自己紹介 \推しカラーはホワイトです!/ 2
Slide 3
Slide 3 text
(宣伝)Run on PHP Playground 作りました ● php.net 上のサンプルコードを php-play.dev で実行 できるボタンが追加される Chrome 拡張機能です 3
Slide 4
Slide 4 text
今日話すこと ● 「Zipダウンロード機能」を題材に、AWSの 構成を考える話 ● コードの話は出てきません 4
Slide 5
Slide 5 text
こんな機能です ● 企業がアップロード したファイルを ● ユーザーが複数選択 して ● Zip圧縮してダウンロー ドできる機能 5
Slide 6
Slide 6 text
仕様を聞く 設計を考える 6
Slide 7
Slide 7 text
7
Slide 8
Slide 8 text
PdM ※実際のPdMは猫ではなく人間です。架空の人物という体なので見た目が猫になっています。 8
Slide 9
Slide 9 text
PdM Zipファイルのダウンロード 機能を作ります 9
Slide 10
Slide 10 text
仕様から考える1 Zipファイルをダウンロードできるようにする。 ● ファイルが(ほぼ)変更が無いのであれば、S3に 置くだけでよい ○ (例えば、管理者が用意したZipファイルを ダウンロードする) 10
Slide 11
Slide 11 text
設計イメージ1 11
Slide 12
Slide 12 text
PdM Zip圧縮する中身のファイル は、企業がアップロードした ものです Zipファイルのダウンロード 機能を作ります 12
Slide 13
Slide 13 text
仕様から考える2 Zip圧縮する中身のファイルは、企業がアップロードし たものです。 ● 中身のファイルが更新されたら、生成し直す ○ 動的に生成か、静的に生成か 13
Slide 14
Slide 14 text
仕様から考える2 Zip圧縮する中身のファイルは、企業がアップロードし たものです。 ● 中身のファイルが更新されたら、生成し直す ○ 動的に生成か、静的に生成か →サービス・機能の特徴に合わせる 14
Slide 15
Slide 15 text
アップロードからダウンロードまでの時間軸 15
Slide 16
Slide 16 text
静的になるようにZipファイルを事前に生成 16
Slide 17
Slide 17 text
静的になるようにZipファイルを事前に生成 →ダウンロード時に待ち時間が発生しない 17
Slide 18
Slide 18 text
動的にZipファイルを生成 18
Slide 19
Slide 19 text
動的にZipファイルを生成 →ダウンロード時に待ち時間が発生する 19
Slide 20
Slide 20 text
事前生成 vs 動的生成 メリット デメリット 事前生成 (静的ファイル) ● サーバーの負荷が 少ない ● 高速なレスポンス ● ストレージの上限 ● 柔軟性に制限あり 動的生成 ● 柔軟性がある ● 内容が最新 ● サーバーへの負荷 ● レスポンス時間の 遅延 20
Slide 21
Slide 21 text
事前生成 vs 動的生成 メリット デメリット 事前生成 (静的ファイル) ● サーバーの負荷が 少ない ● 高速なレスポンス ● ストレージの上限 ● 柔軟性に制限あり 動的生成 ● 柔軟性がある ● 内容が最新 ● サーバーへの負荷 ● レスポンス時間の 遅延 実際にそれがサービスに求められているか? 21
Slide 22
Slide 22 text
事前生成 vs 動的生成 メリット デメリット 事前生成 (静的ファイル) ● サーバーの負荷が 少ない ● 高速なレスポンス ● ストレージの上限 ● 柔軟性に制限あり 動的生成 ● 柔軟性がある ● 内容が最新 ● サーバーへの負荷 ● レスポンス時間の 遅延 サービスにとって致命的になるか? 22
Slide 23
Slide 23 text
仕様から考える2 Zip圧縮する中身のファイルは、企業がアップロードし たものです。 ● 中身のファイルが更新されたら、生成し直す ○ 動的に生成か、静的に生成か ● 検討事項 ○ 内容の変更頻度が多いか? ○ その機能のアクセス数は多いか? 23
Slide 24
Slide 24 text
仕様から考える2 Zip圧縮する中身のファイルは、企業がアップロードし たものです。 ● 中身のファイルが更新されたら、生成し直す ○ 動的に生成か、静的に生成か ● 検討事項 ○ 内容の変更頻度が多いか? →少ない ○ その機能のアクセス数は多いか? →少ない 静的ファイルを作る方針 24
Slide 25
Slide 25 text
設計イメージ2 25
Slide 26
Slide 26 text
PdM 26
Slide 27
Slide 27 text
PdM Zip圧縮する中身のファイル は、企業がアップロードした ものです Zipファイルのダウンロード 機能を作ります 選択したファイルをZip圧縮 してダウンロード出来ます 27
Slide 28
Slide 28 text
仕様から考える3 選択したファイルをZip圧縮してダウンロード出来る。 ● 静的ファイルを作るのは難しい ○ 組み合わせ数が増大 ● 動的に生成 ○ 動的生成のデメリットを解消するか 28
Slide 29
Slide 29 text
仕様から考える3 選択したファイルをZip圧縮してダウンロード出来る。 ● 静的ファイルを作るのは難しい ○ 組み合わせ数が増大 ● 動的に生成 ○ 動的生成のデメリットを解消するか →サービス・機能の特徴に合わせる 29
Slide 30
Slide 30 text
事前生成 vs 動的生成 メリット デメリット 事前生成 (静的ファイル) ● サーバーの負荷が 少ない ● 高速なレスポンス ● ストレージの上限 ● 柔軟性に制限あり 動的生成 ● 柔軟性がある ● 内容が最新 ● サーバーへの負荷 ● レスポンス時間の 遅延 30
Slide 31
Slide 31 text
仕様から考える3 選択したファイルをZip圧縮してダウンロード出来る。 ● 静的ファイルを作るのは難しい ○ 組み合わせ数が増大 ● 動的に生成 ○ 動的生成のデメリットを解消するか ● 検討項目 ○ サーバーへの負荷 ○ パフォーマンス 31
Slide 32
Slide 32 text
仕様から考える3 選択したファイルをZip圧縮してダウンロード出来る。 ● 静的ファイルを作るのは難しい ○ 組み合わせ数が増大 ● 動的に生成 ○ 動的生成のデメリットを解消するか ● 検討項目 ○ サーバーへの負荷 →どちらかというと重要 ○ パフォーマンス →そこまで重要ではない 32
Slide 33
Slide 33 text
サーバーへの負荷を減らす ● リクエストを受けるWebサーバーと、Zipファイルを 生成するBatchサーバーで分ける →非同期処理 ● 2回目以降は生成処理を実行しないようにする ファイルキャッシュの仕組み ○ 現段階では不要 ● (機能が独立しているならLambdaが便利) 33
Slide 34
Slide 34 text
設計イメージ3 34
Slide 35
Slide 35 text
設計イメージ3 Zipファイルの ダウンロード開始 35
Slide 36
Slide 36 text
36 非同期処理なのでファイルが 生成されているかわからない
Slide 37
Slide 37 text
非同期処理なのでファイルが 生成されているかわからない 37 ステータスを確認するために、ポーリング用のAPIを用意。
Slide 38
Slide 38 text
同期的なリクエストの場合 38
Slide 39
Slide 39 text
非同期的なリクエストの場合 39
Slide 40
Slide 40 text
設計イメージ4 40
Slide 41
Slide 41 text
設計イメージ4 ポーリング用のエンドポイント 41
Slide 42
Slide 42 text
「実行中の状態」と 「ファイルが見つからない状態」の 判別ができない 42
Slide 43
Slide 43 text
43 生成開始時に「実行中」の状態をINSERT 生成完了時に「完了」の状態へUPDATE 「実行中の状態」と 「ファイルが見つからない状態」の 判別ができない
Slide 44
Slide 44 text
設計イメージ5 44
Slide 45
Slide 45 text
設計イメージ5 生成開始とメイン の処理で分ける 45
Slide 46
Slide 46 text
PdM 46
Slide 47
Slide 47 text
まとめ ● Zipファイルをダウンロードする機能のAWS構成につ いて一例を話しました ○ サービス・機能の特徴を限定しないと、やり方はもっ とあります。 ● 以下を繰り返す ○ 要件・仕様を聞く ○ 出来る方法・Pros/Consを考える ○ 作ってみて発生した問題を解消する 47
Slide 48
Slide 48 text
付録:ブログでも公開しています https://developers.prtimes.jp/2023/12/25/use_go_and_aws_to_build_press_kit_batch_download/ 48