flyingV Laravel & AWS 經驗分享

4,313 views
4,015 views

Published on

Published in: Engineering, Technology
0 Comments
43 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,313
On SlideShare
0
From Embeds
0
Number of Embeds
1,376
Actions
Shares
0
Downloads
57
Comments
0
Likes
43
Embeds 0
No embeds

No notes for slide

flyingV Laravel & AWS 經驗分享

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

×