SlideShare a Scribd company logo
1 of 38
Download to read offline
flyingV Laravel + AWS solution 經
驗分享
About me
¡  Eugene 王佑哲
¡  FlyingV 工程師
¡  Inside 網路趨勢共同創辦人
About flyingV
¡  關於群眾募資
¡  flyingV現況
¡  2011/7 公司成立,2012/4 網站上線
¡  目前團隊成員:9人 (工程師二枚)
旗下網站
flyingV 重點營運數據
¡  重點案件
¡  超電能飛行錶 354 萬
¡  太白粉路跑 635萬
¡  殭屍路跑 796萬
¡  看見台灣首映會 248萬
¡  紐時集資廣告 - 台灣,這次妳一定要撐下去 693萬
¡  割闌尾 – 1198萬
flyingV開發工具
¡  全站使用AWS solution
¡  EC2 + RDS + CloudFront + S3 + SES + SQS
¡  網站架構
¡  後端框架
¡  Play framework (java, scala) → Laravel 4 (php)
¡  前端框架
¡  jQuery → Backbone.js → jQuery + handlebars.js
¡  其他工具
¡  Github
¡  Slack
¡  Asana
¡  Rollbar
目前flyingV架構圖
EC2
Haproxy / Staging Server /Admin Panel / memcache
FE1
 FE2
 FE3
….
RDS
 Cloudfront
 S3
SES
 SQS
Laravel 4 –
best PHP Framework ever
Laravel 建立了優良的PHP 社群
¡  傳統PHP社群難以建
¡  Composer
¡  PHP artisan
¡  產生Model、Controller、
Migration
¡  Localhost web server
¡  Eloquent ORM
Composer.json flyingV
¡  laravel/framework: 4.1
¡  cartalyst/sentry
¡  cartalyst/sentry-social
¡  j20/php-uuid
¡  intervention/image
¡  aws/aws-sdk-php-laravel
¡  vinelab/http
¡  codesleeve/asset-pipeline
¡  rollbar/rollbar
¡  thujohn/rss
¡  anahkiasen/former
¡  intouch/laravel-newrelic
¡  Dev
¡  barryvdh/laravel-debugbar
¡  barryvdh/laravel-migration-
generator
flyingV多平台程式架構
¡  使用 submodule,維護跨平台共同
程式碼
flyingV碰到的問題
¡  提案者是我們最重要的資產,由案件流量大約佔 67%
¡  案件大小差異超級大
¡  經常有突發事件流量
全年Google 歷史
太白粉
殭屍路跑
 學運:紐約時報廣告
