真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

面對峰值響應(yīng)沖擊,解決高并發(fā)的三大策略

當(dāng)前在互聯(lián)網(wǎng)+的大潮下,眾所周知淘寶、京東這些交易系統(tǒng)每天產(chǎn)生的數(shù)據(jù)量都是海量的,每天的交易并發(fā)也是驚人的,尤其是“雙11”、“6.18”這些活動,對系統(tǒng)的峰值響應(yīng)提出了非常高的要求,所以對系統(tǒng)架構(gòu)也就有了很要的要求。

成都創(chuàng)新互聯(lián)公司從2013年成立,先為新河等服務(wù)建站,新河等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為新河企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

在寫這篇博客的前2天,聽說某系統(tǒng)在25人的用戶量下就宕機了,實在讓人震驚,所以捋了下互聯(lián)網(wǎng)交易系統(tǒng)我們可以采取哪些技術(shù)來解決互聯(lián)網(wǎng)平臺下大數(shù)據(jù)量高并發(fā)的問題。

首先根據(jù)架構(gòu)分層把不同技術(shù)進行了一些分類,如下圖:

面對峰值響應(yīng)沖擊,解決高并發(fā)的三大策略

 

互聯(lián)網(wǎng)技術(shù)架構(gòu)分層策略圖

接下來我會逐一解釋各個技術(shù)的大概原理和思路,供大家參考和學(xué)習(xí):

一、互聯(lián)網(wǎng)層

1、負(fù)載均衡

負(fù)載均衡英文名稱為Load Balance,意思就是分?jǐn)偟蕉鄠€操作單元上進行執(zhí)行,例如Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。

比如Nginx是一款可以通過反向代理實現(xiàn)負(fù)載均衡的服務(wù)器,把流量導(dǎo)向不同的服務(wù)器;現(xiàn)在的云平臺都提供了負(fù)載均衡服務(wù),不過需要單獨付費,比如阿里的SLB。

2、內(nèi)容分發(fā)網(wǎng)絡(luò)(cdn)

內(nèi)容分發(fā)網(wǎng)絡(luò)基本思路是盡可能避開互聯(lián)網(wǎng)上有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié),使內(nèi)容傳輸?shù)母?、更穩(wěn)定。

通過在網(wǎng)絡(luò)各處放置節(jié)點服務(wù)器所構(gòu)成的在現(xiàn)有的互聯(lián)網(wǎng)基礎(chǔ)之上的一層智能虛擬網(wǎng)絡(luò),CDN系統(tǒng)能夠?qū)崟r地根據(jù)網(wǎng)絡(luò)流量和各節(jié)點的連接、負(fù)載狀況以及到用戶的距離和響應(yīng)時間等綜合信息將用戶的請求重新導(dǎo)向離用戶最近的服務(wù)節(jié)點上。

其目的,是使用戶可就近取得所需內(nèi)容,解決Internet網(wǎng)絡(luò)擁擠的狀況,提高用戶訪問網(wǎng)站的響應(yīng)速度。這個不需要單獨去實現(xiàn),可以用現(xiàn)成的產(chǎn)品去做,比如: Akamai(好些,比較貴),Verizon EdgeCast(便宜些),ChinaCach;如果是云平臺基本上都提供了這個服務(wù),不過也需要付費的,比如阿里云基于自己的CDN加速提供了不同形式的加速;比如基于P2P技術(shù)的PCDN,增強防護DDoS、CC、Web應(yīng)用攻擊的SCDN以及全站加速。

二、Web服務(wù)器層

1、Session→Cookie

傳統(tǒng)的B/S架構(gòu)都是把用戶會話放到Session里面,在在線用戶量不高的情況下沒啥問題,但是對于現(xiàn)在互聯(lián)網(wǎng)采取了分布式或者微服務(wù)架構(gòu),就很難單獨去維護Session了,因為Session會分布在不同的服務(wù)器上,會話的同步會面臨著很大的問題。所以一種方式是把Session的維護拿到Cookie里去做,不依賴于某臺或多臺服務(wù)器,同時也減少了服務(wù)器的開銷。當(dāng)然,也可以利用內(nèi)存緩存服務(wù)器來統(tǒng)一存儲Session信息,有的內(nèi)存緩存服務(wù)器還能把內(nèi)存數(shù)據(jù)持久化到磁盤來提高可用性和可恢復(fù)性,就不會有同步問題了。

