flyingv laravel & aws 經驗分享

38
flyingV Laravel + AWS solution 驗分享

Upload: eugene-wang

Post on 19-Aug-2014

1.506 views

Category:

Engineering


10 download

DESCRIPTION

 

TRANSCRIPT

Page 1: flyingV Laravel & AWS 經驗分享

flyingV Laravel + AWS solution 經驗分享

Page 2: flyingV Laravel & AWS 經驗分享

About me

¡  Eugene 王佑哲

¡  FlyingV 工程師

¡  Inside 網路趨勢共同創辦人

Page 3: flyingV Laravel & AWS 經驗分享

About flyingV

¡ 關於群眾募資

¡  flyingV現況 ¡  2011/7 公司成立,2012/4 網站上線

¡  目前團隊成員:9人 (工程師二枚)

Page 4: flyingV Laravel & AWS 經驗分享

旗下網站

Page 5: flyingV Laravel & AWS 經驗分享

flyingV 重點營運數據

¡ 重點案件 ¡  超電能飛行錶 354 萬

¡  太白粉路跑 635萬

¡  殭屍路跑 796萬

¡  看見台灣首映會 248萬

¡  紐時集資廣告 - 台灣,這次妳一定要撐下去 693萬

¡  割闌尾 – 1198萬

Page 6: flyingV Laravel & AWS 經驗分享
Page 7: 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

Page 8: flyingV Laravel & AWS 經驗分享

目前flyingV架構圖

EC2

Haproxy / Staging Server /Admin Panel / memcache

FE1 FE2 FE3

….

RDS Cloudfront S3

SES SQS

Page 9: flyingV Laravel & AWS 經驗分享

Laravel 4 – best PHP Framework ever

Page 10: flyingV Laravel & AWS 經驗分享

Laravel 建立了優良的PHP 社群

¡ 傳統PHP社群難以建

¡ Composer

¡  PHP artisan ¡  產生Model、Controller、

Migration

¡  Localhost web server

¡  Eloquent ORM

Page 11: flyingV Laravel & AWS 經驗分享

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

Page 12: flyingV Laravel & AWS 經驗分享

flyingV多平台程式架構

¡ 使用 submodule,維護跨平台共同程式碼

Page 13: flyingV Laravel & AWS 經驗分享

flyingV碰到的問題

¡ 提案者是我們最重要的資產,由案件流量大約佔 67%

¡ 案件大小差異超級大

¡ 經常有突發事件流量

Page 14: flyingV Laravel & AWS 經驗分享

全年Google 歷史

太白粉

殭屍路跑 學運:紐約時報廣告

Page 15: flyingV Laravel & AWS 經驗分享

超大型案件 - 匍匐前進

¡  2013年 全台灣最大路跑平台… ¡  太白粉路跑

¡  殭屍路跑

¡  2014年 全台灣最大學運平台…

¡ 紐約時報廣告

¡ 割闌尾

Page 16: flyingV Laravel & AWS 經驗分享

太白粉路跑 ¡ 起因:color run 路跑報名系統掛站,促成第一場由素

人舉辦的路跑活動

¡ 規模:限時不限量,四天募資653萬、6700人報名

¡ 花錢加開機器 (java scala)

¡  7台4x large FE

¡  8x large RDS

¡ 結果 ¡  safe ¡  同時線上人數1600人

Page 17: flyingV Laravel & AWS 經驗分享

殭屍路跑 ¡ 起因:flyingV 引領 台灣素人舉辦特色路跑風氣

¡ 規模:限量一個下午

¡  PHP Laravel 第一次上陣

¡  7台 4xlarge FE + RDS 8xlarge

¡ 結果: ¡  2200同時在線 ¡  RDS cpu100% 掛站 四十分鐘 ¡  一天之內造成 800封客服信 ¡  檢討:居然忘了在table 裡的 foreign key 加index

Page 18: flyingV Laravel & AWS 經驗分享

紐約時報廣告 ¡ 起因:ptt 鄉民發起募資廣告挺學運

¡ 規模:三個小時

¡ 四台 4xlarge FE + RDS 8X large

¡ 結果: ¡  幾乎掛站,速度非常慢 ¡  RDS 100% ¡  6700人同時在線

¡ 檢討:cache 做的不夠

¡ 改進加上view cache、query cache、找出mysql slow log

Page 19: flyingV Laravel & AWS 經驗分享

割闌尾

