支撐百萬(wàn)連接的系統(tǒng)應(yīng)該如何設(shè)計(jì)其高并發(fā)架構(gòu)?
首先要結(jié)合具體的業(yè)務(wù)場(chǎng)景,不根據(jù)業(yè)務(wù)就云設(shè)計(jì)就是在耍流氓。
業(yè)務(wù)場(chǎng)景首先你要確定你所架構(gòu)的系統(tǒng)服務(wù)于什么業(yè)務(wù)。假如我們現(xiàn)在是一個(gè)小創(chuàng)業(yè)公司,注冊(cè)用戶就20萬(wàn),每天活躍用戶就1萬(wàn),每天單表數(shù)據(jù)量就1000,然后高峰期每秒鐘并發(fā)請(qǐng)求最多就10。但是你要考慮到后面注冊(cè)用戶數(shù)達(dá)到了2000萬(wàn)!每天活躍用戶數(shù)100萬(wàn)!每天單表新增數(shù)據(jù)量達(dá)到50萬(wàn)條!高峰期每秒請(qǐng)求量達(dá)到1萬(wàn)。
靜態(tài)資源大寬帶、CDN、緩存(頁(yè)面緩存、對(duì)象緩存),WEB服務(wù)器緩存等N級(jí)分布式緩存,Redis、Memcached緩存集群。
動(dòng)態(tài)資源計(jì)算:多組服務(wù)器,負(fù)載均衡等技術(shù)控制流量。
存儲(chǔ):存儲(chǔ)這里就比較麻煩,按照KV存儲(chǔ)簡(jiǎn)單的資源,然后在計(jì)算部分進(jìn)行整合。真的沒辦法做KV的,采用跨庫(kù)索引來做。單機(jī)存儲(chǔ)數(shù)量要合理,不能太多。還有就是事務(wù)性的問題,解決方案就是BASE思想或者采用日志方式。
縱向拆分、水平擴(kuò)展系統(tǒng)按照模塊功能縱向拆分,再水平擴(kuò)展,抽象服務(wù)層利用各種中間件完善,優(yōu)化JVM應(yīng)用服務(wù)器。
消息中間件用mq解決穩(wěn)定性。將耗時(shí)比較長(zhǎng)或者耗費(fèi)資源的請(qǐng)求排隊(duì),異步處理,減輕服務(wù)器壓力增加穩(wěn)定性
數(shù)據(jù)庫(kù)關(guān)系型、非關(guān)系型數(shù)據(jù)庫(kù)上最牛比SSD硬盤,分庫(kù)分表,讀寫分離,讀的流量多時(shí)還要增加從庫(kù)提高IO性能。每秒1萬(wàn)請(qǐng)求到5臺(tái)數(shù)據(jù)庫(kù)上,每臺(tái)數(shù)據(jù)庫(kù)就承載每秒2000的請(qǐng)求,相應(yīng)的壓力也就會(huì)減少。
SQL語(yǔ)句避免跨表查詢,優(yōu)化好存儲(chǔ)過程,此時(shí)注意存儲(chǔ)過程利用好了是把利劍,利用不好就成為了累贅。
負(fù)載均衡負(fù)載均衡由多種實(shí)現(xiàn)方式,一種是在硬件上的,常用軟件由F5、NetScaler、Radware和Array等商用的,但是價(jià)格較昂貴。另外一種就是軟件的,常見的軟件有LVS、Nginx、Apache等,它們是基于Linux系統(tǒng)并且開源的負(fù)載均衡策略。
簡(jiǎn)單架構(gòu)圖結(jié)語(yǔ)系統(tǒng)架構(gòu)中需要注意的點(diǎn)太多,具體業(yè)務(wù)也不盡相同。實(shí)現(xiàn)方案也有多種,此處只提供一個(gè)思路。
碼字不宜,如果對(duì)您有所幫助請(qǐng)點(diǎn)擊一個(gè)小贊。