SlideShare a Scribd company logo
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 Laravel & AWS 經驗分享
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

PPTX
Phpフレームワーク 「laravel」でブログを作ろう
PDF
Laravel5を使って開発してみた
PDF
Laravel / Lumen 次の一歩
PDF
Laravel_オープンソースカンファレンスhokkaido_JP_2014
PDF
php開発で使うタスクランナー gulp
PDF
behatエクステンションの作り方
PDF
いまどきのPHP開発現場 -2015年秋-
PDF
フレームワークを使うべき 3 つの理由
Phpフレームワーク 「laravel」でブログを作ろう
Laravel5を使って開発してみた
Laravel / Lumen 次の一歩
Laravel_オープンソースカンファレンスhokkaido_JP_2014
php開発で使うタスクランナー gulp
behatエクステンションの作り方
いまどきのPHP開発現場 -2015年秋-
フレームワークを使うべき 3 つの理由

What's hot (20)

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

Viewers also liked (20)

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

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

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

flyingV Laravel & AWS 經驗分享