¡ 起因:民眾發起罷免劣質立委

¡ 規模:長期案件

¡ 四台FE 4X large FE + xlarge RDS

¡ 結果: ¡  同時上線約1000人

¡  FE4台皆100% 、RDS不到 10%

¡ 檢討:cache使用 native錯誤、造成io lock。

¡ 改進:全面改用memcache

Page 20: flyingV Laravel & AWS 經驗分享

善用工具

¡  Slack、Rollbar 幫了大忙 ¡  使用Slack,讓PM、系統可以即時通知大型案件

¡  使用Rollbar即時發現多平台佈署後的程式問題

Page 21: flyingV Laravel & AWS 經驗分享

仍然有問題

¡ 然而就在知名插畫家馬來膜分享了一個連結後………. 依然無法即時反應而掛站…

Page 22: flyingV Laravel & AWS 經驗分享

Thanks & Continue

[email protected]

Page 23: flyingV Laravel & AWS 經驗分享

About me

¡  Ronald/hothero 徐瑋呈

¡  FlyingV 工程師

¡ 清大資工所畢

http://about.me/hothero

Page 24: flyingV Laravel & AWS 經驗分享

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)

Page 25: flyingV Laravel & AWS 經驗分享

Due to… ¡ 網站同時在線數暴增 ¡  網友分享、名人、粉絲團發文(ex:馬來膜)

¡  募資案件相關:預熱開始上線、上架開賣、快要結案時

¡  https ¡  OpenSSL 大大小小的問題 (ex:

Heartbleed)

100 500

1000

2000

0

1000

2000

3000

1 5 10 30

同時在線人數

分鐘數

流量示意圖

Page 26: flyingV Laravel & AWS 經驗分享

雷雷雷之伺服器效能調教 ¡ NFS I/O-Lock

¡ 伺服器(PHP-FPM & Nginx)相關設定掌握度不夠

¡ DB ¡  Indexing

¡  Slow Query

¡  N+1 Query

Page 27: flyingV Laravel & AWS 經驗分享

NFS I/O-Lock ¡ 什麼都想 cache,結果什麼都被 lock !!! ¡  View cache, db query cache, session, …

View Cache

DB Query Cache

Session

Page 28: flyingV Laravel & AWS 經驗分享

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 不同的設定值

Page 29: flyingV Laravel & AWS 經驗分享

Programming Detail

DB Connections

Page 30: flyingV Laravel & AWS 經驗分享

新的伺服器架構 (1/2) ¡ 自動擴展,特殊狀況搭配手動新增機器

¡  Before ¡  開新機器(Instance)from AMI

¡  調整 PHP5-FPM & Nginx 參數設定

¡  將新機器 private ip 加至 haproxy 並設定權重

¡  Private ip: 傳輸免費、相對 public ip 安全

¡ New ¡  Get Notifications

Page 31: flyingV Laravel & AWS 經驗分享

新的伺服 器架構 (2/2)

偵測機器狀況,判斷是否需要增減機器 SSL Termination

ELB •  SSL Termination •  Auto Scaling

Page 32: flyingV Laravel & AWS 經驗分享

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)

Page 33: flyingV Laravel & AWS 經驗分享

SSL Termination Troubleshooting

Page 34: flyingV Laravel & AWS 經驗分享

PHP Script Including Laravel require '../vendor/autoload.php';

require '../bootstrap/start.php';

use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection(Config::get('database.connections.mysql'));

$capsule->bootEloquent();

Page 35: flyingV Laravel & AWS 經驗分享

Auto Scaling Group ¡ Monitoring ¡  CPU

¡  Bandwidth

¡  Disk I/O

¡  Swarm ¡  CPU 平均 50%

以上維持一分鐘

¡  頻寬:一分鐘內 最高同時連線數 超過 1000 個時

Page 36: flyingV Laravel & AWS 經驗分享

ELB ¡ Auto Scaling Group

¡  Launch Configuration

Page 37: flyingV Laravel & AWS 經驗分享

之後的 FlyingV ¡ 週末 ¡  不要再接到 PM 跟老闆的電話

¡  不要打開電腦

¡  拒絕遠端連線回伺服器

¡ 周間上班日 ¡  可以安心的吃午餐

¡  可以安心的睡午覺

¡  可以安心的下班

¡ 以上所述之前提為程式面沒有 Bug 下…

Page 38: flyingV Laravel & AWS 經驗分享