1。應用場景
2。網際網路系統的應用架構基礎分析
防火牆:防止網路上的病毒攻擊和其他攻擊。
負載均衡器:
具體作用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設計也困難。
高併發系統的設計的第三步: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協議,這個需要專門學習。。。
動靜分離技術
背景:因為網際網路大部分資料都是靜態資料,只有少數是動態資料
靜態資料:圖片,css樣式,js指令碼,影片等,尤其是圖片和影片流量很大。如果都從動態伺服器(如tomcat,weblogic)伺服器的網路壓力很大。這個時候可以用動靜分離技術。
※ 靜態資料的加速技術:CDN,Nginx
※ 動態資料的加速技術:分層架構,伺服器架構,DB/快取架構
CDN(即content delivery network,內容分發網路)。
CDN允許企業將靜態資料快取到網路CDN的節點中,在使用者訪問網站時,利用全域性負載技術將使用者的訪問指向距離最近的工作正常的快取伺服器上,由快取伺服器直接響應使用者請求。
※ CDN是構建在網路之上的內容分發網路,依靠部署在各地的邊緣伺服器,透過中心平臺的負載均衡、內容分發、排程等功能模組,使使用者就近獲取所需內容,降低網路擁塞,提高使用者訪問響應速度和命中率。CDN的關鍵技術主要有內容儲存和分發技術。
CDN的基本原理是廣泛採用各種快取伺服器,將這些快取伺服器分佈到使用者訪問相對集中的地區或網路中,在使用者訪問網站時,利用全域性負載技術將使用者的訪問指向距離最近的工作正常的快取伺服器上,由快取伺服器直接響應使用者請求。
1。應用場景
2。網際網路系統的應用架構基礎分析
防火牆:防止網路上的病毒攻擊和其他攻擊。
負載均衡器:
具體作用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設計也困難。
高併發系統的設計的第三步: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協議,這個需要專門學習。。。
動靜分離技術
背景:因為網際網路大部分資料都是靜態資料,只有少數是動態資料
靜態資料:圖片,css樣式,js指令碼,影片等,尤其是圖片和影片流量很大。如果都從動態伺服器(如tomcat,weblogic)伺服器的網路壓力很大。這個時候可以用動靜分離技術。
※ 靜態資料的加速技術:CDN,Nginx
※ 動態資料的加速技術:分層架構,伺服器架構,DB/快取架構
CDN(即content delivery network,內容分發網路)。
CDN允許企業將靜態資料快取到網路CDN的節點中,在使用者訪問網站時,利用全域性負載技術將使用者的訪問指向距離最近的工作正常的快取伺服器上,由快取伺服器直接響應使用者請求。
※ CDN是構建在網路之上的內容分發網路,依靠部署在各地的邊緣伺服器,透過中心平臺的負載均衡、內容分發、排程等功能模組,使使用者就近獲取所需內容,降低網路擁塞,提高使用者訪問響應速度和命中率。CDN的關鍵技術主要有內容儲存和分發技術。
CDN的基本原理是廣泛採用各種快取伺服器,將這些快取伺服器分佈到使用者訪問相對集中的地區或網路中,在使用者訪問網站時,利用全域性負載技術將使用者的訪問指向距離最近的工作正常的快取伺服器上,由快取伺服器直接響應使用者請求。