Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
PHP x AWS でスケーラブルなシステムをつくろう
Report
Taiji INOUE
Follow
ハンズラボ株式会社
May. 30, 2015
•
0 likes
48 likes
×
Be the first to like this
Show More
•
15,277 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Check these out next
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
PHPカンファレンス2016 初心者セッション
Hideo Kashioka
Php非同期の技法
Shogo Kawahara
Laravel5.1 Release
Yuuki Takezawa
今日から始めるLaravel
Masaru Matsuo
Laravel 5.1 LTSでサービスを作る
infinite_loop
Behat Driven Development
Ryo Tomidokoro
PHPカンファレンス2014の懇親会飛び込みLT資料
Junichi Ishida
1
of
50
Top clipped slide
PHP x AWS でスケーラブルなシステムをつくろう
May. 30, 2015
•
0 likes
48 likes
×
Be the first to like this
Show More
•
15,277 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
Taiji INOUE
Follow
ハンズラボ株式会社
Advertisement
Advertisement
Advertisement
Recommended
PHPデプロイツールの世界
Yuuki Takezawa
32.2K views
•
42 slides
PHPとJavaScriptの噺
Shogo Kawahara
17K views
•
34 slides
恋に落ちるデプロイツール
totty jp
5.1K views
•
49 slides
PHPの今とこれから2015
Rui Hirokawa
30.1K views
•
26 slides
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
Hisateru Tanaka
10K views
•
30 slides
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Tomoki Hasegawa
18K views
•
84 slides
More Related Content
Slideshows for you
(20)
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
•
49.3K views
PHPカンファレンス2016 初心者セッション
Hideo Kashioka
•
919 views
Php非同期の技法
Shogo Kawahara
•
4.3K views
Laravel5.1 Release
Yuuki Takezawa
•
4.9K views
今日から始めるLaravel
Masaru Matsuo
•
11.7K views
Laravel 5.1 LTSでサービスを作る
infinite_loop
•
11.6K views
Behat Driven Development
Ryo Tomidokoro
•
13.8K views
PHPカンファレンス2014の懇親会飛び込みLT資料
Junichi Ishida
•
3.2K views
フレームワークを使うべき 3 つの理由
Kenichi Mukai
•
15.5K views
Cake php + php unitによる実践的ユニットテスト
慶信 若松
•
11.9K views
よりよいPHPUnitの実行方法を求めて
Akio Ishida
•
2.4K views
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
ichikaway
•
17.9K views
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
Hisateru Tanaka
•
39.8K views
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
•
9.1K views
はじめてLaravelさわった 第86回php勉強会
Osamu Kawasaki
•
5.5K views
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
•
5.1K views
活動報告9 laravel5入門-
vx-pc-club
•
3.5K views
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
•
16K views
誰にでもできるパフォーマンスチューニング
Kiyokazu Kaba
•
1.6K views
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
•
18.8K views
Similar to PHP x AWS でスケーラブルなシステムをつくろう
(20)
20090828 Webconlocal
Kentaro Matsui
•
870 views
クラウド開発に役立つ OSS あれこれ
Masataka MIZUNO
•
1.6K views
Hashicorpツールズ
Uchio Kondo
•
1.9K views
オフラインファーストの思想と実践
Shumpei Shiraishi
•
41.8K views
DevOpsにおけるAnsibleの立ち位置と使い所
Hidetoshi Hirokawa
•
10.9K views
AWS Lambda + Python資料 ver0.94 20160825
Yasuharu Suzuki
•
4.1K views
FuelPHP活用事例
Yusuke Naka
•
3.3K views
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
•
9.8K views
php.netの歩き方
Rui Hirokawa
•
330 views
Flumeを活用したAmebaにおける大規模ログ収集システム
Satoshi Iijima
•
20.6K views
メッセージキュー「Pulsar」の紹介 @OSC_20171007
Nozomi Kurihara
•
1.1K views
Cloudn PaaSチームのChatOps実践
Kazuto Kusama
•
7.6K views
Python charity talk in japan fastAPI introduction
ssuserc75dc7
•
127 views
Rancher meetuptokyo #4 Vagrant でつくる Rancher HA構成
Tetsurou Yano
•
1.2K views
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
拓将 平林
•
1.3K views
鹿駆動勉強会 青江発表資料
Takashi Aoe
•
1.4K views
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
Study Group by SciencePark Corp.
•
1.1K views
AWS Opsworksを使ってPHPとLaravelが動くサーバーを構築してみよう!at phpstudy#97
Shinichiro Yoshida
•
1.3K views
Service workerとwebプッシュ通知
zaru sakuraba
•
3.7K views
TokyoWebminig カジュアルなHadoop
Teruo Kawasaki
•
4.3K views
Advertisement
Recently uploaded
(20)
20230523_IoTLT_vol99_kitazaki_v1.pdf
Ayachika Kitazaki
•
107 views
TestSIP (1).pdf
DeependraSingh712859
•
2 views
留信网认证可查【皇家霍洛威学院文凭证书毕业证购买】
32lkhng
•
2 views
ChatGPT + LlamaIndex 0 .6 による チャットボット の実装
Takanari Tokuwa
•
38 views
JSTQB_テストマネジメントとレビュープロセス.pdf
akipii Oga
•
113 views
統計学の攻略_推測統計学の考え方.pdf
akipii Oga
•
138 views
20230602_enebular_meetup_kitazaki_v1.pdf
Ayachika Kitazaki
•
0 views
SoftwareControl.pdf
ssusercd9928
•
15 views
量子論.pdf
hiro150493
•
5 views
【2023年5月】平成生まれのためのUNIX&IT歴史講座
法林浩之
•
16 views
ペンタエリスリトール市場.pdf
HinaMiyazu
•
3 views
SoftwareControl.pdf
ssusercd9928
•
6 views
Üslup ve tercüme.pdf
1Hmmtks
•
2 views
Forguncy8 製品概要 202305.pptx
フォーガンシー
•
38 views
ChatGPT触ってみた
infinite_loop
•
11 views
Kubernetes超入門
Takashi Suzuki
•
5 views
Oracle Cloud Infrastructure:2023年5月度サービス・アップデート
オラクルエンジニア通信
•
29 views
点群SegmentationのためのTransformerサーベイ
Takuya Minagawa
•
12 views
☀️【中央兰开夏大学毕业证成绩单留学生首选】
25mjhd12
•
4 views
MC-800DMT intrusion detector manual
Vedard Security Alarm System Store
•
2 views
PHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS
でスケーラブルなシ ステムをつくろう 2015-06-27 PHPカンファレンス福岡 ハンズラボ株式会社 井上泰治
自己紹介 • 井上 泰治
(いのうえ たいじ) • ハンズラボ株式会社 • Twitter: inufs • Github: inouet ECサイトのバックエンド開発などをやっています。 PHPはPHP3の頃から、かれこれ 10年くらい使って います。
もくじ 1. スケーラブルなシステムとは 2. サービスの成長に伴う課題と解決方法 3.
まとめ 1. スケーラブルなシステムとは
スケーラビリティとは Wikipediaより抜粋 負荷の高低に合わせてリソース・ プールを拡大・縮小できること 短時間に 自動的に
スケーラビリティとは サーバ 本などに書いてあるスケーラビリティ
スケーラビリティとは サーバ スケールアップ
スケーラビリティとは スケールアウト こうなるようにすればよい わかっとるわ!
実際には … 増え続ける構成要素 Database
httpd Proxy / Cache Cache Storage Search Deploy Job QueueDevelop Storage
スケーラビリティとは 実際にはシステムは複数の構成要素から構成され る。WEBサーバ、アプリケーションサーバ、DBサー バ、ロードバランサ、キャッシュ、ストレージなど。 それぞれの構成要素がスケールできるようになっ ていなければならない。 ボトルネックとなりがちな所をAWSに任せて、 開発者はアプリケーション開発に集中しよう!
1. スケーラブルなシステムとは 2. サービスの成長に伴う課題と解決方法 3.
まとめ
最小構成で頑張る期
1. 最小限構成で頑張る期 WEB/App/DB サーバ オール・イ ンワン!
1. 最小限構成で頑張る期 WEB/App/DB サーバ 起きうる課題 アクセス増加で、徐々にサーバー 負荷上昇 サイトが重くなる まずはスペック上げてみる AWSならサーバー停止は必要なものの 簡単にスペックを上げられる
DBサーバ WEB/App サーバ セッション アップロードファイル リクエストはどうやって分散 する? ファイルで持ってたセッショ ンどうしよう ユーザーがアップロードした 画像どうしよう とりあえず、 サーバー分けたけ ど… 1. 最小限構成で頑張る期
WEB/App サーバ S3 memcached 画像など セッション ロードバランサ(ELB)を導 入しよう セッションはmemcached に持たせよう アップロードされたファイ ルの共有にはS3を使おう DBサーバ 1.
最小限構成で頑張る期
1. 最小限構成で頑張る期 PHPにはセッションハンドラという機構があり、 保存先のストレージを設定で変更できるようになっている。 また独自のハンドラを実装することで、新しい保存先を自分で 追加することも可能。 session.save_handler =
memcache session.save_path = 'tcp://10.1.1.1:11211’ /etc/php.ini 最近のフレームワークはその機能を元から同梱していることがほとんどなので、 たいていはフレームワークの設定で済む。 例) http://laravel3.kore1server.com/docs/cache/config#memchached セッションハンドラについて
1. 最小限構成で頑張る期 主にPHPのSDKからアップする方法と、コマンドラインからアップロードする 2通りの方法がある。 下記はSDKを使った例 S3へのアップロードについて
それっぽい構成(初期)
2.それっぽい構成(初期) DBサーバ WEB/App サーバ S3 memcached 画像など セッション 徐々にDBが重くなってきた。 起きうる課題 せっかくmemcachedあるんだし、 ガンガンキャッシュしちゃえ →
memcachedも悲鳴を上げだ した。 ELB
node1 node2 下記のように、増やしたサーバを その都度追加しても良いのですが… Memcachedサーバを追加するたびに、 アプリケーションコードもしくは設定ファイルの修正が必 要になる。 Appサーバ まずはmemcached増やしてみよう 追加 2.それっぽい構成(初期)
2.それっぽい構成(初期) node1 node2 Cluster Client
が サーバーの増減を検知して適切なサーバーに 割り振ってくれる → 増減のたびに設定ファイルとかを変更しなくて良い。 エンドポイント node3 Appサーバ そこで ElastiCache Cluster Client for PHP 増減を自動 検出 pecl ライブラリが提供されている ・・・・ http://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/UserGuide/AutoDiscovery.html
2.それっぽい構成(初期) さて、DBサーバーどうしよう HAProxy / Keepalived Write
Read アプリケーションコードの改修が必要。 Write はこっち、Read はこっちみたいな。 できれば、マスタスレーブ構成に対応し やすいフレームワークを採用しておくとこ の時に困らない。 http://recipes.laravel.jp/recipe/463 まずレプリケーション組んでみる
それっぽい構成(中期)
2.それっぽい構成(中期) DBサーバ WEB/App サーバ S3 キャッシュサーバ 画像、動 画など セッション、キャッシュ ELB
起きうる課題 DBのマスタだけ負荷が高い。 2.それっぽい構成(中期) 数1000万レコードとかあるテーブルが出て きて検索も徐々に遅くなってきた。 → 書き込みがボトルネックに → JOINすると死ぬ。 レプリケーション遅延
2.それっぽい構成(中期) このままRDBを使って頑張るか、他のアー キテクチャに乗り換えるか。 どちらを選んでもそれなりのアプリケー ション改修コストはかかる。 ここが転換期
2.それっぽい構成(中期) RDBで頑張る場合 テーブル分割 or パーティショニング DB分割 ユーザーDB 記事DB user_id
user_name 1001 佐藤 1011 山田 user_id user_name 1002 田中 1012 鈴木 users_01 users_02
2.それっぽい構成(中期) いままでのアーキテクチャが使えるので新しい学習コストはかからない。 トランザクションが使える(ただしDBまたぐと厳しい)
柔軟なクエリ デメリット メリット とはいえJOINできなくなってくる。 テーブル分割すると横断した検索ができない。 それなりの作り込み(改修)が必要で、分割する対象が増えるたびに必要。 アプリケーションコードの複雑化。 自動的にはスケールできない。 RDBで頑張る場合
2.それっぽい構成(中期) Amazon DynamoDB RDBからNo SQLへ 他のアプローチ
2.それっぽい構成(中期) DynamoDBとは AWSのフルマネージド型 NoSQL データベース •
高いスケーラビリティ • 高い信頼性 • 高速なデータ・アクセス
PHP SDKを使ってテーブルにレコードを保存する例 2.それっぽい構成(中期)
2.それっぽい構成(中期) • スケーラビリティ 指定したスループットまで自動的にスケール
一度プログラムを書けばそれがスケールするシステムに。 容量の心配も不要 • DB保守からの開放 DynamoDBの場合 デメリット • トランザクションはあきらめる • 学習コスト • アプリケーションによって向き不向きがある • 検索の自由度が低いので、他のシステムとの併用が必要 連携部分の作り込みはそれなりに必要 メリット
それっぽい構成(後期)
2.それっぽい構成(後期) WEB/App サーバ S3 キャッシュサーバ 画像、動 画など セッション、キャッシュ DynamoDB 検索 CloudSearch ELB
誰かがまごころ込めて作ったAMIをもとに EC2立ち上げて、git からソースをcloneしてきてELBにアタッチす る 刺し身たんぽぽ的作業を経てサーバー1台追加 Bashの脆弱性来た!SSL祭り来た! 既存のサーバーを直接 アップデート ↓ AMIの更新忘れていつの間にかデグレード 2.それっぽい構成(後期) APPサーバも増えて、構成管理とかデプロイとか ちゃんとしないとそろそろ辛い。 再現性の 低いデプ ロイ 人力ス ケール
AWSの中でのPaas (Herokuみたいなやつ) 構成管理、デプロイ、オートスケールまで面倒見てくれ る 流行ってないのがとても残念 もちろん
PHPもサポート インスタンス内にsshで入れるなど自由度はわりと高め そこで Elastic Beanstalk Elastic Beanstalkとは
Elastic Beanstalkのサポートする環境 • Java
(Tomcat) • PHP (Apache) • Python (Apache) • Node.js • Ruby (Passenger/Puma) • .NET (IIS 7.5/8) • Docker
Elastic Beanstalkによる構成管理 Beanstalkでは .ebextensions
というフォルダの内の設定 ファイルで構成管理を行う。 パッケージのインストール コマンドの実行 ユーザー/グループの作成 AWSリソースの設定 実行タイミング 実行内容例 下記が詳しい http://www.slideshare.net/AmazonWebServicesJapan/aws-aws-elastic-beanstalk デプロイ実行前 デプロイ中 デプロイ後
Elastic Beanstalkによる構成管理 設定ファイルの例 packages: yum: php55-opcache: [] commands: 01-command: command:
pecl install redis 02-command: command: pecl install uri_template パッケージのイ ンストール コマンドの実 行
Elastic Beanstalkによるデプロイメント ZIPファイルにまとめてアップロードする方法と、 ebコマンドでデプロイする方法がある。 ebコマンドの方が便利。 $ eb
deploy –profile=production --version=v1.5 ※ eb コマンドには v2とv3があり、v2の古い情報が多いので注意 これを実行すると git レポジトリの v1.5のタグが付けられた ソースが zipファイルとしてS3にアップされ、自動的に デプロイ処理が開始する。
Elastic Beanstalkによるデプロイメント example.com FQDN-1 Deploy (Ver2) ver1 ver2 CNAME FQDN-2 Environmentを作成すると1つFQDNが払い出される 例)
example-1.elasticbeanstalk.com Env: A Env: B Blue-Green デプロイメント
Elastic Beanstalkによるデプロイメント example.com FQDN-2 ver1 ver2 FQDN-1 SWAP Env: A Env:
B Blue-Green デプロイメント コマンド1発で完了
Elastic Beanstalkによるオートスケール <5分間>の<CPU使用率>が <50%>
になったら、イン スタンスを <1台><増やす>といった設定 CRONのように、 <○○ 時>になったら <○○台>に増や す といった設定。 繰り返しも可能 • CPU使用率 • ネットワークIN/OUT • ディスクRead/Write OPS • リクエストカウント • Healty/UnHealty ホスト数 トリガーベース 時間ベース
2.それっぽい構成(後期) WEB/App サーバ S3 キャッシュサーバ 画像など セッション、キャッシュ DynamoDB 検索 CloudSearch Auto
Scaling groupElastic Beanstalk スケールでき そうな気がし てきた! AZ - a AZ - c ELB
APPサーバーと WEBサーバの分離
CDN(CloudFront)の活用 CIとの連携 ログの外出し(fluentdなどの活用) 非同期処理(SQS、ワーカー) 監視(リソース/サービス) 役割によるサービス分割 (Microservices) Lambdaによるイベント処理 2 tier アーキテクチャ 大規模な環境に向けて いままでの話で出てこなかったけど やっておいた方が良いと思われること
おまけ: RDBへの新たな光 Amazon RDS
for Aurora • MySQL互換 • モノリシックなアーキテクチャをクラウドベースで 再構築 • 高い信頼性 • 高い可用性 • 現在プレビューリリース
1. スケーラブルなシステムとは 2. サービスの成長に伴う課題と解決方法 3.
まとめ
三種の神器 (Beanstalk /
DynamoDB / S3 ) で作っておく と1回作ったアプリケーションは改修なしでスケールす る。 とはいえ、最初から完璧なものを開発する必要はない。 → サービスの規模に応じてその都度対応。 AWSにはサービスの成長を助けてくれるいろんなパー ツが用意されているのでうまく活用しよう。 PHPからAWSリソースを使い倒そう。 まとめ
AWS と PHP
があれば、 いくらでもスケールするサービス が作れます。 世界を変えるサービスを作るチャ ンスをみんなが持っています!! まとめ
Make the World
a better place with our hands. ご清聴ありがとう ございました。
Advertisement