基本概念
1、網站吞吐量:TPS/每秒的事務數,QPS/每秒的查詢數,HPS/每秒的HTTP請求數
2、服務器性能指標:系統負載,內存使用,CPU使用,磁盤使用以及網絡I/O等
前端優化方法
1、減少HTTP請求:通過將多個前端資源合并成一個實現減少HTTP請求提高性能。
2、設置響應頭字段是部分及時性要求不高的靜態資源在緩存在前端瀏覽器中。
3、啟用傳輸壓縮。例如gzip。
4、合理的布局前端代碼結構,css,html,js代碼的順尋由上至下。
5、對于一些可公開訪問的資源,可以通過設置其他的域名的方式減少傳輸過程中的cookie。
6、使用CDN分發,將靜態資源部署在各大網絡運營商的機房中,這樣子用戶就可以非常快的就近獲得資源。
7、使用反向代理將熱門內容,靜態資源或者一些可被緩存的計算結果緩存在代理服務器中。通過配置代理服務器可以實現代理服務器直接轉發被緩存的資源。
后端優化方法
1、使應用服務器實現無狀態,將會話信息存儲在緩存服務器集群中,這樣每臺應用服務器之間就可以被相同的對待。就可以通過增加服務器數量的方法水平擴展整個系統的吞吐量。
2、選擇合理的緩存策略,只緩存對于業務而言及時性要求不高,且訪問量大的數據,選取合適的緩存命中算法,減少增加服務器或者服務器宕機對于應用的影響。
3、緩存防御策略,將可預見的但是并不存在的數據緩存下來,防止惡意攻擊連續對緩存發起該資源的請求導致最終請求壓在數據庫上面。
4、使用消息隊列實現網站的異步處理。對于某些接口調用需要花費很長的時間,可以通過一個消息隊列來實現生產者消費者模式,每一個模塊既可以是消費者也可以是生產者。但是消息隊列也有一定的確定,需要增加額外的機制來保證事務性,例如通過一張表來記錄消息的消費記錄和消費結果來實現事務最終的一致。
5、對各種資源費復用來減少創建資源時的時間和性能開銷,例如使用數據庫連接池和線程池。
6、提高代碼邏輯和代碼中數據的數據結構的合理性以及優化算法提高應用程序的處理時間。
7、硬件上采用更加優秀(快)的硬件。
總結
上面寫的哪些優化方法對于一個中大型的網站而言,算是一個非常普遍的解決方案了,但是落實到不同的業務,會有自己的實現方式,這里的實現方式指的是不同的方案組合和對應的技術實現方式。舉個形象點的例子,有些網站不需要前端再加一個CDN,有些網站不需要加緩存服務器集群,有些業務使用JMQ實現消息隊列,有些使用redis緩存消息實現消息隊列,對于事務性的保證,也不一定通過數據庫鎖或者線程同步來實現,也可以通過增加額外的存儲結構來記錄鎖,鎖只是一種概念,我們可以選擇編程語言自帶的方式也可以用數據結構去描述一把鎖。