海量資料和高併發的解決方案

2021-10-14 10:21:29 字數 2728 閱讀 7441

快取

a) 程式主要使用map,尤其是concurrenthashmap

b) 常用的快取框架有ehcache, memcache和redis

頁面靜態化

a) 頁面靜態化是將程式最後生成的頁面儲存起來

b) 常用freemarker和velocity根據模板生成靜態頁面

c) 另外也可以使用快取伺服器在應用伺服器的上一層快取生成的頁面,如可以使用squid,另外nginx也提供了相應的功能

資料庫優化

表結構優化

sql語句優化

a) 首先將涉及大資料的業務的sql語句執行時間詳細記錄下來

b) 其次通過仔細分析日誌找出需要優化的語句和其中的問題(注意不同條件下的執行時間)

c) 再有的放矢的優化

分割槽a) 將一張表中的資料按照一定的規則分到不同的區來儲存

分表a) 例如第乙個表儲存正常資訊,第二個表儲存刪除後的資訊,第三個表儲存修改之前的資訊

b) 另一種分表的方法是將乙個表中不同型別的字段分到不同的表中儲存

索引優化

a) 索引按預先制定欄位的順序排列後儲存到乙個類似表的結構中,這樣在查詢索引欄位為條件的記錄時就可以很快地從索引中找到對應記錄的指標並從表中獲取到記錄

使用儲存過程代替直接操作

a) 儲存過程只需要編譯一次,而且可以在乙個儲存過程裡面進行一些複雜操作

讀寫分離

本質是對資料庫進行集群,這樣就可以在高併發下將資料庫的操作分配到多個資料庫伺服器去處理。由於每台伺服器所儲存的資料都需要一致,所以資料同步成了資料庫集群最核心的問題。一般情況是將寫操作交給專門的伺服器處理,這台伺服器叫做主伺服器。當主伺服器運算元據後從底層同步到別的伺服器(從伺服器),讀資料的時候去從伺服器讀取,從伺服器可以有多台,這樣就可以實現讀寫分離,並且將讀請求分配到多個伺服器處理。

簡單的資料同步是採用資料庫的熱備份,但是讀取到的資料可能會存在一定的滯後性

高階的方式需要專門的軟硬體配合

分布式資料庫

將不同的表放到不同的資料庫中然後再放到不同的伺服器。這樣在處理請求時,如果需要呼叫多個表,則可以讓多個伺服器同時處理,從而提高處理速度。

nosql和hadoop

nosql的核心是非結構化,通過多個塊儲存資料的特點,其操作大資料的速度也非常快。

hadoop是專門針對大資料處理的一套框架,其對資料的儲存和處理都提供了相應的解決方案。hadoop是將同乙個表中的資料分成多個塊儲存到多個節點(分布式),而且每一塊資料都有多個節點儲存(集群),這裡集群除了可以並行處理相同的資料,還可以保證資料的穩定性,在其中乙個節點出現問題後資料不會丟失。

下面每個節點都不包含乙個完整的表的資料,但是乙個節點可以儲存多個表的資料

hadoop對資料的處理是先對每一塊的資料找到相應的節點並進行處理,然後再對每乙個處理的結果進行處理,最後生成最終的結果。

頁面快取

a) 將應用生成的頁面快取起來,就不需要每次都重新生成頁面了。如果使用了nginx伺服器就可以使用其自帶的快取功能。

b) 頁面快取的預設失效機制一般是按快取時間處理的

c) 對於頁面大部分不變化,小部分會經常變化的情況。比如文章的內容不大變化,但是後面有頂和踩的功能,這個資料變化就比較高。對於這個問題可以先生成靜態頁面然後使用ajax來讀取並修改相應的資料。

集群與分布式

a) 集群是每台伺服器都具有相同的功能,處理請求時呼叫哪台伺服器都可以,起分流作用。

b) 集群有兩個方式:

i. 靜態資源集群

ii. 應用程式集群。集群在使用時要同步一些快取資料,其中最重要的使用session。session同步有兩種處理方式:

一種在session發生變化後自動同步到其他伺服器。(tomcat預設使用這一種)

另一種是用乙個程式統一管理session。可以使用專門的伺服器安裝memcached等快取程式來統一管理session。然後通過重寫request並覆蓋getsession來獲取指定伺服器中的session.

反向**

反向**指的是客戶端直接訪問的伺服器並不真正提供服務,它從別的伺服器獲取資源然後將結果返回給使用者,如下圖:

反向**伺服器可以和實際處理請求的伺服器在同一臺主機上,而且一台反向**伺服器也可以訪問多型實際處理請求的伺服器。

反向**伺服器有三個作用

可以作為前端伺服器跟實際處理請求的伺服器(如tomcat)整合

可以用做負載均衡

**請求

cdncdn其實是一種特殊的集群頁面快取伺服器。cdn的請求方式比較特殊,是用專門的cdn網域名稱解析伺服器在解析網域名稱的時候就分配好了。

一般的做法是在isp使用cname將網域名稱解析到乙個特定的網域名稱,然後再將解析到的那個網域名稱用專門的cdn伺服器解析到相應的cdn節點。

第二步訪問cdn的dns伺服器是因為cname記錄的目標網域名稱使用ns記錄指向了cdn的dns伺服器。

高併發解決方案

時常看到高併發的問題,但高併發其實是最不需要考慮的東西。為何,他虛無縹緲,很少有 真的需要這些東西,而且其中很多技術,其實你已經在用了。有這個意識就夠了,不需要時刻盯著這個問題。只有很少的 真的能達到高併發。簡單做乙個歸納,從低成本 高效能和高擴張性的角度來說有如下處理方案 1 html靜態化 2 ...

高併發解決方案

將靜態資源分離到靜態站,對靜態資源的請求打到靜態站,增加動態站的請求處理量 頁面靜態化是將程式生成的頁面儲存起來,使用模板技術如freemarker和velocity生成靜態頁面 nginx快取頁面資訊,再次請求時直接從快取中獲取,不需要重新生成,頁面快取記憶體中,提高訪問速度 具有相同處理功能的伺...

高併發解決方案

秒殺場景一般會在電商 舉行一些活動或者節假日在12306 上搶票時遇到。對於電商 中一些稀缺或者 商品,電商 一般會在約定時間點對其進行限量銷售,因為這些商品的特殊性,會吸引大量使用者前來搶購,並且會在約定的時間點同時在秒殺頁面進行搶購。限流 鑑於只有少部分使用者能夠秒殺成功,所以要限制大部分流量,...