2、Static page

動態(tài)頁面靜態(tài)化,為什么又要把動態(tài)網(wǎng)頁以靜態(tài)網(wǎng)頁的形式發(fā)布呢?一個很重要的原因就是搜索引擎;另一個重要原因就是提高程序性能。

很多大型網(wǎng)站,進去的時候看它頁面很復(fù)雜,但是加載也沒有耗費多長時間,原因在于先于用戶獲取資源或數(shù)據(jù)庫數(shù)據(jù),進而通過靜態(tài)化處理,生成靜態(tài)頁面。所有人都訪問這一個靜態(tài)頁面,而靜態(tài)化處理的頁面本身的訪問速度要較動態(tài)頁面快很多倍,因此程序性能會有大大的提升。使用場景是那些經(jīng)常需要訪問但是數(shù)據(jù)不經(jīng)常更新的時候。這種情況就是時候?qū)討B(tài)頁面靜態(tài)化了,比如淘寶的寶貝信息頁面,頁面動態(tài)部分可以用AJAX加載進來,比如月銷多少筆。

3、Cache

緩存,Web服務(wù)層的緩存依賴于下面三個方面:

  • 瀏覽器端的緩存,比如CSS/JS等;

  • 在CDN這類技術(shù)當(dāng)中做大量頁面緩存來提高就近訪問速度;

  • 自己搭建內(nèi)存緩存服務(wù)器對頻率訪問比較高的頁面進行緩存,比如首頁等。

4、Gzip

利用瀏覽器能自動進行Gzip解壓縮的原理對訪問頁面和資源(含圖片、JavaScript、CSS等)進行Gzip壓縮,減少文件大小,以此來提高網(wǎng)絡(luò)加載速度。

5、One file

原理是把多個需要加載的內(nèi)容合成一個文件,減少加載次數(shù)和網(wǎng)絡(luò)連接時間,提高訪問效率,比如把小圖標(biāo)集合合成一個大圖片,把CSS/JavaScript 合成到一個文件里面。

6、Cluster

集群和傳統(tǒng)的高性能計算機技術(shù)相比,計算機集群通過一組松散集成的計算機軟件和/或硬件連接起來高度緊密地協(xié)作完成計算工作。在某種意義上,它們可以被看作是一臺計算機。

集群系統(tǒng)中的單個計算機通常稱為節(jié)點,通常通過局域網(wǎng)連接,但也有其它的可能連接方式。集群計算機通常用來改進單個計算機的計算速度和/或可靠性。一般情況下,集群計算機比單個計算機(比如工作站或超級計算機)性能價格比要高得多,大多數(shù)集群采用主從式來管理集群節(jié)點,比如Websphere Cluster。

和常見的分布式的不同點在于:集群是同一個業(yè)務(wù)部署在多個服務(wù)器上;分布式是一個業(yè)務(wù)分拆成多個子業(yè)務(wù),或者本身就是不同的業(yè)務(wù),部署在不同的服務(wù)器上。

簡單地說,分布式是以縮短單個任務(wù)的執(zhí)行時間來提升效率,而集群則是通過提高單位時間內(nèi)執(zhí)行的任務(wù)數(shù)來提升效率。

三、應(yīng)用服務(wù)器或者業(yè)務(wù)服務(wù)器層

1、Distributed/分布式|SC/服務(wù)中心|微服務(wù)|Decouple/解耦

分布式系統(tǒng)是支持分布式處理的軟件系統(tǒng),是由通信網(wǎng)絡(luò)互聯(lián)的多處理機體系結(jié)構(gòu)上執(zhí)行任務(wù)的系統(tǒng)。簡單來說,分布式處理就是多臺相連的計算機各自承擔(dān)同一工作任務(wù)的不同部分,在人的控制下同時運行,共同完成同一件工作任務(wù)。包括分布式操作系統(tǒng)、分布式程序設(shè)計語言及其編譯系統(tǒng)、分布式文件系統(tǒng)、分布式數(shù)據(jù)庫系統(tǒng)、分布式調(diào)度系統(tǒng)等。這常常伴隨需要做負(fù)載均衡、熔斷和限流等;還得考慮是全量計算還是增量計算等。

