簡體   English   中英

調整php-fpm,nginx,mysql以獲得EC2上的高流量

[英]Tuning php-fpm, nginx, mysql for high traffic on EC2

我想優化我在EC2上的設置。 CentOS 6,nginx 1.0.15,帶有PHP-FPM的PHP 5.4.4,xcache 2.0.0,mysql 5.5.24-55-log,redis 2.4.10,EC2 High Cpu XLarge(c1.xlarge 8核,7G ram)對於高流量的網站,會在每個請求上進行寫。 產生的網絡請求非常小(javascript代碼段)。

基本上,這是一個100%動態的環境(插入或更新)。 在每個Web請求上,我都需要在memcached中進行快速查找,然后在每個頁面請求中記錄一些屬性。 我在世界各地有數個EC2,每天可幫助處理600M +個請求。 我的想法是,我記錄數據並每小時轉儲一次,以供其他計算機處理。 每台機器每天的處理量約為2000萬。 我嘗試了一些數據存儲,一些注意事項如下:

的MySQL

  • 使用小時表來存儲數據,因此專門在9 am/2012的上午11點寫入log_2012_09_05_11。
  • 使用臨時存儲
  • 對我來說,事實證明,MyISAM比innodb更快。 我玩過緩沖池,而myisam似乎總是能獲得更好的性能。 也可以在此處進行任何有關調優的建議,但查詢速度很快。 Myisam鎖定時間非常短。
  • 我使用xdebug剖析了代碼,在高負載下,98%的時間都花在了連接mysql上。 然后,我可以通過使用與mysqli的持久連接來獲得更好的性能。
  • 最高〜2200 rps ,之后獲得網關超時和較慢的響應
  • 服務器負載最大1或2(8核計算機)

雷迪斯

  • 我真的以為這會很棒,但似乎php是瓶頸。
  • 最高〜5-600 rps
  • 這是通過編寫類似“ log_2012_09_05_11_12345”的鍵來實現的,其中12345按小時來自INCR計數器。
  • 每15分鍾保存一次到磁盤(如果我沒記錯的話,操作大約需要2分鍾)

實際上,我每秒可以從這台EC2機器和100%的寫入情況中期望多少個請求? 我是否受EC2的磁盤性能或php或mysql的束縛? 我可以配置它使用更多的CPU還是更好地使用它正在使用的資源?

PHP-FPM http://pastebin.com/raw.php?i=9n2cpqrq

NGINX(nginx.conf) http://pastebin.com/raw.php?i=XuVBKr8m

我真的認為您需要研究將架構組件拆分到不同的系統中。 例如,您注意到您在臨時存儲上運行MySQL。 對於MySQL來說,這很奇怪,因為您的數據很容易丟失。 您是否考慮過使用Amazon RDS?

同樣,您可以考慮將ElasticCache或SimpleDB用作鍵值存儲來代替REDIS。

我想我的主要觀點是,如果您要處理的是大量請求,則實際上應該將服務堆棧分解為多個可以相互獨立擴展的層。

關於性能的一件事,請不要使用EBS驅動器,除非作為RAID並具有專用吞吐量。 與短暫的相比,它們確實很爛。 我將hi1.4xlarge用於其SSD上的臨時驅動器的數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM