關(guān)于這個(gè)網(wǎng)站結(jié)構(gòu)設(shè)計(jì)怎么寫(xiě)(大型網(wǎng)站架構(gòu)設(shè)計(jì))很多人還不知道,現(xiàn)在讓我們一起來(lái)看看吧!

1、大型網(wǎng)站架構(gòu)的設(shè)計(jì)是一個(gè)循序漸進(jìn)的過(guò)程,圍繞性能、可用性、可擴(kuò)展性、可伸縮性、安全性展開(kāi) 。下面是一些關(guān)于網(wǎng)站架構(gòu)的個(gè)人總結(jié),沒(méi)有問(wèn)題的話請(qǐng)大家多多批評(píng) 。前端CDN加速:CSS/ *** /圖片等靜態(tài)資源使用CDN加速,設(shè)置緩存時(shí)間、Referer限制(防盜鏈)等進(jìn)行流量?jī)?yōu)化;減少HTTP請(qǐng)求:將CSS/ *** /圖片等靜態(tài)資源合并,可以利用webpack等前端構(gòu)建工具進(jìn)行處理啟用瀏覽器緩存和文件壓縮:壓縮圖片、 *** /CSS混淆壓縮、Web服務(wù)器開(kāi)啟Gzip壓縮&設(shè)置文件expire緩存時(shí)間;異步加載:動(dòng)態(tài)接口通過(guò)Ajax異步加載,減少 *** 請(qǐng)求(可以通過(guò) *** ONP或者設(shè)置Access-Control-Allow-Origin進(jìn)行跨域);使用驗(yàn)證碼:使用短信或圖像驗(yàn)證碼,提高驗(yàn)證碼的復(fù)雜度及多樣性,緩解羊毛黨帶來(lái)的流量沖擊;減少Cookie傳輸:Cookie包含在每次請(qǐng)求和響應(yīng)中,太大的Cookie會(huì)嚴(yán)重影響數(shù)據(jù)傳輸,例如針對(duì)CDN采用獨(dú)立域名,可以減少靜態(tài)資源加載攜帶Cookie信息;緩存關(guān)于緩存,永遠(yuǎn)記住28定律:80%的業(yè)務(wù)訪問(wèn)集中在20%的數(shù)據(jù)上 。
2、緩存熱數(shù)據(jù)可以減少 *** I/O和磁盤I/O,大大提高響應(yīng)速度 。除了前端本地資源緩存,服務(wù)器端緩存的常見(jiàn)做法如下:頁(yè)面靜態(tài)化:緩存整個(gè)頁(yè)面,或者局部緩存,減少數(shù)據(jù)讀取和運(yùn)算頻率;數(shù)據(jù)緩存:充分利用NoSQL數(shù)據(jù)庫(kù),例如memcached、redis、mongodb等,可以部署集群或分布式緩存,提高緩存命中率,減少數(shù)據(jù)訪問(wèn)的壓力,可以進(jìn)行緩存預(yù)熱、預(yù)先加載熱點(diǎn)數(shù)據(jù),同時(shí)需要防止緩存穿透;消息隊(duì)列異步解耦:利用Httpsqs、RabbitMQ、Kafka等隊(duì)列或消息中間件,將耗時(shí)/非即時(shí)性操作通過(guò)隊(duì)列進(jìn)行異步處理,提高服務(wù)器響應(yīng)速度,以此降低對(duì)資源的并發(fā)訪問(wèn) 。遵循一個(gè)原則:任何可以晚點(diǎn)做的事情都應(yīng)該晚點(diǎn)再做 。
3、削峰填谷:由于流量是波動(dòng)變化的,高峰和低谷差距很大,可以將一些操作存儲(chǔ)到MQ隊(duì)列中,消費(fèi)端通過(guò)拉取的方式,并且拉去速度有消費(fèi)端來(lái)控制,則就可以控制流量趨于平穩(wěn),達(dá)到了削峰填谷的目的,或者說(shuō)起到了流控的目標(biāo) 。數(shù)據(jù)庫(kù)使用緩存后,大部分?jǐn)?shù)據(jù)讀取操作不需要通過(guò)數(shù)據(jù)庫(kù)完成,但是當(dāng)緩存未命中、緩存過(guò)期、所有寫(xiě)操作時(shí),都需要訪問(wèn)數(shù)據(jù)庫(kù) 。當(dāng)用戶達(dá)到一定規(guī)模時(shí),數(shù)據(jù)庫(kù)會(huì)因?yàn)楦哓?fù)載壓力而成為瓶頸 。
4、常見(jiàn)的做法如下:讀寫(xiě)分離:利用Mysql主從復(fù)制機(jī)制搭建讀寫(xiě)分離集群,在客戶端實(shí)現(xiàn)或者服務(wù)端利用中間件(例如MyCAT)實(shí)現(xiàn)讀寫(xiě)分離;分庫(kù)分表:針對(duì)不同業(yè)務(wù)類型,進(jìn)行分庫(kù),部署到不同服務(wù)器上,減少單服務(wù)器壓力,同時(shí)針對(duì)大表,根據(jù)一定條件(如用戶ID取模、ID范圍)進(jìn)行水平分表,減少單表讀寫(xiě)壓力;數(shù)據(jù)庫(kù)連接池:充分利用連接復(fù)用,解決數(shù)據(jù)庫(kù)連接過(guò)程需要占用資源,影響響應(yīng)速度等問(wèn)題,PHP本身沒(méi)有連接池,可以利用第三方框架實(shí)現(xiàn)(例如 *** Proxy);硬件優(yōu)化:利用磁盤陣列(RAID)提升數(shù)據(jù)可靠性,資金充足的話可以換SSD硬盤;負(fù)載平衡業(yè)務(wù)拆分:根據(jù)URL拆分業(yè)務(wù),分發(fā)流量到不同的服務(wù)器組,防止單一功能模塊卡住,而影響整個(gè)業(yè)務(wù),主要遵循SOA的架構(gòu)思路,將業(yè)務(wù)模塊打散(雞蛋不要放在一個(gè)籃子里面)反向 *** 負(fù)載均衡:充分利用Nginx/Haproxy/LVS反向 *** 負(fù)載均衡,搭建服務(wù)器集群,提升并發(fā)處理能力;DNS負(fù)載均衡:DNS解析可以依據(jù)不同 *** 運(yùn)營(yíng)商、地區(qū)進(jìn)行分別解析、從而實(shí)現(xiàn)DNS層面負(fù)載均衡;代碼多線程:充分利用多CPU優(yōu)勢(shì)進(jìn)行數(shù)據(jù)批處理鎖:在高并 *** 況下,對(duì)統(tǒng)一資源讀寫(xiě)訪問(wèn)容易出現(xiàn)臟讀、幻讀,這個(gè)時(shí)候需要對(duì)核心資源枷鎖,利用Redis或者Zookeeper等可以實(shí)現(xiàn)分布式鎖;設(shè)計(jì)模式:充分利用設(shè)計(jì)模式,實(shí)現(xiàn)邏輯解耦、分層和資源服用,例如單利模式、觀察者模式等;數(shù)據(jù)結(jié)構(gòu)和算法:好的數(shù)據(jù)結(jié)構(gòu)和算法可以給程序性能帶來(lái)很大提升、例如鏈表查找、快速排序等;垃圾回收:良好的編程習(xí)慣,例如即時(shí)清理內(nèi)存占用大的變量、避免操作的數(shù)據(jù)量大等都可以避免出現(xiàn)內(nèi)存泄漏(OOM)的情況發(fā)生 。SQL查詢優(yōu)化:SQL執(zhí)行效率一般是影響響應(yīng)速度的關(guān)鍵,可以開(kāi)啟SQL慢查詢?nèi)罩荆瑢?duì)執(zhí)行效率慢的SQL語(yǔ)句進(jìn)行優(yōu)化;GIT多分支:良好的分支管理對(duì)于CI/CD、版本測(cè)試有很好的作用,建議參考git-flow進(jìn)行日常Git協(xié)作 。日志:統(tǒng)一的日志輸出標(biāo)準(zhǔn),有利于進(jìn)行數(shù)據(jù)追蹤和問(wèn)題排查 。
推薦閱讀
- 蟶子怎么吃 里面要去掉什么 蟶子怎么吃
- 餡餅面怎么和面才松軟 餡餅面怎么和面
- 洋槐花怎么做好吃又簡(jiǎn)單
- 上眼瞼下垂怎么辦 上瞼下垂怎么診斷
- 摩羯女極其聰明怎么辦 摩羯女極其聰明的表現(xiàn)
- 6個(gè)月寶寶發(fā)燒怎么辦 維持家中的空氣流通很重要
- 坐飛機(jī)忘帶身份證怎么辦
- 減肥蔬菜湯都有哪幾種怎么做 減肥蔬菜湯
- 汲取劍怎么合成
- 怎么穿漢服