所以隨著分布式的發(fā)展,微服務(wù)架構(gòu)就變得越來越流行,它的主要作用是將功能分解到離散的各個服務(wù)當(dāng)中,從而降低系統(tǒng)的耦合性,并提供更加靈活的服務(wù)支持,圍繞業(yè)務(wù)領(lǐng)域組件來創(chuàng)建應(yīng)用,這些應(yīng)用可獨立地進行開發(fā)、管理和迭代。在分散的組件中使用云架構(gòu)和平臺式部署、管理和服務(wù)功能,使產(chǎn)品交付變得更加簡單,所以業(yè)務(wù)的解耦和拆分的就變得越來越重要。

現(xiàn)在隨著容器(Docker)的發(fā)展讓分布式、微服務(wù)變得更加靈活和容易,也讓現(xiàn)在支持大數(shù)據(jù)量高并發(fā)提供了很好的基礎(chǔ)設(shè)施。

2、Cache

這一層的緩存主要是對高頻數(shù)據(jù)進行緩存,比如對中間計算結(jié)果進行緩存,而且是基于內(nèi)存緩存居多,比如Memcached和redis,有的還提供緩存持久化,比如Redis。在分布式計算中經(jīng)常要對批量數(shù)據(jù)進行緩存預(yù)讀取以提高計算速度。

3、同步轉(zhuǎn)異步/MQ

同步轉(zhuǎn)異步的思路一方面不讓進程或者線程阻塞在順序執(zhí)行里,從而加快程序的執(zhí)行,就像Node.js用異步和Java用同步做相同計算測試,好多時候速度Node.js比Java還快,不信大家可以試試,像雙11的搶購都是采用了異步機制。

另一方面不讓用戶一直等在那里,用戶可以繼續(xù)做別的事情,等異步執(zhí)行完畢通知用戶。這里面大量用到了消息隊列(MQ),流行的產(chǎn)品很多,最早的WebsphereMQ,到現(xiàn)在的Kafka、RabbitMQ,有些甚至和流行的開源框架緊密集成,比如RabbitMQ和SpringBoot。

四、數(shù)據(jù)訪問、文件訪問、內(nèi)部網(wǎng)絡(luò)訪問層

1、讀寫分離

因為在大數(shù)據(jù)量并發(fā)情況下,讀的操作頻率遠(yuǎn)遠(yuǎn)超過寫操作,所以通過讀寫分離來提高讀的速度,其思路是讓主數(shù)據(jù)庫(master)處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫(slave)處理SELECT查詢操作,下面是淘寶最早的時候采用的讀寫分離策略:

面對峰值響應(yīng)沖擊,解決高并發(fā)的三大策略

 

讀寫分離示意圖

2、DB Cluster

集群就不再做過多說明,數(shù)據(jù)庫集群是利用至少兩臺或者多臺數(shù)據(jù)庫服務(wù)器,構(gòu)成一個虛擬單一數(shù)據(jù)庫邏輯映像,像單數(shù)據(jù)庫系統(tǒng)那樣,向客戶端提供透明的數(shù)據(jù)服務(wù)。其目的還是為了增加數(shù)據(jù)吞吐量,提高數(shù)據(jù)庫性能,滿足大數(shù)據(jù)量下對數(shù)據(jù)的讀寫速度要求。

阿里云的RDS云數(shù)據(jù)庫就繼承了上述2大特征,外面看來是一個MySQL集群,提供統(tǒng)一的透明訪問,而在內(nèi)部就自動實現(xiàn)了讀寫分離,為高性能數(shù)據(jù)庫存儲提供了很大便利。

3、分布式存儲(DAS/NAS/SAN)

三種分布式存儲方案,大家可自行百度,各種介紹比較比較多,這里不再贅述,比如阿里的OSS存儲也是一種分布式存儲。

4、Cache

