flyingV Laravel & AWS 經驗分享
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,399
On Slideshare
1,643
From Embeds
756
Number of Embeds
8

Actions

Shares
Downloads
36
Comments
0
Likes
25

Embeds 756

http://www.laravel-dojo.com 697
http://www.slideee.com 25
https://www.tumblr.com 14
https://assets.txmblr.com 11
http://www.arfadia.com 6
http://search.yahoo.com 1
http://www.google.com 1
http://www.google.com.tw 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. flyingV Laravel + AWS solution 經 驗分享
  • 2. About me ¡  Eugene 王佑哲 ¡  FlyingV 工程師 ¡  Inside 網路趨勢共同創辦人
  • 3. About flyingV ¡  關於群眾募資 ¡  flyingV現況 ¡  2011/7 公司成立,2012/4 網站上線 ¡  目前團隊成員:9人 (工程師二枚)
  • 4. 旗下網站
  • 5. flyingV 重點營運數據 ¡  重點案件 ¡  超電能飛行錶 354 萬 ¡  太白粉路跑 635萬 ¡  殭屍路跑 796萬 ¡  看見台灣首映會 248萬 ¡  紐時集資廣告 - 台灣,這次妳一定要撐下去 693萬 ¡  割闌尾 – 1198萬
  • 6. 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
  • 7. 目前flyingV架構圖 EC2 Haproxy / Staging Server /Admin Panel / memcache FE1 FE2 FE3 …. RDS Cloudfront S3 SES SQS
  • 8. Laravel 4 – best PHP Framework ever
  • 9. Laravel 建立了優良的PHP 社群 ¡  傳統PHP社群難以建 ¡  Composer ¡  PHP artisan ¡  產生Model、Controller、 Migration ¡  Localhost web server ¡  Eloquent ORM
  • 10. 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
  • 11. flyingV多平台程式架構 ¡  使用 submodule,維護跨平台共同 程式碼
  • 12. flyingV碰到的問題 ¡  提案者是我們最重要的資產,由案件流量大約佔 67% ¡  案件大小差異超級大 ¡  經常有突發事件流量
  • 13. 全年Google 歷史 太白粉 殭屍路跑 學運:紐約時報廣告
  • 14. 超大型案件 - 匍匐前進 ¡  2013年 全台灣最大路跑平台… ¡  太白粉路跑 ¡  殭屍路跑 ¡  2014年 全台灣最大學運平台… ¡  紐約時報廣告 ¡  割闌尾
  • 15. 太白粉路跑 ¡  起因:color run 路跑報名系統掛站,促成第一場由素 人舉辦的路跑活動 ¡  規模:限時不限量,四天募資653萬、6700人報名 ¡  花錢加開機器 (java scala) ¡  7台4x large FE ¡  8x large RDS ¡  結果 ¡  safe ¡  同時線上人數1600人
  • 16. 殭屍路跑 ¡  起因:flyingV 引領 台灣素人舉辦特色路跑風氣 ¡  規模:限量一個下午 ¡  PHP Laravel 第一次上陣 ¡  7台 4xlarge FE + RDS 8xlarge ¡  結果: ¡  2200同時在線 ¡  RDS cpu100% 掛站 四十分鐘 ¡  一天之內造成 800封客服信 ¡  檢討:居然忘了在table 裡的 foreign key 加index
  • 17. 紐約時報廣告 ¡  起因:ptt 鄉民發起募資廣告挺學運 ¡  規模:三個小時 ¡  四台 4xlarge FE + RDS 8X large ¡  結果: ¡  幾乎掛站,速度非常慢 ¡  RDS 100% ¡  6700人同時在線 ¡  檢討:cache 做的不夠 ¡  改進加上view cache、query cache、找出mysql slow log
  • 18. 割闌尾 ¡  起因:民眾發起罷免劣質立委 ¡  規模:長期案件 ¡  四台FE 4X large FE + xlarge RDS ¡  結果: ¡  同時上線約1000人 ¡  FE4台皆100% 、RDS不到 10% ¡  檢討:cache使用 native錯誤、造成io lock。 ¡  改進:全面改用memcache
  • 19. 善用工具 ¡  Slack、Rollbar 幫了大忙 ¡  使用Slack,讓PM、系統可以即時通知大型案件 ¡  使用Rollbar即時發現多平台佈署後的程式問題
  • 20. 仍然有問題 ¡  然而就在知名插畫家馬來膜分享了一個連結後………. 依然無法即時反應而掛站…
  • 21. Thanks & Continue eugene@ontoo.cc
  • 22. About me ¡  Ronald/hothero 徐瑋呈 ¡  FlyingV 工程師 ¡  清大資工所畢 http://about.me/hothero
  • 23. 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)
  • 24. Due to… ¡  網站同時在線數暴增 ¡  網友分享、名人、粉絲團發文(ex:馬來膜) ¡  募資案件相關:預熱開始上線、上架開賣、快要結案時 ¡  https ¡  OpenSSL 大大小小的問題 (ex: Heartbleed) 100 500 1000 2000 0 1000 2000 3000 1 5 10 30 同 時 在 線 人 數 分鐘數 流量示意圖
  • 25. 雷雷雷之伺服器效能調教 ¡  NFS I/O-Lock ¡  伺服器(PHP-FPM & Nginx)相關設定掌握度不夠 ¡  DB ¡  Indexing ¡  Slow Query ¡  N+1 Query
  • 26. NFS I/O-Lock ¡  什麼都想 cache,結果什麼都被 lock !!! ¡  View cache, db query cache, session, … View Cache DB Query Cache Session
  • 27. 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 不同的設定值
  • 28. Programming Detail DB Connections
  • 29. 新的伺服器架構 (1/2) ¡ 自動擴展,特殊狀況搭配手動新增機器 ¡  Before ¡  開新機器(Instance)from AMI ¡  調整 PHP5-FPM & Nginx 參數設定 ¡  將新機器 private ip 加至 haproxy 並設定權重 ¡  Private ip: 傳輸免費、相對 public ip 安全 ¡  New ¡  Get Notifications
  • 30. 新的伺服 器架構 (2/2) 偵測機器狀況,判斷 是否需要增減機器SSL Termination ELB •  SSL Termination •  Auto Scaling
  • 31. 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)
  • 32. SSL Termination Troubleshooting
  • 33. 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();
  • 34. Auto Scaling Group ¡  Monitoring ¡  CPU ¡  Bandwidth ¡  Disk I/O ¡  Swarm ¡  CPU 平均 50% 以上維持一分鐘 ¡  頻寬:一分鐘內 最高同時連線數 超過 1000 個時
  • 35. ELB ¡  Auto Scaling Group ¡  Launch Configuration
  • 36. 之後的 FlyingV ¡  週末 ¡  不要再接到 PM 跟老闆的電話 ¡  不要打開電腦 ¡  拒絕遠端連線回伺服器 ¡  周間上班日 ¡  可以安心的吃午餐 ¡  可以安心的睡午覺 ¡  可以安心的下班 ¡  以上所述之前提為程式面沒有 Bug 下…