高性能php應用開發
1. PHP開發中如何提高系統的穩定性和可靠性
PHP 應用的高性優化,很多時候我們把業務代碼做一些優化,反而是簡單又高效的。
業務的非同步解耦,比如,我們把耗時的多個分表數據的排行榜,通過其他服務做分布統計,然後再綜合,最終輸出到redis list中,那我們前端 PHP 在調用數據的時候,就不用實時計算了。
緩存的多級處理,業務復雜以後,經常看到一份相同的數據讀取 N 次,盡管是有緩存伺服器,但是讀取的時候也會有網路 I/O 的開銷,考慮到我們 PHP 一般使用場景下都是單進程,使用頻率高的,則應該優先使用進程內緩存。然後再本地緩存,然後再到網路緩存。
單例的運用,不要小看了對象的構造,很多時候我們在同一進程中,會發現同時構造了 N 多相同的對象。每一次的初始化都是一塊內存的開辟和 CPU 的消耗。
高性能,一個就是運行環境的優化,另一個是代碼本身的優化。
運行環境的優化,覆蓋面也很廣,包括系統層面的內核,文件系統類型,資料庫及緩存服務本身的性能優化,再到PHP解釋器的性能優化等等,PHP不同運行方式的差異(比如Apache模塊,還有PHP-FPM等等)。
代碼優化方面,我覺得可維護性和代碼可讀性的重要性大於高性能。代碼優化可以藉助profiling工具來分析,找到真實訪問條件下,處理瓶頸在哪裡,再去做針對性的優化。當然自己在初次設計和實現的時候,就需要做一定的整體考慮,例如怎麼設計能夠減少資料庫的查詢次數,如何減少重復的操作,了解同一問題的多種解決辦法哪一種效率更高(包括演算法上的差異,以及PHP的不同方式導致的差異等等),如何設計緩存來提高緩存命中率等等。有一些設計需要在體驗和效率上做個權衡。
保證穩定性,同樣也分運行環境和代碼本身。前者要對線上服務做完整的監控,這個有很多完善和強大的開源工具可以使用,保障基礎環境是穩定可控的,並且能夠及時發現問題,進行修復。至於代碼,除了盡量做完整的測試,開發的時候就需要考慮可能的問題。另外針對PHP,開發環境可以把error_reporting完全打開。還有需要知道常見的安全問題(XSS,SQL注入,CSRF,越權等),畢竟安全問題也是穩定的一部分。