緩存無處不在,連CPU都有二級緩存,在數(shù)據(jù)訪問這一層,可以根據(jù)你的數(shù)據(jù)需要充分利用緩存技術(shù)來提供讀寫速度,比如對要求不是特別實時的大數(shù)據(jù)進行預(yù)統(tǒng)計分析,然后緩存下來做報表等,這個時候直接從緩存里讀取即可,提高統(tǒng)計速度。

5、NOSQL,Key/Value

NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)Web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付Web2.0網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其自身的特點(高可擴展性、分布式計算、低成本、架構(gòu)的靈活性、半結(jié)構(gòu)化數(shù)據(jù),沒有復(fù)雜的關(guān)系)得到了非常迅速的發(fā)展。NoSql數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重數(shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題。其數(shù)據(jù)庫類型有列存儲、文檔存儲、Key/Value存儲、對象存儲和圖存儲等。

6、Split/分割,Partition/分區(qū)

表分區(qū)是DB對于非常大的表進行優(yōu)化的一種有效方法,是根據(jù)數(shù)據(jù)庫定義不同的分區(qū)策略決定的,比如取模、時間和哈希等,是非常有效的一種手段,在很多情況下比表分割更有效。

比如,有一個代碼表使用分區(qū)表把100萬紀(jì)錄分在10個分區(qū)中(ID每從1到10萬為一個分區(qū)),那樣寫查詢語句的時候,只要給出查詢條件中所需要的代碼,DB自動會定位到對應(yīng)的分區(qū)進行查詢,大大降低的查詢時間。

而采用表分割那必須先根據(jù)查詢的代碼指定所要查詢的表,才能找到相應(yīng)的記錄,是由DBA或架構(gòu)師根據(jù)業(yè)務(wù)需要來定義如何分割的。表分割分為水平分割和垂直分割:

  • 水平分割: 根據(jù)一列或多列數(shù)據(jù)的值把數(shù)據(jù)行放到兩個獨立的表中;

  • 垂直分割: 把主碼和一些列放到一個表,然后把主碼和另外的列放到另一個表中。

7、BGP

邊界網(wǎng)關(guān)協(xié)議,主要用于互聯(lián)網(wǎng)AS(自治系統(tǒng))之間的互聯(lián),BGP的最主要功能在于控制路由的傳播和選擇最好的路由。中國網(wǎng)通與中國電信都具有AS號(自治系統(tǒng)號),全國各大網(wǎng)絡(luò)運營商多數(shù)都是通過BGP協(xié)議與自身的AS號來互聯(lián)的。

使用此方案來實現(xiàn)雙線路需要在CNNIC(中國互聯(lián)網(wǎng)信息中心)申請IDC自己的IP地址段和AS號,然后通過BGP協(xié)議將此段IP地址廣播到移動,網(wǎng)通、電信等其它的網(wǎng)絡(luò)運營商,使用BGP協(xié)議互聯(lián)后移動。網(wǎng)通與電信的所有骨干路由設(shè)備將會判斷到IDC機房IP段的最佳路由,以保證移動、網(wǎng)通和電信用戶的高速訪問?,F(xiàn)在不少的云平臺都支持BGP。

五、總結(jié)

“緩存”、“異步”和“分”是互聯(lián)網(wǎng)大數(shù)據(jù)量高并發(fā)下架構(gòu)策略中用的最多的3種策略,從上面各個技術(shù)層面,“分”也是占據(jù)了大多數(shù)技術(shù)的核心思想,所以考慮的時候要多想想分哪里、如何分,另外很多業(yè)務(wù)場景還得想想怎么合。

順便在此給大家推薦一個Java架構(gòu)方面的交流學(xué)習(xí)群: 698581634 ,里面會分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化這些成為架構(gòu)師必備的知識體系,主要針對Java開發(fā)人員提升自己,突破瓶頸,相信你來學(xué)習(xí),會有提升和收獲。在這個群里會有你需要的內(nèi)容  朋友們請抓緊時間加入進來吧。


文章名稱:面對峰值響應(yīng)沖擊,解決高并發(fā)的三大策略
文章起源:http://weahome.cn/article/jhcgcc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部