日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

大型網站架構設計是一個循序漸進的過程,圍繞“性能、可用性、伸縮性、擴展性、安全性”展開,下面是個人關于網站架構方面的一些總結,不到之處請大家多多批評。

前端

  • CDN加速:css/JS/圖片等靜態資源使用CDN加速,設置緩存時間、Referer限制(防盜鏈)等進行流量優化;
  • 減少HTTP請求:將CSS/JS/圖片等靜態資源合并,可以利用webpack等前端構建工具進行處理
  • 啟用瀏覽器緩存和文件壓縮:壓縮圖片、JS/CSS混淆壓縮、Web服務器開啟Gzip壓縮&設置文件expire緩存時間;
  • 異步加載:動態接口通過Ajax異步加載,減少網絡請求(可以通過JSONP或者設置Access-Control-Allow-Origin進行跨域);
  • 使用驗證碼:使用短信或圖像驗證碼,提高驗證碼的復雜度及多樣性,緩解羊毛黨帶來的流量沖擊;
  • 減少Cookie傳輸:Cookie包含在每次請求和響應中,太大的Cookie會嚴重影響數據傳輸,例如針對CDN采用獨立域名,可以減少靜態資源加載攜帶Cookie信息;

緩存

關于緩存,永遠要記住二八定律:80%的業務訪問集中在20%的數據上。將熱點數據進行緩存,可以降低網絡I/O和磁盤I/O,極大提升響應速度,除了前端本地資源緩存外,服務端緩存常見做法如下:

  • 頁面靜態化:緩存整個頁面,或者局部緩存,減少數據讀取和運算頻率;
  • 數據緩存:充分利用NoSQL數據庫,例如memcached、redis、mongodb等,可以部署集群或分布式緩存,提高緩存命中率,減少數據訪問的壓力,可以進行緩存預熱、預先加載熱點數據,同時需要防止緩存穿透

消息隊列

  • 異步解耦:利用Httpsqs、RabbitMQ、Kafka等隊列或消息中間件,將耗時/非即時性操作通過隊列進行異步處理,提高服務器響應速度,以此降低對資源的并發訪問。遵循一個原則:任何可以晚點做的事情都應該晚點再做
  • 削峰填谷:由于流量是波動變化的,高峰和低谷差距很大,可以將一些操作存儲到MQ隊列中,消費端通過拉取的方式,并且拉去速度有消費端來控制,則就可以控制流量趨于平穩,達到了削峰填谷的目的,或者說起到了流控的目標。

數據庫

使用緩存后,大部分數據讀取操作都不用通過數據庫完成,但是在緩存不命中、緩存過期和全部的寫操作時需要訪問數據庫。當用戶達到一定規模后,數據庫會因為負載壓力過高而成為瓶頸,常見做法如下:

  • 讀寫分離:利用MySQL主從復制機制搭建讀寫分離集群,在客戶端實現或者服務端利用中間件(例如MyCAT)實現讀寫分離;
  • 分庫分表:針對不同業務類型,進行分庫,部署到不同服務器上,減少單服務器壓力,同時針對大表,根據一定條件(如用戶ID取模、ID范圍)進行水平分表,減少單表讀寫壓力;
  • 數據庫連接池:充分利用連接復用,解決數據庫連接過程需要占用資源,影響響應速度等問題,php本身沒有連接池,可以利用第三方框架實現(例如SMProxy);
  • 硬件優化:利用磁盤陣列(RAID)提升數據可靠性,資金充足的話可以換SSD硬盤;

負載均衡

  • 業務拆分:根據URL拆分業務,分發流量到不同的服務器組,防止單一功能模塊卡住,而影響整個業務,主要遵循SOA的架構思路,將業務模塊打散(雞蛋不要放在一個籃子里面)
  • 反向代理負載均衡:充分利用Nginx/Haproxy/LVS反向代理負載均衡,搭建服務器集群,提升并發處理能力;
  • DNS負載均衡:DNS解析可以依據不同網絡運營商、地區進行分別解析、從而實現DNS層面負載均衡;

代碼

  • 多線程:充分利用多CPU優勢進行數據批處理
  • :在高并發情況下,對統一資源讀寫訪問容易出現臟讀、幻讀,這個時候需要對核心資源枷鎖,利用Redis或者Zookeeper等可以實現分布式鎖;
  • 設計模式:充分利用設計模式,實現邏輯解耦、分層和資源服用,例如單利模式、觀察者模式等;
  • 數據結構和算法:好的數據結構和算法可以給程序性能帶來很大提升、例如鏈表查找、快速排序等;
  • 垃圾回收:良好的編程習慣,例如即時清理內存占用大的變量、避免操作的數據量大等都可以避免出現內存泄漏(OOM)的情況發生。
  • SQL查詢優化:SQL執行效率一般是影響響應速度的關鍵,可以開啟SQL慢查詢日志,對執行效率慢的SQL語句進行優化;
  • GIT多分支:良好的分支管理對于CI/CD、版本測試有很好的作用,建議參考git-flow進行日常Git協作。
  • 日志:統一的日志輸出標準,有利于進行數據追蹤和問題排查。

冗余

  • 數據定期備份:定期全量備份+主從同步增量備份,例如MySQL/Redis主從復制進行增量備份、Mysqldump全量備份、Redis利用RDB或者AOF進行備份;
  • 集群:一定數量的備用服務器,可以保障系統的高可用,防止單點故障,可以結合Keepalived+LVS/HAProxy/Nginx等實現數據庫/Web服務器/緩存/消息中間件高可用集群;

自動化

  • CI/CD:利用成熟的CI/CD機制實現自動化測試、代碼檢測,自動化發布,例如可采用Git+Jenkins+Docker搭建CI/CD工作流。
  • 自動化部署:針對超過30臺的服務器部署,可以采用ansible進行批量管理
  • 自動監控/報警:監控用戶行為日志、服務器日志等 ,可結合zabbix+ELK進行實施;
  • 自動降級和資源調度:微服務架構范疇,作者也在努力學習中。

安全

  • 二次驗證:充分手機驗證/人臉識別進行二次驗證,保障操作的真實性;
  • web防火墻:傳統防火墻僅限于包過濾,網絡和端口地址轉換(NAT)和VPN等功能。它根據端口,協議和IP地址做出決策;Web防火墻(WAF)則提供了HTTP/HTTPS訪問請求監控、自定義過濾規則、Web攻擊防護、安全合規等功能;可以利用阿里云等提供的WAF服務或者基于Nginx+lua等實現的類似API網關實施類似功能;
  • 內外網隔斷:暴露出來的IP和端口越少,安全系數越高;例如數據庫服務、緩存服務、中間件等盡量只允許內外訪問,如果確實需要可以通過路由轉發或反向代理實現;
  • 數據加密:充分利用非對稱加密,例如啟用https, rsa加密等,保障數據傳輸的安全性;
  • 網絡攻擊:需要防止DDoS攻擊、XSS攻擊、SQL注入、CSRF等,常見手段CDN加速、高仿IP、linux內核優化、數據輸入輸出過濾、Referer限制、表單添加隨機token/驗證碼等;
  • 信息安全:對于垃圾信息、敏感信息可以采用第三方解決方案(例如網易云盾、百度AI等)對文本、圖片、音頻、視頻等進行過濾和審核。

總結

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

大型網站的架構設計,作者也在不斷的學習和實踐,特別是微服務架構和K8S的運用,必然是未來主流的架構思想,作者正在努力學習。關于本文內容,歡迎大家積極補充。

分享到:
標簽:架構 網站
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定