日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
聊聊高并發(fā)之隔離術(shù)

隔離是指將系統(tǒng)或資源分割開,系統(tǒng)隔離是為了在系統(tǒng)發(fā)生故障時(shí)能限定傳播范圍和影響范圍,即發(fā)生故障后不會(huì)出現(xiàn)滾雪球效應(yīng),從而保證只有出問(wèn)題的服務(wù)不可用,其他服務(wù)還是可用的;而資源隔離有臟數(shù)據(jù)隔離、通過(guò)隔離后減少資源競(jìng)爭(zhēng)提升性能等。我遇到的比較多的隔離手段有線程隔離、進(jìn)程隔離、集群隔離、機(jī)房隔離、讀寫隔離、動(dòng)靜隔離、爬蟲隔離等。而出現(xiàn)系統(tǒng)問(wèn)題時(shí)可以考慮負(fù)載均衡路由、自動(dòng)/手動(dòng)切換分組或者降級(jí)等手段來(lái)提升可用性。

在安陸等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),全網(wǎng)營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,安陸網(wǎng)站建設(shè)費(fèi)用合理。

線程隔離

線程隔離主要有線程池隔離,在實(shí)際使用時(shí)我們會(huì)把請(qǐng)求分類,然后交給不同的線程池處理,當(dāng)一種業(yè)務(wù)的請(qǐng)求處理發(fā)生問(wèn)題時(shí),不會(huì)將故障擴(kuò)散到其他線程池,從而保證其他服務(wù)可用。

我們會(huì)根據(jù)服務(wù)等級(jí)劃分兩個(gè)線程池,以下是池的抽象:

 
 
  1.  
  2.      
  3.      
  4.      
  5.      
  6.  
  7.  
  8.      
  9.      
  10.      
  11.      
  12.  

進(jìn)程隔離

在公司發(fā)展初期,一般是先進(jìn)行從0到1,不會(huì)一上來(lái)就進(jìn)行系統(tǒng)的拆分,這樣就會(huì)開發(fā)出一些比較大而全的系統(tǒng),系統(tǒng)中的一個(gè)模塊/功能出現(xiàn)問(wèn)題,整個(gè)系統(tǒng)就不可用了。首先想到的解決方案是通過(guò)部署多個(gè)實(shí)例,然后通過(guò)負(fù)載均衡進(jìn)行路由轉(zhuǎn)發(fā),但是這種情況無(wú)法避免某個(gè)模塊因BUG而出現(xiàn)如OOM導(dǎo)致整個(gè)系統(tǒng)不可用的風(fēng)險(xiǎn)。因此此種方案只是一個(gè)過(guò)渡,較好的解決方案是通過(guò)將系統(tǒng)拆分為多個(gè)子系統(tǒng)來(lái)實(shí)現(xiàn)物理隔離。通過(guò)進(jìn)程隔離使得某一個(gè)子系統(tǒng)出現(xiàn)問(wèn)題不會(huì)影響到其他子系統(tǒng)。

集群隔離

隨著系統(tǒng)的發(fā)展,單實(shí)例服務(wù)無(wú)法滿足需求了,此時(shí)需要服務(wù)化技術(shù),通過(guò)部署多個(gè)服務(wù),形成服務(wù)集群來(lái)提升系統(tǒng)容量,如下圖所示

隨著調(diào)用方的增多,當(dāng)秒殺服務(wù)被刷會(huì)影響到其他服務(wù)的穩(wěn)定性,此時(shí)應(yīng)該考慮為秒殺提供單獨(dú)的服務(wù)集群,即為服務(wù)分組,從而當(dāng)某一個(gè)分組出現(xiàn)問(wèn)題不會(huì)影響到其他分組,從而實(shí)現(xiàn)了故障隔離,如下圖所示

比如注冊(cè)生產(chǎn)者時(shí)提供分組名:

 
 
  1.  

