ECS Fargate + EFSでWordPressのスケールアウト
by
Kanazawa Yuki
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup ECS Fargate + EFSで WordPressのスケールアウト https://www.lancers.jp/ 「テクノロジーで、個をエンパワーメントする」 ランサーズ株式会社 SRE 金澤 裕毅 [Kanazawa Yuki]
Slide 2
Slide 2 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup 自己紹介 2 氏名:金澤 裕毅 出身:宮城県仙台市 Lancers, Inc. / Site Reliability Engineer (2013/11 -) 趣味: 将棋(ウォーズ初段、将棋倶楽部24で1000点くらい) Github:yKanazawa Twitter: @yakitori009 Language: C++, Java, PHP, Go
Slide 3
Slide 3 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup 3 ランサーズを支える技術
Slide 4
Slide 4 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup 4 ランサーズの提供サービス APIシステム コーポレートサイト ランサーズ お知らせ 認証システム 広告システム メールシステム 管理画面 電話確認システム 分析システム クラウドソーシング
Slide 5
Slide 5 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のWordPressサーバー構成 ●Appサーバー ○Amazon Linux 1 ○Nginx ○PHP-FPM ○PHP 7.3 ●DBサーバー ○AWS Aurora ■MySQL5.7 ●ソースコード管理 ○Github ○自前のdeployシステムで更新 Route 53 ALB WordPress deploy S3 Aurora Nginx PHP-FPM WorPress ソース
Slide 6
Slide 6 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup Fargate + EFSのWordPressサーバー構成 ●Appコンテナ ○Alphine Linux ○Nginx ○PHP-FPM ○PHP 7.3 ●DBサーバー ○AWS Aurora ■MySQL5.7 ●ソースコード管理 ○Github ○CodeBuildで更新 ■EFS内でgit pullするだけ WordPress Containar S3 Aurora EFS Fargate Route 53 ALB CodeBuild Nginx PHP-FPM WordPress ソース
Slide 7
Slide 7 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup AWS(EC2)で WordPressのスケールアウト
Slide 8
Slide 8 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup 復習 ●※PHPカンファレンス仙台で発表した内容をおさらい ○https://bit.ly/3c9NABR
Slide 9
Slide 9 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup スケールアウトの課題
Slide 10
Slide 10 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup DBの問題 ●DBが2つ以上のサーバーに分散してしまう DB DB ALB
Slide 11
Slide 11 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup ファイルアップロード問題 ●ファイルのアップロードができない ○どれか1つのインスタンス内ディレクトリしか格納されない wp-content/uploads/ こちら側にしか 格納されない ALB
Slide 12
Slide 12 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup プラグインのアップデート問題 ●管理画面からプラグインをアップデートできない ○どれか1つのインスタンスしかアップデートされない wp-content/plugins/ こちら側しか アップデートされない ALB
Slide 13
Slide 13 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup wp-cronの問題 ●サーバーの数だけ実行されてしまう wp-cron wp-cron ALB
Slide 14
Slide 14 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup スケールアウトの準備
Slide 15
Slide 15 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2の一台構成 Route 53 WordPress
Slide 16
Slide 16 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup データベースの分離 Route 53 WordPress Aurora ●RDS (Aurora)に分離
Slide 17
Slide 17 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup アップロードディレクトリの分離(S3) Route 53 WordPress S3 Aurora ●Webサイトホスティングを設定したS3バケットを構築 ○wp-contents/uploads 以下のファイルをここに格納 Webサイト ホスティングを設定した S3バケットを構築 wp-contents/uploads
Slide 18
Slide 18 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup プラグインごとコード管理する Route 53 WordPress deploy S3 Aurora ●Githubの場合 ○自前で構築したDeployシステムからAppサーバーにsync 独自の デプロイシステム プラグインごと コード管理
Slide 19
Slide 19 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup ALB(Application Load Balancer)の追加 Route 53 ALB WordPress deploy S3 Aurora Sessionは wp_optionsテーブルに 格納される
Slide 20
Slide 20 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup 独自のデプロイシステム ●全てのWordPressサーバー(EC2)のソースを更新 ○デプロイ時間は1分以内
Slide 21
Slide 21 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のリリースフロー Route 53 ALB WordPress deploy WordPress Developer 1. ローカルPCでupdate 2.git push ●デプロイサーバーでgit pull ○全WordPressサーバーにrsync 4. git pull 5. rsync 3. デプロイシステム からリリース
Slide 22
Slide 22 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup オートスケーリングの構築
Slide 23
Slide 23 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のオートスケーリング ALB WordPress deploy
Slide 24
Slide 24 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のオートスケーリング ALB WordPress deploy WordPress ●AMIからWordPressサーバーを起動 AMI
Slide 25
Slide 25 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のオートスケーリング ALB WordPress deploy WordPress ●Deployサーバーから最新のソースを取得
Slide 26
Slide 26 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のオートスケーリング ALB WordPress deploy WordPress ●ALBにアタッチ
Slide 27
Slide 27 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2オートスケーリングの課題 ALB WordPress deploy WordPress ●デプロイシステムへの依存 ○デプロイサーバーが単一障害点に ●定期的にAMIの取り直しが必要 ○ソースの差分が多くなると時間がかかる ○サーバー構成変更時にも取り直しが必要 ●スケールアウトに時間がかかる ○1分以上 デプロイシステムのメンテナンスも大変 DockerベースにしてDeployサーバーを廃止したい
Slide 28
Slide 28 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup AWS(ECS Fargate + EFS) でWordPressのスケールアウト
Slide 29
Slide 29 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup 一般的なDockerによるリリースフロー WordPress Containar S3 Aurora Fargate Route 53 ALB Nginx PHP-FPM ソース User ECR WordPress Containar Dockerfile WordPress ソース リリース時間:約10分 WordPress Containar
Slide 30
Slide 30 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup 一般的なDockerによるリリースフロー WordPress Containar S3 Aurora Fargate Route 53 ALB Nginx PHP-FPM ソース User ECR WordPress Containar Dockerfile WordPress ソース WordPressの リポジトリが 10個以上 (約7.5GB) 全て入れる 必要がある WordPress Containar
Slide 31
Slide 31 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup ソースコードをEFS側に配置する WordPress Containar S3 Aurora Fargate Route 53 ALB Nginx PHP-FPM User ECR WordPress Containar EFS WordPress ソース Dockerfile リリース時間:約7分 リリース時間:約1分 CodeBuild ソース WordPress Containar
Slide 32
Slide 32 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup CircleCI → Codebuildを経由する理由 ●GitHub → CodeBuild で直接起動も可能 ○しかし、リポジトリの数だけCodeBuildを作る必要がある EFS CodeBuild
Slide 33
Slide 33 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup CircleCI → Codebuildを経由する理由 ●CircleCI からAWS CLIで CodeBuild を起動 ○引数にリポジトリパスを指定 EFS CodeBuild aws --region ap-northeast-1 codebuild start-build --project-name wordpress_ release --environment-variables-override name=RELEASE_PATH,value=engineerblog name=BRANCH,value=BRANCH_NAME
Slide 34
Slide 34 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EFSの検証
Slide 35
Slide 35 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup ECS FargateのEFS対応バージョン ●バージョン1.4.0以上で対応 ○※現在はlatestが1.4.0以上になっている
Slide 36
Slide 36 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup サーバーレスポンス ●EC2サーバー ○平均1秒未満(最大約5秒) ●ECS + Fargate ○平均約5秒(最大約10秒) ●Amazon Elastic File System の読み取りスループットが3倍に ○ https://aws.amazon.com/jp/about-aws/whats-new/2021/01/amazon-elastic-file-system-triples-read-throughput/ ○レスポンスが改善 ■平均約5秒→平均約2秒 ■EC2よりは遅いが、実用上問題ないレベルに
Slide 37
Slide 37 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EFSのバーストクレジットを使い切る。。 ●本番リリース後、約1週間でパフォーマンスが急激に低下
Slide 38
Slide 38 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EFSのバーストクレジットを使い切る。。 ●プロビジョニングIOPSを設定 ○EFSのサイズ:約7.5GB ○100MB/sに設定(実際は300MB/s出る) 費用がバカ高い
Slide 39
Slide 39 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup バッチの実行
Slide 40
Slide 40 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のバッチの実行 ●wp-cronは使わずcrontabで制御 ○管理画面用の小さいインスタンス上で実行していた ALB WordPress WordPress Admin WordPress Auto Scaling Group Aurora ここでバッチを実行
Slide 41
Slide 41 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup Docker移行後のバッチ実行 ●ECS Taskで制御 ○AZ障害の対策にもなる ALB WordPress ECS Task WordPress Auto Scaling Group Aurora EFS ここでバッチを実行
Slide 42
Slide 42 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup まとめと今後の課題
Slide 43
Slide 43 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup まとめ(EC2サーバーとの比較) デプロイ バッチ レスポンス サーバー費用 EC2 自前の デプロイサーバー デプロイ時間:1分 管理画面 サーバーで cron 平均約1秒 t3.medium x 平均2台 + 管理画面 (月額約10000円) Docker CIで処理 デプロイ時間:7分 +リポジトリ数 x 3分 ECS Task 平均約2秒 vCPU:2 メモリ:2048MB x 平均4台 + ECS Task (月額約20000円) Docker + EFS CIで処理 デプロイ時間:1分 (Dockerfileは7分) ECS Task 平均約3秒 vCPU:2 メモリ:2048MB x 平均4台 + ECS Task (月額約20000円) + EFS IOPS(100MB/s) (月額約60000円)
Slide 44
Slide 44 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup 今後の課題(サーバー費用を抑えるために) ●CloudFrontの導入 ○クレジットを使い切らないレベルまでキャッシュさせる ○動的コンテンツ(PHP)をキャッシュさせる ■キャッシュ間隔の設定が課題 ●ランキング等は動的に変更される ■セキュリティ面の配慮が必要 ●例えば管理画面はキャッシュできない ●Fargate Spotの導入
Slide 45
Slide 45 text
2021/3/25 SPACEMARKET x Lancers Engineer Meetup ご清聴ありがとうございました!