超大型案件 - 匍匐前進
¡  2013年 全台灣最大路跑平台…
¡  太白粉路跑
¡  殭屍路跑
¡  2014年 全台灣最大學運平台…
¡  紐約時報廣告
¡  割闌尾
太白粉路跑
¡  起因:color run 路跑報名系統掛站,促成第一場由素
人舉辦的路跑活動
¡  規模:限時不限量,四天募資653萬、6700人報名
¡  花錢加開機器 (java scala)
¡  7台4x large FE
¡  8x large RDS
¡  結果
¡  safe
¡  同時線上人數1600人
殭屍路跑
¡  起因:flyingV 引領 台灣素人舉辦特色路跑風氣
¡  規模:限量一個下午
¡  PHP Laravel 第一次上陣
¡  7台 4xlarge FE + RDS 8xlarge
¡  結果:
¡  2200同時在線
¡  RDS cpu100% 掛站 四十分鐘
¡  一天之內造成 800封客服信
¡  檢討:居然忘了在table 裡的 foreign key 加index
紐約時報廣告
¡  起因:ptt 鄉民發起募資廣告挺學運
¡  規模:三個小時
¡  四台 4xlarge FE + RDS 8X large
¡  結果:
¡  幾乎掛站,速度非常慢
¡  RDS 100%
¡  6700人同時在線
¡  檢討:cache 做的不夠
¡  改進加上view cache、query cache、找出mysql slow log
割闌尾
¡  起因:民眾發起罷免劣質立委
¡  規模:長期案件
¡  四台FE 4X large FE + xlarge RDS
¡  結果:
¡  同時上線約1000人
¡  FE4台皆100% 、RDS不到 10%
¡  檢討:cache使用 native錯誤、造成io lock。
¡  改進:全面改用memcache
善用工具
¡  Slack、Rollbar 幫了大忙
¡  使用Slack,讓PM、系統可以即時通知大型案件
¡  使用Rollbar即時發現多平台佈署後的程式問題
仍然有問題
¡  然而就在知名插畫家馬來膜分享了一個連結後……….
依然無法即時反應而掛站…
Thanks &
Continue
eugene@ontoo.cc
About me
¡  Ronald/hothero 徐瑋呈
¡  FlyingV 工程師
¡  清大資工所畢
http://about.me/hothero
Outline
¡  伺服器效能調教一路上踩過的雷
¡  New Server Architecture
¡  Problem & Solution how to solve
¡  Ssl termination
¡  Elb auto scaling
¡  The future of flyingv
¡  https 轉的問題
¡  過去 nfs 問題(I/O lock problem)
¡  Nginx php5-fpm 效能調教(different instance type)、htop (php 執
行速度、RDS)
Due to…
¡  網站同時在線數暴增
¡  網友分享、名人、粉絲團發文(ex:馬來膜)
¡  募資案件相關:預熱開始上線、上架開賣、快要結案時
¡  https
¡  OpenSSL 大大小小的問題 (ex:
Heartbleed)
100
500
1000
2000
0
1000
2000
3000
1 5 10 30
同
時
在
線
人
數
分鐘數
流量示意圖
雷雷雷之伺服器效能調教
¡  NFS I/O-Lock
¡  伺服器(PHP-FPM & Nginx)相關設定掌握度不夠
¡  DB
¡  Indexing
¡  Slow Query
¡  N+1 Query
NFS I/O-Lock
¡  什麼都想 cache,結果什麼都被 lock !!!
¡  View cache, db query cache, session, …
View Cache
DB Query Cache
Session
PHP5-FPM & Nginx
Configuration
¡  EC2 Instance Type: c3.large, c3.xlarge, c3.2xlarge,
c3.4xlarge, c3.8xlarge
¡  # of CPU Core: 2~32
¡  RAM: 3.75~60 GiB
¡  Configuration
¡  Nginx: worker_processes 4;
¡  PHP5-FPM: pm.max_children = 32;
¡  Static, dynamic, on demand
¡  Process children 數量取決於 RAM 的大小,能同時處理越多
php scripts
¡  根據 CPU 的核心數,給予 Nginx worker_process 不同的設定值
Programming Detail
DB Connections
新的伺服器架構 (1/2)
¡ 自動擴展,特殊狀況搭配手動新增機器
¡  Before
¡  開新機器(Instance)from AMI
¡  調整 PHP5-FPM & Nginx 參數設定
¡  將新機器 private ip 加至 haproxy 並設定權重
¡  Private ip: 傳輸免費、相對 public ip 安全
¡  New
¡  Get Notifications
新的伺服
器架構
(2/2)
偵測機器狀況,判斷
是否需要增減機器SSL Termination
ELB
•  SSL Termination
•  Auto Scaling
SSL Termination
¡  把 SSL 加解密傳輸的部份都交由 AWS 處理
¡  雷之 HTTPS forward to HTTP(對於 Web Server 而言拿到的是 HTTP)
¡  URL Rewrites: 3xx Redirects 對於 POST 支援度不完整
¡  Website Development Framework 的 URL Helper 多轉成絕對位址(例如:
laravel 之 form::open, request::root(), …)
¡  PHP 可用 $_SERVER[‘HTTP_X_FORWARDED_PROTO’]
¡  善用相對位址 (ex: js/jquery.latest.min.js)
SSL Termination
Troubleshooting
PHP Script Including Laravel
require '../vendor/autoload.php';
require '../bootstrap/start.php';
use IlluminateDatabaseCapsuleManager as
Capsule;
$capsule = new Capsule;
$capsule-
>addConnection(Config::get('database.connections.
mysql'));
$capsule->bootEloquent();
Auto
Scaling
Group
¡  Monitoring
¡  CPU
¡  Bandwidth
¡  Disk I/O
¡  Swarm
¡  CPU 平均 50%
以上維持一分鐘
¡  頻寬:一分鐘內
最高同時連線數
超過 1000 個時
ELB
¡  Auto Scaling Group
¡  Launch Configuration
之後的 FlyingV
¡  週末
¡  不要再接到 PM 跟老闆的電話
¡  不要打開電腦
¡  拒絕遠端連線回伺服器
¡  周間上班日
¡  可以安心的吃午餐
¡  可以安心的睡午覺
¡  可以安心的下班
¡  以上所述之前提為程式面沒有 Bug 下…
flyingV Laravel & AWS 經驗分享

More Related Content

What's hot

PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
Ryuji Yamashita
 

What's hot (20)

魔法少女 Laravel 2014
魔法少女 Laravel 2014魔法少女 Laravel 2014
魔法少女 Laravel 2014
 
LaravelとMVCの先へ
LaravelとMVCの先へLaravelとMVCの先へ
LaravelとMVCの先へ
 
魔法少女 Laravel
魔法少女 Laravel魔法少女 Laravel
魔法少女 Laravel
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
 
HHVM/Hackを本番投入した話
HHVM/Hackを本番投入した話HHVM/Hackを本番投入した話
HHVM/Hackを本番投入した話
 
LaravelでAPI定義を管理する
LaravelでAPI定義を管理するLaravelでAPI定義を管理する
LaravelでAPI定義を管理する
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014
 
活動報告9 laravel5入門-
活動報告9  laravel5入門-活動報告9  laravel5入門-
活動報告9 laravel5入門-
 
Creators meetup5
Creators meetup5Creators meetup5
Creators meetup5
 
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
 
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
 
はじめてLaravelさわった 第86回php勉強会
はじめてLaravelさわった 第86回php勉強会はじめてLaravelさわった 第86回php勉強会
はじめてLaravelさわった 第86回php勉強会
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
Laravelとテストについて
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
 

Viewers also liked

Viewers also liked (20)

對於群募,你必需知道的5件事
對於群募,你必需知道的5件事對於群募,你必需知道的5件事
對於群募,你必需知道的5件事
 
群眾募資時代的公益勸募 @103 年「非營利組織資訊科技運用」座談會
群眾募資時代的公益勸募 @103 年「非營利組織資訊科技運用」座談會群眾募資時代的公益勸募 @103 年「非營利組織資訊科技運用」座談會
群眾募資時代的公益勸募 @103 年「非營利組織資訊科技運用」座談會
 
群眾募資知多少
群眾募資知多少群眾募資知多少
群眾募資知多少
 
群眾募資時代的公益勸募 - NPOChannel
群眾募資時代的公益勸募 - NPOChannel群眾募資時代的公益勸募 - NPOChannel
群眾募資時代的公益勸募 - NPOChannel
 
群眾募資時代的公益勸募 - FlyingV
群眾募資時代的公益勸募 - FlyingV群眾募資時代的公益勸募 - FlyingV
群眾募資時代的公益勸募 - FlyingV
 
[網路星期二] 非營利組織網站剖析:網站文案大不同-實例剖析:蠻野心足網路行銷
[網路星期二] 非營利組織網站剖析:網站文案大不同-實例剖析:蠻野心足網路行銷[網路星期二] 非營利組織網站剖析:網站文案大不同-實例剖析:蠻野心足網路行銷
[網路星期二] 非營利組織網站剖析:網站文案大不同-實例剖析:蠻野心足網路行銷
 
自製線上地圖呈現地理資料:非營利組織案例介紹
自製線上地圖呈現地理資料:非營利組織案例介紹自製線上地圖呈現地理資料:非營利組織案例介紹
自製線上地圖呈現地理資料:非營利組織案例介紹
 
20160913 網路星期二:NGO 不可不知的著作權與開放授權
20160913 網路星期二:NGO 不可不知的著作權與開放授權20160913 網路星期二:NGO 不可不知的著作權與開放授權
20160913 網路星期二:NGO 不可不知的著作權與開放授權
 
D4SG creates new opportunities for public service
D4SG creates new opportunities for public serviceD4SG creates new opportunities for public service
D4SG creates new opportunities for public service
 
20151208 民眾、社群與 NGO 的協作:飲水地圖的經驗
20151208 民眾、社群與 NGO 的協作:飲水地圖的經驗20151208 民眾、社群與 NGO 的協作:飲水地圖的經驗
20151208 民眾、社群與 NGO 的協作:飲水地圖的經驗
 
Flying v群眾募資簡介
Flying v群眾募資簡介Flying v群眾募資簡介
Flying v群眾募資簡介
 
20160315 網路星期二:數據會說話 - 從NPO的網站分析談起
20160315 網路星期二:數據會說話 - 從NPO的網站分析談起20160315 網路星期二:數據會說話 - 從NPO的網站分析談起
20160315 網路星期二:數據會說話 - 從NPO的網站分析談起
 
20160517 網路星期二:社群媒體雙刀流 官網/部落格+粉絲團
20160517 網路星期二:社群媒體雙刀流 官網/部落格+粉絲團20160517 網路星期二:社群媒體雙刀流 官網/部落格+粉絲團
20160517 網路星期二:社群媒體雙刀流 官網/部落格+粉絲團
 
20150811 網路星期二:非營利組織的網路內容策略
20150811 網路星期二:非營利組織的網路內容策略20150811 網路星期二:非營利組織的網路內容策略
20150811 網路星期二:非營利組織的網路內容策略
 
網路時代之自有媒體行銷:非營利組織篇
網路時代之自有媒體行銷:非營利組織篇網路時代之自有媒體行銷:非營利組織篇
網路時代之自有媒體行銷:非營利組織篇
 
公益勸募條例面面觀
公益勸募條例面面觀公益勸募條例面面觀
公益勸募條例面面觀
 
20160823 網路星期二:Google Adwords 第一次下單就上手 - 非營利組織的關鍵字廣告購買策略(續)
20160823 網路星期二:Google Adwords 第一次下單就上手 - 非營利組織的關鍵字廣告購買策略(續)20160823 網路星期二:Google Adwords 第一次下單就上手 - 非營利組織的關鍵字廣告購買策略(續)
20160823 網路星期二:Google Adwords 第一次下單就上手 - 非營利組織的關鍵字廣告購買策略(續)
 
Microsoft Transformation
Microsoft TransformationMicrosoft Transformation
Microsoft Transformation
 
聯合勸募愛心匯集之努力
聯合勸募愛心匯集之努力聯合勸募愛心匯集之努力
聯合勸募愛心匯集之努力
 
20161011 網路星期二:非營利組織總是缺一個資訊人?-- 談談司改會的資訊部門在做什麼?
20161011 網路星期二:非營利組織總是缺一個資訊人?-- 談談司改會的資訊部門在做什麼?20161011 網路星期二:非營利組織總是缺一個資訊人?-- 談談司改會的資訊部門在做什麼?
20161011 網路星期二:非營利組織總是缺一個資訊人?-- 談談司改會的資訊部門在做什麼?
 

Similar to flyingV Laravel & AWS 經驗分享

SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
 
JavaScript on GitHub (#kyotojs)
JavaScript on GitHub  (#kyotojs)JavaScript on GitHub  (#kyotojs)
JavaScript on GitHub (#kyotojs)
y_uuki
 

Similar to flyingV Laravel & AWS 經驗分享 (20)

Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
 
今からハジメるHTML5プログラミング
今からハジメるHTML5プログラミング今からハジメるHTML5プログラミング
今からハジメるHTML5プログラミング
 
AWS Opsworksを使ってPHPとLaravelが動くサーバーを構築してみよう!at phpstudy#97
AWS Opsworksを使ってPHPとLaravelが動くサーバーを構築してみよう!at phpstudy#97AWS Opsworksを使ってPHPとLaravelが動くサーバーを構築してみよう!at phpstudy#97
AWS Opsworksを使ってPHPとLaravelが動くサーバーを構築してみよう!at phpstudy#97
 
転職とLaravel
転職とLaravel転職とLaravel
転職とLaravel
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
AWSによるサーバーレスアーキテクチャ
AWSによるサーバーレスアーキテクチャAWSによるサーバーレスアーキテクチャ
AWSによるサーバーレスアーキテクチャ
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
 
『RIA開発におけるサービス開発のイロハ』
 『RIA開発におけるサービス開発のイロハ』 『RIA開発におけるサービス開発のイロハ』
『RIA開発におけるサービス開発のイロハ』
 
RIA開発におけるサービス開発のイロハ
RIA開発におけるサービス開発のイロハRIA開発におけるサービス開発のイロハ
RIA開発におけるサービス開発のイロハ
 
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみましたJAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
9/16 Tokyo Apache Drill Meetup - drill vs sparksql9/16 Tokyo Apache Drill Meetup - drill vs sparksql
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
 
Play勉強会 第3回
Play勉強会 第3回Play勉強会 第3回
Play勉強会 第3回
 
まだFTPで消耗してるの? Wordmoveではじめる 異次元のデータ転送
まだFTPで消耗してるの? Wordmoveではじめる 異次元のデータ転送まだFTPで消耗してるの? Wordmoveではじめる 異次元のデータ転送
まだFTPで消耗してるの? Wordmoveではじめる 異次元のデータ転送
 
Jawsug chiba API Gateway
Jawsug chiba API GatewayJawsug chiba API Gateway
Jawsug chiba API Gateway
 
Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5
 
JavaScript on GitHub (#kyotojs)
JavaScript on GitHub  (#kyotojs)JavaScript on GitHub  (#kyotojs)
JavaScript on GitHub (#kyotojs)
 
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
 
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
 

flyingV Laravel & AWS 經驗分享