消費(fèi)時(shí)使用相關(guān)的分組名即可:

 
 
  1.  

機(jī)房隔離

隨著對(duì)系統(tǒng)可用性的要求,會(huì)進(jìn)行多機(jī)房部署,每個(gè)機(jī)房的服務(wù)都有自己的服務(wù)分組,本機(jī)房的服務(wù)應(yīng)該只調(diào)用本機(jī)房服務(wù),不進(jìn)行跨機(jī)房調(diào)用;其中一個(gè)機(jī)房服務(wù)發(fā)生問(wèn)題時(shí)可以通過(guò)DNS/負(fù)載均衡將請(qǐng)求全部切到另一個(gè)機(jī)房;或者考慮服務(wù)能自動(dòng)重試其他機(jī)房的服務(wù)從而提升系統(tǒng)可用性。

一種辦法是根據(jù)IP(不同機(jī)房IP段不一樣)自動(dòng)分組,還一種較靈活的辦法是通過(guò)在分組名中加上機(jī)房名解決:

 
 
  1.  
  2.  

讀寫隔離

如下圖所示,通過(guò)主從模式將讀和寫集群分離,讀服務(wù)只從從Redis集群獲取數(shù)據(jù),當(dāng)主Redis集群出現(xiàn)問(wèn)題時(shí),從Redis集群還是可用的,從而不影響用戶訪問(wèn);而當(dāng)從Redis集群出現(xiàn)問(wèn)題時(shí)可以進(jìn)行其他集群的重試。

--先讀取從

 
 
  1. status, resp = slave_get(key) 
  2. if status == STATUS_OK then 
  3.     return status, value 
  4. end 

如果從獲取失敗了,從主獲取

 
 
  1. status, resp = master_get(key) 

動(dòng)靜隔離

當(dāng)用戶訪問(wèn)如結(jié)算頁(yè)時(shí),如果JS/CSS等靜態(tài)資源也在結(jié)算頁(yè)系統(tǒng)中時(shí),很可能因?yàn)樵L問(wèn)量太大導(dǎo)致帶寬被打滿導(dǎo)致出現(xiàn)不可用。

因此應(yīng)該將動(dòng)態(tài)內(nèi)容和靜態(tài)資源分離,一般應(yīng)該將靜態(tài)資源放在CDN上,如下圖所示

爬蟲隔離

在實(shí)際業(yè)務(wù)中我們?cè)?jīng)統(tǒng)計(jì)過(guò)一些頁(yè)面型應(yīng)用的爬蟲比例,爬蟲和正常流量的比例能達(dá)到5:1,甚至更高。而一些系統(tǒng)是因?yàn)榕老x訪問(wèn)量太大而導(dǎo)致服務(wù)不可用;一種解決辦法是通過(guò)限流解決;還一種解決辦法是在負(fù)載均衡層面將爬蟲路由到單獨(dú)集群,從而保證正常流量可用,爬蟲流量盡量可用。

