備份用。。。高併發業務的應用場景和設計理念

2021-08-28 01:22:03 字數 2691 閱讀 5628

防火牆:防止網路上的病毒攻擊和其他攻擊。

負載均衡器:

具體作用a:對業務需求做初步分析,決定是否分發到web伺服器。(常見的分發軟體有nginx和 apache等反向**伺服器)。他可以通過配置禁止一些無效請求,比如**作弊的ip位址。

b.提供路由演算法, 可以提供實現負載均衡的演算法,根據各個伺服器的負載能力進行合理分發。降低單個伺服器的負載

c.限流,如果請求超過所有伺服器的最大承載能力,就要限流,否則可能引起宕機的連鎖反應。可以提示使用者繁忙,稍後再試,保證系統可用。

高併發系統的設計

真正的系統是為了實現業務而開發的,所以設計時必須先分析實際需求和場景

第一步:區分有效請求和無效請求

有效請求指真實的需求,無效請求是虛假的搶購請求。

無效請求舉例: 通過指令碼連續重新整理**頁面,使用刷票軟體連續請求。

無效請求的應對方法: 1。加入驗證碼。一般首次無驗證碼,後續的第二/n次加入驗證碼,驗證碼種類有,文字,等式計算等。也可以用傾斜的

2,讓使用者手動調整的位置或者角度和標準進行比對。

3。使用簡訊服務,把驗證碼傳送到簡訊平台,然後讓使用者再輸入。

注意,這個應該放在負載均衡器上完成,而不是放在web伺服器上完成。這樣可以攔截大量的無效請求。

4,通過具體的業務邏輯來限制,比如限制使用者在單位時間內的購買量

5,針對一人多賬戶的情況,提高賬戶等級,通過銀行卡驗證,實名制獲取證件號碼,同一證件號碼的認定為乙個使用者。

6,封ip位址,封mac位址,主要是用來反爬蟲,有可能誤傷有效請求。

高併發系統的設計的第二步:系統設計

1。水平分法:按照功能模組進行區分,使得他們相互分離,以降低系統的複雜性。

2。垂直分法:不按照模組劃分,每個子系統的功能相同,只是通過演算法把大量請求合理分配。

3。大型**還可以按照水平和垂直結合的方法。首先將業務區分為多個子系統,在每乙個子系統下面再分多個伺服器,通過子系統的路由器找到對應的子系統伺服器提供服務。

秉持的原則:伺服器的負載均衡,提高伺服器的吞吐能力和效能;業務簡化,便於開發。

水平分法的優缺點:

優點:乙個服務管理乙個業務,提高開發效率。

缺點:因為各個系統業務之間存在關聯,需要通過rpc(遠端過程呼叫協議)來處理關聯資訊。比較流行的rpc框架有dubbo,thrift和hessian。

rpc框架的理念:每乙個服務都會暴露一些公共介面給rpc服務,這樣任何乙個伺服器都能夠通過rpc服務獲取其他伺服器對應的介面去呼叫各個伺服器的邏輯來完成功能。介面的相互呼叫會造成一定程度的緩慢。

垂直分法的缺點:因為每個伺服器都包含所有的業務邏輯功能,會造成開發上的業務困難,對db設計也困難。

關聯鏈結

rpc學習

dubbo框架簡介

複雜點的dubbo詳解

如何實現簡單的rpc服務

rpc服務和http服務對比

高併發系統的設計的第三步:db設計

1。使用分表或者分庫技術

分表:本來一張表可以儲存的資料設計成多張表去儲存,比如交易表,訂單表,資料過多會造成查詢和統計的緩慢,可以按照年份來分為多個表儲存,開發者根據查詢的年份確定去查詢哪個表。

分庫:把錶資料分配在不同的db中。首先需要乙個路由演算法確定資料儲存在哪乙個db中,比如可以把使用者和對應業務的db快取到redis中。這樣路由演算法可以通過redis讀取的資料來確定使用哪個db進行查詢。

2。優化sql,建立索引

sql優化的主要原則就是應盡量避免全表掃瞄,應該考慮在where及order by 涉及的列上建立索引。索引對查詢有利,對修改不利。(增加維護索引的開銷)

技巧1.風格統一。

大小寫不同,查詢分析器就認為是兩句不同的sql語句,必須進行兩次解析。生成2個執行計畫。

技巧2:在更新or複雜查詢語句要時刻記住是表鎖定還是行鎖定

,優先選用主鍵更新,原因是在musql的執行時,非主鍵更新會鎖表,即不僅鎖定更新的資料,而且鎖定表的其他資料,從而影響併發,使用主鍵更新是行鎖定

技巧3:使用連線查詢來代替子查詢(比如用left join 代替 not in)

技巧4,考慮使用「臨時表」暫存中間結果,可以避免程式中多次掃瞄主表

3。讀寫分離技術

部分主機負責寫業務,部分主機負責讀業務。

對於分布式db來說,還有乙個很複雜,事務的一致性,目前流行的有2段提交協議,即xa協議,paxos協議,這個需要專門學習。。。

xa協議

paxos協議

※ 動態資料的加速技術:分層架構,伺服器架構,db/快取架構

cdn(即content delivery network,內容分發網路)。

cdn允許企業將靜態資料快取到網路cdn的節點中,在使用者訪問**時,利用全域性負載技術將使用者的訪問指向距離最近的工作正常的快取伺服器上,由快取伺服器直接響應使用者請求。

※ cdn是構建在網路之上的內容分發網路,依靠部署在各地的邊緣伺服器,通過中心平台的負載均衡、內容分發、排程等功能模組,使使用者就近獲取所需內容,降低網路擁塞,提高使用者訪問響應速度和命中率。cdn的關鍵技術主要有內容儲存和分發技術。

cdn的基本原理是廣泛採用各種快取伺服器,將這些快取伺服器分布到使用者訪問相對集中的地區或網路中,在使用者訪問**時,利用全域性負載技術將使用者的訪問指向距離最近的工作正常的快取伺服器上,由快取伺服器直接響應使用者請求。

高併發系統中佇列術的哪些應用場景

佇列在資料結構中是一種線性表,從一端插入資料,然後從另一端刪除資料。本文目的不是講解各種佇列演算法,而是在應用層面講述使用佇列能解決哪些場景問題。在我開發過的系統中,不是所有的業務都必須實時處理 不是所有的請求都必須實時反饋結果給使用者 不是所有的請求 處理都必須100 處理成功 不知道誰依賴 我 ...

樂觀鎖與悲觀鎖的應用場景 處理高併發資料

為什麼需要鎖 併發控制 在多使用者環境中,在同一時間可能會有多個使用者更新相同的記錄,這會產生衝突。這就是著名的併發性問題。典型的衝突有 l 丟失更新 乙個事務的更新覆蓋了其它事務的更新結果,就是所謂的更新丟失。例如 使用者a把值從6改為2,使用者b把值從2改為6,則使用者a丟失了他的更新。l 髒讀...

高併發業務場景下常見的解決方案

由於系統都是連線資料庫的,但是一般最多資料庫每秒只能支撐幾千的並非,如果業務量激增,會導致系統宕機 因此需要從一下幾點入手設計 系統拆分 快取 mq 分庫分表 讀寫分離 搜尋 將乙個系統進行功能拆分,如現在流行的微服務,每個服務連線的資料庫分開,分開部署。這樣可以將壓力進行拆分,緩解因為網路和資料庫...