1. 河豚號 > 購物指南 >

大型網(wǎng)站結構設計方案總結(網(wǎng)站設計步驟和思路)

大型網(wǎng)站架構設計是一個(gè)循序漸進(jìn)的過(guò)程,圍繞“性能、可用性、伸縮性、擴展性、安全性”展開(kāi),下面是個(gè)人關(guān)于網(wǎng)站架構方面的一些總結,不到之處請大家多多批評。

前端

CDN加速:CSS/JS/圖片等靜態(tài)資源使用CDN加速,設置緩存時(shí)間、Referer限制(防盜鏈)等進(jìn)行流量?jì)?yōu)化;

減少HTTP請求:將CSS/JS/圖片等靜態(tài)資源合并,可以利用webpack等前端構建工具進(jìn)行處理

啟用瀏覽器緩存和文件壓縮:壓縮圖片、JS/CSS混淆壓縮、Web服務(wù)器開(kāi)啟Gzip壓縮&設置文件expire緩存時(shí)間;

異步加載:動(dòng)態(tài)接口通過(guò)Ajax異步加載,減少網(wǎng)絡(luò )請求(可以通過(guò)JSONP或者設置Access-Control-Allow-Origin進(jìn)行跨域);

使用驗證碼:使用短信或圖像驗證碼,提高驗證碼的復雜度及多樣性,緩解羊毛黨帶來(lái)的流量沖擊;

減少Cookie傳輸:Cookie包含在每次請求和響應中,太大的Cookie會(huì )嚴重影響數據傳輸,例如針對CDN采用獨立域名,可以減少靜態(tài)資源加載攜帶Cookie信息;

緩存

關(guān)于緩存,永遠要記住二八定律:80%的業(yè)務(wù)訪(fǎng)問(wèn)集中在20%的數據上。將熱點(diǎn)數據進(jìn)行緩存,可以降低網(wǎng)絡(luò )I/O和磁盤(pán)I/O,極大提升響應速度,除了前端本地資源緩存外,服務(wù)端緩存常見(jiàn)做法如下:

頁(yè)面靜態(tài)化:緩存整個(gè)頁(yè)面,或者局部緩存,減少數據讀取和運算頻率;

數據緩存:充分利用NoSQL數據庫,例如memcached、redis、mongodb等,可以部署集群或分布式緩存,提高緩存命中率,減少數據訪(fǎng)問(wèn)的壓力,可以進(jìn)行緩存預熱、預先加載熱點(diǎn)數據,同時(shí)需要防止緩存穿透;

消息隊列

異步解耦:利用Httpsqs、RabbitMQ、Kafka等隊列或消息中間件,將耗時(shí)/非即時(shí)性操作通過(guò)隊列進(jìn)行異步處理,提高服務(wù)器響應速度,以此降低對資源的并發(fā)訪(fǎng)問(wèn)。遵循一個(gè)原則:任何可以晚點(diǎn)做的事情都應該晚點(diǎn)再做。

削峰填谷:由于流量是波動(dòng)變化的,高峰和低谷差距很大,可以將一些操作存儲到MQ隊列中,消費端通過(guò)拉取的方式,并且拉去速度有消費端來(lái)控制,則就可以控制流量趨于平穩,達到了削峰填谷的目的,或者說(shuō)起到了流控的目標。

數據庫

使用緩存后,大部分數據讀取操作都不用通過(guò)數據庫完成,但是在緩存不命中、緩存過(guò)期和全部的寫(xiě)操作時(shí)需要訪(fǎng)問(wèn)數據庫。當用戶(hù)達到一定規模后,數據庫會(huì )因為負載壓力過(guò)高而成為瓶頸,常見(jiàn)做法如下:

讀寫(xiě)分離:利用Mysql主從復制機制搭建讀寫(xiě)分離集群,在客戶(hù)端實(shí)現或者服務(wù)端利用中間件(例如MyCAT)實(shí)現讀寫(xiě)分離;

分庫分表:針對不同業(yè)務(wù)類(lèi)型,進(jìn)行分庫,部署到不同服務(wù)器上,減少單服務(wù)器壓力,同時(shí)針對大表,根據一定條件(如用戶(hù)ID取模、ID范圍)進(jìn)行水平分表,減少單表讀寫(xiě)壓力;

數據庫連接池:充分利用連接復用,解決數據庫連接過(guò)程需要占用資源,影響響應速度等問(wèn)題,PHP本身沒(méi)有連接池,可以利用第三方框架實(shí)現(例如SMProxy);

硬件優(yōu)化:利用磁盤(pán)陣列(RAID)提升數據可靠性,資金充足的話(huà)可以換SSD硬盤(pán);

負載均衡

業(yè)務(wù)拆分:根據URL拆分業(yè)務(wù),分發(fā)流量到不同的服務(wù)器組,防止單一功能模塊卡住,而影響整個(gè)業(yè)務(wù),主要遵循SOA的架構思路,將業(yè)務(wù)模塊打散(雞蛋不要放在一個(gè)籃子里面)

反向代理負載均衡:充分利用Nginx/Haproxy/LVS反向代理負載均衡,搭建服務(wù)器集群,提升并發(fā)處理能力;

DNS負載均衡:DNS解析可以依據不同網(wǎng)絡(luò )運營(yíng)商、地區進(jìn)行分別解析、從而實(shí)現DNS層面負載均衡;

代碼

多線(xiàn)程:充分利用多CPU優(yōu)勢進(jìn)行數據批處理

鎖:在高并發(fā)情況下,對統一資源讀寫(xiě)訪(fǎng)問(wèn)容易出現臟讀、幻讀,這個(gè)時(shí)候需要對核心資源枷鎖,利用Redis或者Zookeeper等可以實(shí)現分布式鎖;

