大型網(wǎng)站后端架構(gòu)設(shè)計(jì)
時(shí)間:2023-10-03 15:36:01 | 來源:網(wǎng)站運(yùn)營
時(shí)間:2023-10-03 15:36:01 來源:網(wǎng)站運(yùn)營
大型網(wǎng)站后端架構(gòu)設(shè)計(jì):后端架構(gòu)設(shè)計(jì)涉及很多方面,并且跟網(wǎng)站規(guī)模有很大關(guān)系,規(guī)模越大涉及技術(shù)越多,下面介紹一下超大型網(wǎng)站后端架構(gòu)設(shè)計(jì),以及包含哪些核心技術(shù)。
分層是架構(gòu)設(shè)計(jì)一種重要方式,通過分層來講問題很高隔離,后端架構(gòu)可以分為三層,一層是接入層、服務(wù)層、存儲(chǔ)層。
接入層通過LVS、HAProxy等技術(shù)將請求接入,將請求量轉(zhuǎn)發(fā)給后邊nginx+lua,在這一層通過lua擴(kuò)展構(gòu)建一些業(yè)務(wù)邏輯,性能很高。
服務(wù)層包含http 服務(wù),http服務(wù)一般實(shí)現(xiàn)組合邏輯,Tomcat是http服務(wù)所在容器,http服務(wù)一般實(shí)現(xiàn)比如填充sku 屬性、描述、圖片、說明、介紹等信息業(yè)務(wù)邏輯。
服務(wù)層RPC服務(wù)一般是更為基層服務(wù),比如提供個(gè)性化推薦BI服務(wù),返回推薦sku列表或者文章素材列表。RPC服務(wù)實(shí)現(xiàn)服務(wù)橫向擴(kuò)展,以及實(shí)現(xiàn)業(yè)務(wù)縱向拆分,能夠使團(tuán)隊(duì)按職能進(jìn)行拆分。RPC服務(wù)目前用的比較多的是dubbo、spring cloud。
服務(wù)層包含Monitor監(jiān)控服務(wù),監(jiān)控包含多個(gè)緯度。線上服務(wù)業(yè)務(wù)緯度,對線上服務(wù)性能比如tp99指標(biāo),對于可用率是否100%情況進(jìn)行監(jiān)控,并且可以設(shè)置報(bào)警閾值,當(dāng)監(jiān)控達(dá)到閾值進(jìn)行相應(yīng)報(bào)警。jvm監(jiān)控,對jvm內(nèi)存、cpu、線程數(shù)等情況進(jìn)行監(jiān)控。docker監(jiān)控,對docker內(nèi)存、進(jìn)程數(shù)、線程數(shù)、網(wǎng)絡(luò)、磁盤等進(jìn)行監(jiān)控。通過以上技術(shù)手段實(shí)現(xiàn)對線上服務(wù)可用率、性能、jvm、docker等資源使用情況監(jiān)控。能夠預(yù)防線上服務(wù)問題,以及線上出現(xiàn)問題后能夠快速定位問題,查找問題原因從而解決問題。
服務(wù)層Zookeeper可以實(shí)現(xiàn)注冊中心和配置管理下發(fā)等。Zookeeper作為分布式系統(tǒng)核心協(xié)作組件,在分布式系統(tǒng)中起著很重要作用。在服務(wù)端開發(fā)中Zookeeper也起著核心作用,比如用作微服務(wù)注冊中心,管理微服務(wù)注冊信息?;蛘呋赯ookeeper實(shí)現(xiàn)配置管理工具,方便對于線上服務(wù)配置管理以及配置下發(fā),從而實(shí)現(xiàn)秒級降級以及秒級配置更新。Zookeeper還可以用作分布式鎖,協(xié)調(diào)多個(gè)微服務(wù)同步操作。比如微服務(wù)緩存更新,可以通過Zookeeper協(xié)調(diào),避免后端數(shù)據(jù)庫壓力過大導(dǎo)致數(shù)據(jù)庫服務(wù)過載或崩潰。
存儲(chǔ)層memcached、redis可以用來作為緩存服務(wù)提升訪問性能,在某些場景下redis也可以作為主要存儲(chǔ),比如推薦系統(tǒng),訪問量大,但是對于數(shù)據(jù)事務(wù)性要求不高,作為唯一存儲(chǔ)時(shí),需要注意緩存系統(tǒng)不穩(wěn)定或性能問題,需要服務(wù)本地緩存通用數(shù)據(jù)以作為兜底,避免緩存不可用導(dǎo)致服務(wù)不可用。
存儲(chǔ)層mysql、oracle作為關(guān)系型數(shù)據(jù)存儲(chǔ),使用場景是訂單、支付等事務(wù)強(qiáng)需求場景下,這種場景下分布式nosql數(shù)據(jù)庫對事務(wù)支持本身是不夠好的,比不上傳統(tǒng)數(shù)據(jù)庫,這種場景下mysql、oracle是最優(yōu)選擇。
存儲(chǔ)層hbase是一種基于列式存儲(chǔ),方便基于列進(jìn)行數(shù)據(jù)分析,分析單列不需要涉及所有列性能會(huì)快很多。但不適合基于行查出所有列,因?yàn)榱写鎯?chǔ)在不同位置,根據(jù)行取出所有列性能會(huì)比較差。
以及基于Rocksdb類分布式KV存儲(chǔ),存儲(chǔ)基于磁盤可以進(jìn)行持久化存儲(chǔ),優(yōu)點(diǎn)存儲(chǔ)量大并且能進(jìn)行持久化,缺點(diǎn)是基于磁盤以及數(shù)據(jù)結(jié)構(gòu)等多種因素,隨機(jī)讀性能沒有redis那么高。所以適合寫多讀少場景。可以結(jié)合redis緩存,作為redis后端的持久化存儲(chǔ)。
ES作為全文檢索服務(wù),適合于全文檢索服務(wù),Mysql就不適合作為全文檢索使用,因?yàn)橐黄恼拢總€(gè)詞都有可能被檢索,全部構(gòu)建索引索引會(huì)非常非常大。
java語言棧Spring是事實(shí)上Bean管理、以及托管整體配置工業(yè)標(biāo)準(zhǔn)。jdk是java基石,支持java運(yùn)行以及龐大工具包,來支撐業(yè)務(wù)快速開發(fā)。jdk中容器、多線程、鎖、io、nio等。方便應(yīng)用開發(fā)實(shí)現(xiàn)高性能網(wǎng)絡(luò)、磁盤等設(shè)備操作,方便應(yīng)用使用多線程技術(shù)。
每一種技術(shù)都有它的適用場景,架構(gòu)設(shè)計(jì)時(shí)要根據(jù)實(shí)際情況去用,有很多trade off的事情,不要強(qiáng)行復(fù)用,要根據(jù)實(shí)際場景無論是編程語言,還是存儲(chǔ),還是消息隊(duì)列技術(shù)等,都要根據(jù)實(shí)際場景去合理使用,才能發(fā)揮出技術(shù)最大價(jià)值。
架構(gòu)設(shè)計(jì)需要有全局感、整體感,需要從總體上對技術(shù)進(jìn)行把握
如果本文對你有幫助,別忘記給我個(gè)3連 ,點(diǎn)贊,轉(zhuǎn)發(fā),評論,
咱們下期見!答案獲取方式:已贊 已評 已關(guān)~
學(xué)習(xí)更多JAVA知識(shí)與技巧,關(guān)注與私信博主(03)