1.使用快取:
使用方式:1,使用程式直接儲存到記憶體中。主要使用map,尤其concurrenthashmap。
2,使用快取框架。常用的框架:ehcache,memcache,redis等。
最關鍵的問題是:什麼時候建立快取,以及其失效機制。
對於空資料的緩衝:最好用乙個特定的型別值來儲存,以區別空資料和未快取的兩種狀態。
2.資料庫優化:
1,表結構優化。
2,sql語句優化,語法優化和處理邏輯優化。可記錄各語句執行時間,有針對性的分析。
3,分割槽
4,分表
5,索引優化
6,使用儲存過程代替直接操作
3.分離活躍資料
例如使用者,可以分為活躍使用者和不活躍使用者。
4.批量讀取和延遲修改
高併發情況可以將多個查詢請求合併到乙個。
高併發且頻繁修改的可以暫存快取中。
5.讀寫分離
上圖,資料庫伺服器配置多個,配置主從資料庫。寫用主資料庫,讀用從資料庫。
6.分布式資料庫
將不同的表存放到不同的資料庫中,然後再放到不同的伺服器中。有些複雜問題,如:事務處理,多表查詢。
7.nosql和hadoop
nosql,not only sql。沒有關係型資料庫那麼多限制,比較靈活高效。
hadoop,將乙個表中的資料分層多塊,儲存到多個節點(分布式)。每一塊資料都有多個節點儲存(集群)。集群可以並行處理相同的資料,還可以保證資料的完整性。
1.4高併發的解決方案。
1.應用和靜態資源分離。
將靜態資源(js,css,等)放到專門的伺服器中。
2.頁面快取
將應用生成的頁面快取起來可以節省大量cpu資源。
對於部分頁面經常變換資料的,可以使用ajax來處理。
3.集群和分布式
集群,多台伺服器具有相同的功能,主要起分流的作用。
分布式,將不同的業務放到不同的伺服器中,處理乙個請求可能需要多台伺服器,進而提高乙個請求的處理速度。
又分為靜態資源集群和應用程式集群。後者較複雜,經常要考慮session同步等問題。
4.反向**
客戶端直接訪問的伺服器並不是直接提供服務的伺服器,它從別的伺服器獲取資源,然後將結果返回給使用者。
**伺服器和反向**伺服器:
**伺服器是代我們訪獲取資源,然後將結果返回。例如,訪問外網的**伺服器。反向**伺服器是我們正常訪問一台伺服器的時候,伺服器自己呼叫了別的伺服器。
**伺服器我們主動使用,是為我們服務的,不需要有自己的網域名稱;反向**是伺服器自己使用的,我們並不知道,有自己的網域名稱。
5,cdn
cdn是一種特殊的集群頁面緩衝伺服器,和普通的集群的多台頁面緩衝伺服器相比主要區別是:其存放位置和分配請求方式不同。
cdn的伺服器分布在全國各地,接收到請求後會將請求分配到最合適的cdn伺服器節點來獲取資料。其每乙個cdn節點就是乙個頁面快取伺服器。
分配方式:並不是普通的負載均衡,而是專門的cdn網域名稱解析伺服器在解析網域名稱的時候就分配好的,一般的做飯是:isp那裡使用cname將網域名稱解析到乙個特定的網域名稱,然後再將解析到的那個網域名稱用專門的cdn伺服器解析(返回給瀏覽器,再訪問)到相應的cdn節點。每個節點可能也集群了多台伺服器。
小結:**架構的整個演變主要圍繞大資料和高併發而展開。解決的方案主要是使用快取和多資源兩種型別。多資源:多儲存,多cpu,多網路。可以單個資源處理乙個請求,也可以多個。
使用複雜框架之前一定要將專案的業務優化好,基礎中的基礎,重中之重!
架構和協議並不是神聖不可侵犯的東西。
大資料和高併發的解決方案彙總
1.使用快取 使用方式 1,使用程式直接儲存到記憶體中。主要使用map,尤其concurrenthashmap。2,使用快取框架。常用的框架 ehcache,memcache,redis等。最關鍵的問題是 什麼時候建立快取,以及其失效機制。對於空資料的緩衝 最好用乙個特定的型別值來儲存,以區別空資料...
大資料和高併發的解決方案總結
軟體剛開始的時候是為了實現功能,隨著資訊量和使用者的增多,大資料 和高併發成了軟體設計必須考慮的問題,那麼大資料和高併發本質是什麼呢?本質很簡單,乙個是慢,乙個是等。兩者是相互關聯的,因為慢,所以要等,因為等,所以慢,解決了慢,也就解決了等,解決了等,也就解決了慢。關鍵是如何解決慢和等,核心乙個是短...
大資料和高併發的解決方案總結
現在,軟體架構變得越來越複雜了,好多技術層出不窮,令人眼花繚亂,解決這個問題呢,就是要把複雜問題簡單化,核心就是要把握本質。軟體剛開始的時候是為了實現功能,隨著資訊量和使用者的增多,大資料和高併發成了軟體設計必須考慮的問題,那麼大資料和高併發本質是什麼呢?本質很簡單,乙個是慢,乙個是等。兩者是相互關...