設計模式:充分利用設計模式,實(shí)現邏輯解耦、分層和資源服用,例如單利模式、觀(guān)察者模式等;

數據結構和算法:好的數據結構和算法可以給程序性能帶來(lái)很大提升、例如鏈表查找、快速排序等;

垃圾回收:良好的編程習慣,例如即時(shí)清理內存占用大的變量、避免操作的數據量大等都可以避免出現內存泄漏(OOM)的情況發(fā)生。

SQL查詢(xún)優(yōu)化:SQL執行效率一般是影響響應速度的關(guān)鍵,可以開(kāi)啟SQL慢查詢(xún)日志,對執行效率慢的SQL語(yǔ)句進(jìn)行優(yōu)化;

GIT多分支:良好的分支管理對于CI/CD、版本測試有很好的作用,建議參考git-flow進(jìn)行日常Git協(xié)作。

日志:統一的日志輸出標準,有利于進(jìn)行數據追蹤和問(wèn)題排查。

冗余

數據定期備份:定期全量備份+主從同步增量備份,例如MySQL/Redis主從復制進(jìn)行增量備份、Mysqldump全量備份、Redis利用RDB或者AOF進(jìn)行備份;

集群:一定數量的備用服務(wù)器,可以保障系統的高可用,防止單點(diǎn)故障,可以結合Keepalived+LVS/HAProxy/Nginx等實(shí)現數據庫/Web服務(wù)器/緩存/消息中間件高可用集群;

自動(dòng)化

CI/CD:利用成熟的CI/CD機制實(shí)現自動(dòng)化測試、代碼檢測,自動(dòng)化發(fā)布,例如可采用Git+Jenkins+Docker搭建CI/CD工作流。

自動(dòng)化部署:針對超過(guò)30臺的服務(wù)器部署,可以采用ansible進(jìn)行批量管理

自動(dòng)監控/報警:監控用戶(hù)行為日志、服務(wù)器日志等 ,可結合zabbix+ELK進(jìn)行實(shí)施;

自動(dòng)降級和資源調度:微服務(wù)架構范疇,作者也在努力學(xué)習中。

安全

二次驗證:充分手機驗證/人臉識別進(jìn)行二次驗證,保障操作的真實(shí)性;

web防火墻:傳統防火墻僅限于包過(guò)濾,網(wǎng)絡(luò )和端口地址轉換(NAT)和VPN等功能。它根據端口,協(xié)議和IP地址做出決策;Web防火墻(WAF)則提供了HTTP/HTTPS訪(fǎng)問(wèn)請求監控、自定義過(guò)濾規則、Web攻擊防護、安全合規等功能;可以利用阿里云等提供的WAF服務(wù)或者基于Nginx+lua等實(shí)現的類(lèi)似API網(wǎng)關(guān)實(shí)施類(lèi)似功能;

內外網(wǎng)隔斷:暴露出來(lái)的IP和端口越少,安全系數越高;例如數據庫服務(wù)、緩存服務(wù)、中間件等盡量只允許內外訪(fǎng)問(wèn),如果確實(shí)需要可以通過(guò)路由轉發(fā)或反向代理實(shí)現;

數據加密:充分利用非對稱(chēng)加密,例如啟用https, rsa加密等,保障數據傳輸的安全性;

網(wǎng)絡(luò )攻擊:需要防止DDOS攻擊、XSS攻擊、SQL注入、CSRF等,常見(jiàn)手段CDN加速、高仿IP、Linux內核優(yōu)化、數據輸入輸出過(guò)濾、Referer限制、表單添加隨機token/驗證碼等;

信息安全:對于垃圾信息、敏感信息可以采用第三方解決方案(例如網(wǎng)易云盾、百度AI等)對文本、圖片、音頻、視頻等進(jìn)行過(guò)濾和審核。

總結

架構的演變,遵循著(zhù)”分層->分割->分布式”的思路不斷深入,是隨著(zhù)業(yè)務(wù)的增長(cháng),不斷積累經(jīng)驗、優(yōu)化、改良的過(guò)程。業(yè)務(wù)發(fā)展是架構發(fā)展的主要力量,架構的核心價(jià)值是服務(wù)業(yè)務(wù)的靈活發(fā)展。所有的架構設計必須以了解業(yè)務(wù)特點(diǎn)作為出發(fā)點(diǎn),需要考慮互聯(lián)互通、負載均衡、網(wǎng)絡(luò )、開(kāi)發(fā)、緩存、存儲、數據庫、安全性等層面,這些層面看似一個(gè)整體,任何一個(gè)環(huán)節出問(wèn)題都可能導致整個(gè)崩潰,所以一個(gè)高可用、高并發(fā)的平臺還少不了監控、開(kāi)發(fā)、運維等角色通力協(xié)作。

大型網(wǎng)站的架構設計,作者也在不斷的學(xué)習和實(shí)踐,特別是微服務(wù)架構和K8S的運用,必然是未來(lái)主流的架構思想,作者正在努力學(xué)習。關(guān)于本文內容,歡迎大家積極補充。

本文由網(wǎng)上采集發(fā)布,不代表我們立場(chǎng),轉載聯(lián)系作者并注明出處:http://seensnowboarding.com/gouwuzhinan/202210/48657.html

聯(lián)系我們

在線(xiàn)咨詢(xún):點(diǎn)擊這里給我發(fā)消息

微信號:15705946153

工作日:9:30-18:30,節假日休息

国产精品亚洲w码日韩中文|国产高清露脸孕妇系列|久久国语露脸国产精品|久久久777精品电影网影网|欧美高大丰满freesex