ECS Fargate + EFSでWordPressのスケールアウト
by
Kanazawa Yuki
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
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 ご清聴ありがとうございました!