對於許多創業公司,要做網站和手機App, 到底選擇Java還是PHP,是個很糾結的事情. 作為一個有10多年經驗的工程師,談談個人看法. 開門見山,先說結論.一 結論PHP,Java各有優劣,不要把問題想的太重大瞭,不妨舉重若輕,任選一個都好.主要看團隊成員熟悉哪個語言,哪個語言能快速出產品,並快速迭代更新.二 詳細比較PHP的優點簡單, 開發效率高,是Java兩倍以上,能快速出產品,並快速迭代更新.優化簡單,多數企業很容易獲取較好的性能PHP的缺點由於PHP-FPM IO 阻塞的特點,一個進程同時隻能處理一個請求,像京東,小米這樣的搶購情況下,大並發處理能力較差.現在大學生學php的人少,不好招人.Java的優點由於Tomcat非阻塞的特點,一個線程可同時處理多個請求,大並發性能較好大學生學Java的人多,好招人.Java的缺點配置復雜,開發效率較PHP低很占內存,性能優化復雜,如果優化不好,性能反而不及PHP三 高並發網站的架構設計其實許多初創公司的訪問量,遠遠沒有達到PHP或是JAVA撐不住的地步.這裡假設公司面臨像小米或是12306這樣的大並發訪問.大並發情況下,IO阻塞與非阻塞,性能差距是很大的. 查看一下Nginx, tomcat, php-fpm 的源碼,我們發現,Nginx, tomcat使用的是非阻塞多路復用機制(對於linux, 底層就是epoll),一個線程可同時處理多個請求,而php-fpm是阻塞機制,一個進程同時隻能處理一個請求. (php-fpm 有個配置可以使用epoll,隻適用於master管理進程,對應worker進程還是阻塞的) 處理大並發的能力排名nginx第一,tomcat第二,php-fpm第三.對於像12306這樣的大並發情況,無論tomcat還是php-fpm都是瓶頸. 隻有在nginx上做文章. 順便說下對於底層的IO多路復用,FreeBSD 的kqueue 性能要優於Linux 的epoll.以Nginx為中心的大並發架構首先,Nginx負載均衡是必需的.這裡主要講單臺服務器的架構優化設計.我們想,如果java和php 成為瓶頸,能繞過這個瓶頸就好. 回答是肯定的. 我們可以通過nginx插件直接訪問redis緩存,或是rabbitmq消息隊列裡,這就是OpenResty項目提供的功能 OpenResty 是一款基於 NGINX 和 LuaJIT 的 Web 平臺, 可以使用簡單的Lua語言訪問後端redis, rabbitmq,mysql 等服務,充分利用Nginx的非阻塞大並發處理能力. 通過OpenResty,可直接在redis讀取緩存,而訂單這樣的操作,可以寫到rabbitmq消息隊列裡. 這樣大並發都有nginx來處理,php 或是java 隻是作為工具在後端更新下緩存和處理消息隊列,這樣java和php 成為不再成為瓶頸,這也是開篇時,我說選擇php 或是java不重要的原因.如果我們使用JWT認證用戶,這個用戶檢查的工作也可由nginx來處理.隨著公司規模的擴大,對於消息推送,需要同時大量TCP長連接的情況,這時候golang語言開始登場.總結對應創業公司,初期消息推送可用第三方服務,而對於以Nginx為中心的大並發架構方案對應很多初創公司也還用不到,真需要時,用戶規模已經很大瞭. 所以說選擇Java和PHP 真的不是很關鍵的問題,關鍵的問題是團隊熟悉哪個語言.
本文出自快速备案,转载时请注明出处及相应链接。