日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

架构要素

發(fā)布時間:2024/1/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 架构要素 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  

架構(gòu)中五個重要的核心指標(biāo),分別是性能、可用性、伸縮性、擴展性和安全性這5個架構(gòu)指標(biāo)

?

一、性能

?

性能就是核心要素之一,不然我為什么架構(gòu)設(shè)計?隨隨便便一個lowlow的系統(tǒng)上線就好了。所以性能優(yōu)化是很多小公司賣不去過的坎。這么說吧,當(dāng)然優(yōu)化網(wǎng)站性能的手段也非常多:

(1)web前端性能優(yōu)化:

  • 瀏覽器訪問優(yōu)化(瀏覽器緩存、頁面壓縮傳輸、合理布局頁面、減少Cookie傳輸)

    • 減少http請求。避免建立太多通訊鏈路。將js、css、圖片文件盡可能合并。避免太多請求。同時,對于系統(tǒng)的后端請求也盡可能進行合理的設(shè)計,來避免出現(xiàn)太多交互。

    • 使用瀏覽器的緩存。http頭設(shè)置Cache-Control和Expires.js文件名比如可以帶時間戳。一旦有更新則更新時間戳,否則緩存;同時盡量避免同一時間更新大量靜態(tài)資源。

    • 對靜態(tài)資源進行壓縮。

    • css放置在頁面最上方,js放下最下面。以提前進行css渲染。同時避免js帶來的頁面阻塞。但需要case by case。比如頁面dom節(jié)點需要依賴js生成,則可視情況改變文件位置。

    • 減少cookie傳輸。同時讓靜態(tài)資源有獨立域名,發(fā)送靜態(tài)資源請求時候不發(fā)送cookie。以此減少傳輸代價。cookie可以通過document.cookie獲取。

    2.CDN加速

    • 緩存圖片、文件、CSS以及script腳本。但是pc上的CDN加速效果要好于移動端。經(jīng)過調(diào)研發(fā)現(xiàn),last-mile的延遲越高,CDN的相對有效性越差(具體見文章為什么CDN對移動客戶端加速“沒有”效果)。

    3.反向代理

    • 可以提供七層負載均衡(http請求進行均衡策略),并且可以提供靜態(tài)資源的緩存,請求轉(zhuǎn)發(fā),防止網(wǎng)絡(luò)攻擊等。比較流行的有nginx。

    (2)應(yīng)用服務(wù)器性能優(yōu)化:

    如果請求靜態(tài)界面不卡了,但是動態(tài)數(shù)據(jù)還是卡,說明MySQL處理的請求太多了,可以使用服務(wù)器本地緩存和分布式緩存,也可以通過異步操作方式來加快響應(yīng),在高并發(fā)請求的情況下,可以將多臺應(yīng)用服務(wù)器組成一個集群共同對外服務(wù),提高整體處理能力,改善性能,具體如下:

    1.分布式緩存(網(wǎng)站性能優(yōu)化的第一定律:優(yōu)先考慮使用緩存優(yōu)化性能)

  • 一般來說,存入cache的數(shù)據(jù)的讀寫比在2:1以上;且應(yīng)該是熱點數(shù)據(jù)。

  • 需要考慮如果采用緩存則可能帶來的數(shù)據(jù)短期內(nèi)的不一致,或者如果實時更新緩存可能帶來的性能和資源開銷。

  • 需要考慮cache一旦失效,大量請求直接命中DB可能帶來的服務(wù)性能雪崩。所以可以對cache采用集群化部署,以此避免丟失過多數(shù)據(jù)造成服務(wù)壓力陡增。

  • 對于熱點數(shù)據(jù)考慮進行緩存的預(yù)熱加載。比如高峰期來臨前,先將熱點數(shù)據(jù)提前存入緩存。以此提高高峰期的服務(wù)性能。

  • 為了避免惡意攻擊,一直query不存在的數(shù)據(jù),導(dǎo)致cache無法命中而頻繁訪問DB,可以將不存在的數(shù)據(jù)也進行緩存并定期清理。同時有機制對惡意請求進行識別和封禁。

  • 分布式緩存應(yīng)該去中心化并集中管理。通過不同實例間的互不通信和同構(gòu)來保證可擴展性,并降低系統(tǒng)復(fù)雜度。

  • 2.異步化(任何可以晚點做的事情都應(yīng)該晚點再做,感覺像懶加載)

    通過分布式消息隊列來實現(xiàn)削峰的目的。通過業(yè)務(wù)配合技術(shù)來解決問題。比如12306的排隊。

    3.集群

    采用集群也是服務(wù)虛擬化的一個體現(xiàn)。用以避免單點問題,同時提供更加高可用,高性能的服務(wù)。

    4.代碼優(yōu)化

  • 多線程中,如果是密集型計算,線程數(shù)不宜超過CPU核數(shù)。如果是IO處理,則線程數(shù)=[任務(wù)執(zhí)行時間/(任務(wù)執(zhí)行時間-IO等待時間)] * CPU核數(shù)。除此之外,我們應(yīng)該將對象設(shè)計成無狀態(tài)對象,多采用局部對象,適當(dāng)將鎖細化。

  • 進行資源復(fù)用。比如采用單例模式,比如采用連接池。

  • 合理設(shè)置JVM參數(shù),以最大程度避免不合理的full gc。

  • 5.存儲性能優(yōu)化

    關(guān)系型數(shù)據(jù)庫的索引采用B+樹進行實現(xiàn)。而很多的nosql數(shù)據(jù)庫則采用了LSM樹進行存儲。LSM在內(nèi)存中保留最新增刪改查的數(shù)據(jù),直到內(nèi)存無法放下,則與磁盤的下一級LSM樹進行merge。所以對于寫操作較多,而讀操作更多的是查詢最近寫入數(shù)據(jù)的場景,其性能遠高于b+樹;采用HDFS結(jié)合map reduce進行海量數(shù)據(jù)存儲和分析。其能自動進行并發(fā)訪問和冗余備份,具有很高的可靠性。其等于是實現(xiàn)了RAID的功能。

    (3)數(shù)據(jù)庫層優(yōu)化:

  • 數(shù)據(jù)庫層其實是最脆弱的一層,一般在應(yīng)用設(shè)計時在上游就需要把請求攔截掉,數(shù)據(jù)庫層只承擔(dān)“能力范圍內(nèi)”的訪問請求,所以,我們通過在服務(wù)層引入隊列和緩存,讓最底層的數(shù)據(jù)庫高枕無憂。但是如果請求激增,還是有大量的查詢壓力到MySQL,這個時候就要想辦法解決MySQL的瓶頸了,這時候可用使用索引、緩存、SQL性能優(yōu)化等手段,還可以使用NoSQL數(shù)據(jù)庫來優(yōu)化數(shù)據(jù)模型、存儲結(jié)構(gòu)等。詳細內(nèi)容可關(guān)注后查看我的【mysql優(yōu)化專題】,共12篇,已完結(jié)。

  • (4)衡量網(wǎng)站性能的指標(biāo)(重要的有響應(yīng)時間、TPS、系統(tǒng)性能計數(shù)器等,通過這些指標(biāo)以確定系統(tǒng)設(shè)計是否達到目標(biāo))

  • 響應(yīng)時間。

  • 并發(fā)數(shù)。如果暫時沒有對應(yīng)的準(zhǔn)確監(jiān)控,針對不同業(yè)務(wù)模型,可以有不一樣的并發(fā)數(shù)的預(yù)估。我們的系統(tǒng)進行峰值并發(fā)數(shù)預(yù)估的話,有一種比較粗略的計算方式,即全天請求平均每秒并發(fā)數(shù) * 3。但也需要case by case。

  • 吞吐量。比較常見的有QPS(每秒查詢數(shù))、HPS(每秒http請求數(shù))以及TPS(每秒處理事務(wù)數(shù))。

  • 性能計數(shù)器。包括系統(tǒng)負載、線程數(shù)、cpu、內(nèi)存使用情況等。可以用top、free、cat /proc/cpuinfo等命令來查看。系統(tǒng)負載的定義為當(dāng)前被CPU執(zhí)行的線程數(shù)/等待被CPU執(zhí)行的總線程數(shù)。當(dāng)其值與邏輯cpu個數(shù)相同時是最佳狀態(tài),其代表所有的資源都被最大限度地被利用。但也有人認為當(dāng)負載為0.7倍邏輯CPU數(shù)時最佳。

  • (5)高可用:包括高可用的應(yīng)用、高可用的服務(wù)、高可用的數(shù)據(jù)和服務(wù)于高可用的監(jiān)控等,關(guān)于高可用,我還是決定開個單章講解

    二、安全性

    互聯(lián)網(wǎng)是開放的,任何人在任何地方都可以訪問網(wǎng)站。網(wǎng)站的安全架構(gòu)就是保護網(wǎng)站不受惡意訪問和攻擊,保護網(wǎng)站的重要數(shù)據(jù)不被竊取。

    安全的5個要素:機密性、完整性、可用性、可控性和可審查性。

    1、安全系統(tǒng)架構(gòu)

    1)安全服務(wù)是指計算機網(wǎng)絡(luò)提供的安全防護措施,包括認證服務(wù)、訪問控制、數(shù)據(jù)機密性服務(wù)、數(shù)據(jù)完整性服務(wù)和不可否認服務(wù)。

    2)特定的安全機制是用來實施安全服務(wù)的機制,包括加密機制、數(shù)據(jù)簽名機制、訪問控制機制、數(shù)據(jù)完整性機制、認證交換機制、流量填充機制、路由控制機制和公證機制。

    3)普遍性的安全機制不是為任何特定的服務(wù)而特設(shè)的,屬于安全管理方面,分為可信功能度、安全標(biāo)記、事件檢測、安全審計跟蹤和安全恢復(fù)。

    2、安全保護等級

    1)用戶自主保護級

    2)系統(tǒng)審計保護級

    3)安全標(biāo)記保護級

    4)結(jié)構(gòu)化保護級

    5)訪問驗證保護級

    衡量網(wǎng)站安全架構(gòu)的標(biāo)準(zhǔn)就是針對現(xiàn)存和潛在的各種攻擊和竊密手段,是否有可靠的應(yīng)對策略。

    三、可用性

    衡量一個系統(tǒng)架構(gòu)設(shè)計是否滿足高可用的目標(biāo),就是假設(shè)系統(tǒng)中任何一臺或者多臺服務(wù)器宕機時,以及出現(xiàn)各種不可預(yù)期的問題時,系統(tǒng)整體是否依然可用。

    一般就三個手段、冗余、集群化、分布式。

    網(wǎng)站高可用的主要手段就是冗余,應(yīng)用部署在多臺服務(wù)器上同時提供服務(wù),數(shù)據(jù)存儲在多臺服務(wù)器上相互備份,任何一臺服務(wù)器都不會影響應(yīng)用的整體可以,通常的實現(xiàn)手段即把多臺服務(wù)器通過負載均衡設(shè)備組成一個集群。

    四、擴展性

    擴展性(Extensibility)指對現(xiàn)有系統(tǒng)影響最小的情況下,系統(tǒng)功能可持續(xù)擴展或提升的能力。表現(xiàn)在系統(tǒng)基礎(chǔ)設(shè)施穩(wěn)定不需要經(jīng)常變更,應(yīng)用之間較少依賴和耦合,當(dāng)系統(tǒng)增加新功能時,不需要對現(xiàn)有系統(tǒng)的結(jié)構(gòu)和代碼進行修改。這個沒啥好說。擴展性依賴于前期良好的架構(gòu)設(shè)計。合理業(yè)務(wù)邏輯抽象,水平/垂直切割分布式化等等。

    網(wǎng)站可擴展架構(gòu)的主要手段是事件驅(qū)動架構(gòu)和分布式服務(wù)。

    事件驅(qū)動通常利用消息隊列實現(xiàn),通過這種方式將消息生產(chǎn)和處理邏輯分隔開。

    服務(wù)器服務(wù)則是將業(yè)務(wù)和可復(fù)用服務(wù)分離開來,通過分布式服務(wù)框架調(diào)用。新增加產(chǎn)品可用通過調(diào)用可復(fù)用的服務(wù)來實現(xiàn)自身的業(yè)務(wù)邏輯,而對現(xiàn)有產(chǎn)品沒有任何影響。

    對此,《可擴展的藝術(shù)》一書提出了一個更加系統(tǒng)的可擴展模型—— AKF可擴展立方 (Scalability Cube)。這個立方體中沿著三個坐標(biāo)軸設(shè)置分別為:X、Y、Z。

    • X軸擴展 —— 關(guān)注水平的數(shù)據(jù)和服務(wù)克隆,也就是前文提到的“加機器解決問題”

    • Y軸擴展 —— 關(guān)注應(yīng)用中職責(zé)的劃分,比如數(shù)據(jù)類型,交易執(zhí)行類型的劃分

    • Z軸擴展 —— 關(guān)注服務(wù)和數(shù)據(jù)的優(yōu)先級劃分,如分地域劃分

    整個擴展模型,用下圖來表示,其中原點代表完全無擴展的狀態(tài)。

    五、伸縮性

    服務(wù)盡量同構(gòu)。DB、cache在考慮分布式時盡量提前設(shè)計好擴展方案。也可以采用一些主流的對水平伸縮支持較好的nosql、memcached、hbase等。

    (1)橫向分離:將不同的業(yè)務(wù)模塊分離部署,實現(xiàn)系統(tǒng)的伸縮性;

    (2)縱向分離:將業(yè)務(wù)處理流程上得不同部分分離部署,實現(xiàn)系統(tǒng)的伸縮性;

    轉(zhuǎn)載于:https://www.cnblogs.com/zhuguangtao/p/8940367.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的架构要素的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。