比如最簡(jiǎn)單的使用Nginx可以這樣配置:

 
 
  1. set $flag 0;  
  2. if ($http_user_agent ~* "spider") {  
  3.     set $flag "1";  
  4. }  
  5. if($flag = "0") { 
  6.     //代理到正常集群 
  7. if ($flag = "1") {  
  8.     //代理到爬蟲集群 

實(shí)際場(chǎng)景我們使用了Openresty,不僅僅對(duì)爬蟲user-agent過(guò)濾,還會(huì)過(guò)濾一些惡意IP(統(tǒng)計(jì)IP訪問(wèn)量,配置閥值),將他們分流到固定分組。還有一種辦法是種植Cookie,訪問(wèn)特殊服務(wù)前先種植Cookie,訪問(wèn)服務(wù)時(shí)驗(yàn)證該Cookie,如果沒(méi)有或者不對(duì)可以考慮出驗(yàn)證碼或者分流到固定分組。

熱點(diǎn)隔離

秒殺、搶購(gòu)屬于非常合適的熱點(diǎn)例子;對(duì)于這種熱點(diǎn)是能提前知道的,所以可以將秒殺和搶購(gòu)做成獨(dú)立系統(tǒng)或服務(wù)進(jìn)行隔離,從而保證秒殺/搶購(gòu)流程出現(xiàn)問(wèn)題不影響主流程。

還存在一些熱點(diǎn)可能是因?yàn)閮r(jià)格或突發(fā)事件引起的;對(duì)于讀熱點(diǎn)我使用多級(jí)緩存搞定;而寫熱點(diǎn)我們一般通過(guò)緩存+隊(duì)列模式削峰,可以參考《前端交易型系統(tǒng)設(shè)計(jì)原則》。

資源隔離

最常見的資源如磁盤、CPU、網(wǎng)絡(luò);對(duì)于寶貴的資源都會(huì)存在競(jìng)爭(zhēng)問(wèn)題。

在《構(gòu)建需求響應(yīng)式億級(jí)商品詳情頁(yè)》中我們使用JIMDB數(shù)據(jù)同步時(shí)要dump數(shù)據(jù),SSD盤容量用了50%以上,dump到同一塊磁盤時(shí)遇到了容量不足的問(wèn)題,我們通過(guò)單獨(dú)掛一塊SAS盤來(lái)專門同步數(shù)據(jù)。還有如使用Docker容器時(shí),有的容器寫磁盤非常頻繁,因此要考慮為不同的容器掛載不同的磁盤。

默認(rèn)CPU的調(diào)度策略在一些追求***性能的場(chǎng)景下可能并不太適合,我們希望通過(guò)綁定CPU到特定進(jìn)程來(lái)提升性能。如我們一臺(tái)機(jī)器會(huì)啟動(dòng)很多個(gè)Redis實(shí)例,通過(guò)將CPU通過(guò)taskset綁定到Redis實(shí)例上可以提升一些性能;還有Nginx提供了worker_processes和worker_cpu_affinity來(lái)綁定CPU。還有如系統(tǒng)網(wǎng)絡(luò)應(yīng)用比較繁忙的話,可以考慮綁定網(wǎng)卡IRQ到指定的CPU來(lái)提升系統(tǒng)處理中斷的能力,從而提升性能。

還有如大數(shù)據(jù)計(jì)算集群、數(shù)據(jù)庫(kù)集群應(yīng)該和應(yīng)用集群隔離到不同的機(jī)架,并盡量隔離網(wǎng)絡(luò);因?yàn)榇髷?shù)據(jù)計(jì)算或數(shù)據(jù)庫(kù)同步時(shí)時(shí)會(huì)有比較大的網(wǎng)絡(luò)帶寬,可能擁塞網(wǎng)絡(luò)導(dǎo)致應(yīng)用響應(yīng)慢。

還有一些其他類似的隔離術(shù),如環(huán)境隔離(測(cè)試環(huán)境、預(yù)發(fā)布環(huán)境/灰度環(huán)境、正式環(huán)境)、壓測(cè)隔離(真實(shí)數(shù)據(jù)、壓測(cè)數(shù)據(jù)隔離)、ABTest(為不同的用戶提供不同版本的服務(wù))、緩存隔離(有些系統(tǒng)混用緩存,而有些系統(tǒng)會(huì)扔大字節(jié)值到如Redis,造成Redis慢查詢)、查詢隔離(簡(jiǎn)單、批量、復(fù)雜條件查詢分別路由到不同的集群)等。通過(guò)隔離后可以將風(fēng)險(xiǎn)降低到***、性能提升至***。

【本文是專欄作者張開濤的原創(chuàng)文章,作者微信公眾號(hào):開濤的博客( kaitao-1234567)】


網(wǎng)站名稱:聊聊高并發(fā)之隔離術(shù)
鏈接URL:http://m.5511xx.com/article/dhogioc.html