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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

架构概述之架构演化、模式与核心要素

發(fā)布時間:2025/3/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 架构概述之架构演化、模式与核心要素 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如何打造一個高可用、高性能、易擴展、可伸縮且安全的應(yīng)用系統(tǒng)?相信這是困擾著無數(shù)開發(fā)者的難題,在這里我們以一個網(wǎng)站為例,來討論一下如何做好大型應(yīng)用系統(tǒng)的架構(gòu)設(shè)計。

架構(gòu)演化發(fā)展歷程

大型網(wǎng)站的技術(shù)挑戰(zhàn)主要來自于龐大的用戶,高并發(fā)的訪問和海量的數(shù)據(jù)。

1

? ?

初始階段

大型網(wǎng)站都是從小型網(wǎng)站發(fā)展而來,小型網(wǎng)站最開始時沒有太多人訪問,只需要一臺服務(wù)器就綽綽有余,這時的網(wǎng)站架構(gòu)如圖所示。

2

? ?

應(yīng)用和數(shù)據(jù)分離

隨著業(yè)務(wù)的發(fā)展,一臺服務(wù)器逐漸不能滿足需求:越來越多的用戶訪問導(dǎo)致性能越來越差,越來越多的數(shù)據(jù)導(dǎo)致存儲空間不足。這時就需要將應(yīng)用和數(shù)據(jù)分離。

應(yīng)用和數(shù)據(jù)分離后整個網(wǎng)站使用三臺服務(wù)器:應(yīng)用服務(wù)器、文件服務(wù)器和數(shù)據(jù)庫服務(wù)器,如圖所示。

這三臺服務(wù)器對硬件資源的要求各不相同,應(yīng)用服務(wù)器需要處理大量的業(yè)務(wù)邏輯,因此需要更快更強大的 CPU;數(shù)據(jù)庫服務(wù)器需要快速磁盤檢索和數(shù)據(jù)緩存,因此需要更快的硬盤和更大的內(nèi)存;文件服務(wù)器需要存儲大量用戶上傳的文件,因此需要更大的硬盤。

3

? ?

使用緩存

隨著用戶逐漸增多,網(wǎng)站又一次面臨挑戰(zhàn):數(shù)據(jù)庫壓力太大導(dǎo)致訪問延遲,進(jìn)而影響整個網(wǎng)站的性能,用戶體驗受到影響。網(wǎng)站訪問遵循二八定律:80%的業(yè)務(wù)訪問集中在 20%的數(shù)據(jù)上。既然大部分的業(yè)務(wù)訪問集中在一小部分?jǐn)?shù)據(jù)上,那么如果把這一小部分?jǐn)?shù)據(jù)緩存在內(nèi)存中,是不是就可以減少數(shù)據(jù)庫的訪問壓力,提高整個網(wǎng)站的數(shù)據(jù)訪問速度,改善數(shù)據(jù)庫的寫入性能了呢?

網(wǎng)站使用的緩存可以分為兩種:緩存在應(yīng)用服務(wù)器上的本地緩存和緩存在專門的分布式緩存服務(wù)器上的遠(yuǎn)程緩存。本地緩存的訪問速度更快一些,但是受應(yīng)用服務(wù)器內(nèi)存限制,其緩存數(shù)據(jù)量有限,而且會出現(xiàn)和應(yīng)用程序爭用內(nèi)存的情況。遠(yuǎn)程分布式緩存可以使用集群的方式,部署大內(nèi)存的服務(wù)器作為專門的緩存服務(wù)器,可以在理論上做到不受內(nèi)存容量限制的緩存服務(wù),如圖所示。

4

? ?

使用應(yīng)用服務(wù)器集群

使用緩存后,數(shù)據(jù)訪問壓力得到有效緩解,但是單一應(yīng)用服務(wù)器能夠處理的請求連接有限,在網(wǎng)站訪問高峰期,應(yīng)用服務(wù)器成為整個網(wǎng)站的瓶頸。

使用集群是解決高并發(fā)、海量數(shù)據(jù)問題的常用手段。當(dāng)一臺服務(wù)器的處理能力、存儲空間不足時,不要企圖去換更強大的服務(wù)器,對大型網(wǎng)站而言,不管多么強大的服務(wù)器,都滿足不了網(wǎng)站持續(xù)增長的業(yè)務(wù)需求。這種情況下,更恰當(dāng)?shù)淖龇ㄊ窃黾右慌_服務(wù)器分擔(dān)原有服務(wù)器的訪問及存儲壓力。

只要能通過增加一臺服務(wù)器的方式改善負(fù)載壓力,就可以以同樣的方式持續(xù)增加服務(wù)器不斷改善系統(tǒng)性能,從而實現(xiàn)系統(tǒng)的可伸縮性。應(yīng)用服務(wù)器集群是可伸縮集群架構(gòu)設(shè)計中較為簡單成熟的一種,如圖所示。

通過負(fù)載均衡調(diào)度服務(wù)器,可將來自用戶瀏覽器的訪問請求分發(fā)到應(yīng)用服務(wù)器集群中的任何一臺服務(wù)器上,如果有更多的用戶,就在集群中加入更多的應(yīng)用服務(wù)器,使應(yīng)用服務(wù)器的負(fù)載壓力不再成為整個網(wǎng)站的瓶頸。

5

? ?

讀寫分離

網(wǎng)站在使用緩存后,使絕大部分?jǐn)?shù)據(jù)讀操作訪問都可以不通過數(shù)據(jù)庫就能完成,但是仍有一部分讀操作和全部的寫操作需要訪問數(shù)據(jù)庫,在網(wǎng)站的用戶達(dá)到一定規(guī)模后,數(shù)據(jù)庫因為負(fù)載壓力過高而成為網(wǎng)站的瓶頸。

目前大部分的主流數(shù)據(jù)庫都提供主從熱備功能,通過配置兩臺數(shù)據(jù)庫主從關(guān)系,可以將一臺數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)更新同步到另一臺服務(wù)器上。網(wǎng)站利用數(shù)據(jù)庫的這一功能,實現(xiàn)數(shù)據(jù)庫讀寫分離,從而改善數(shù)據(jù)庫負(fù)載壓力,如圖所示。

應(yīng)用服務(wù)器在寫數(shù)據(jù)的時候,訪問主數(shù)據(jù)庫,主數(shù)據(jù)庫通過主從復(fù)制機制將數(shù)據(jù)更新同步到從數(shù)據(jù)庫,這樣當(dāng)應(yīng)用服務(wù)器讀數(shù)據(jù)的時候,就可以通過從數(shù)據(jù)庫獲得數(shù)據(jù)。為了便于應(yīng)用程序訪問讀寫分離后的數(shù)據(jù)庫,通常在應(yīng)用服務(wù)器端使用專門的數(shù)據(jù)訪問模塊,使數(shù)據(jù)庫讀寫分離對應(yīng)用透明。

6

? ?

反向代理和 CDN

隨著業(yè)務(wù)不斷發(fā)展,用戶規(guī)模越來越大,不同地區(qū)的用戶訪問網(wǎng)站時,速度差別也極大。為了提供更好的用戶體驗,網(wǎng)站需要加速網(wǎng)站訪問速度。主要手段有使用 CDN 和反向代理,如圖所示。

CDN 和反向代理的基本原理都是緩存,區(qū)別在于 CDN 部署在網(wǎng)絡(luò)提供商的機房,使用戶在請求網(wǎng)站服務(wù)時,可以從距離自己最近的網(wǎng)絡(luò)提供商機房獲取數(shù)據(jù);而反向代理則部署在網(wǎng)站的中心機房,當(dāng)用戶請求到達(dá)中心機房后,首先訪問的服務(wù)器是反向代理服務(wù)器,如果反向代理服務(wù)器中緩存著用戶請求的資源,就將其直接返回給用戶。

7

? ?

使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng)

數(shù)據(jù)庫經(jīng)過讀寫分離后,從一臺服務(wù)器拆分成兩臺服務(wù)器,但是隨著網(wǎng)站業(yè)務(wù)的發(fā)展依然不能滿足需求,這時需要使用分布式數(shù)據(jù)庫。文件系統(tǒng)也是一樣,需要使用分布式文件系統(tǒng),如圖所示。

分布式數(shù)據(jù)庫是網(wǎng)站數(shù)據(jù)庫拆分的最后手段,只有在單表數(shù)據(jù)規(guī)模非常龐大的時候才使用。不到不得已時,網(wǎng)站更常用的數(shù)據(jù)庫拆分手段是業(yè)務(wù)分庫,將不同業(yè)務(wù)的數(shù)據(jù)庫部署在不同的物理服務(wù)器上。

8

? ?

使用 NoSQL 和搜索引擎

隨著網(wǎng)站業(yè)務(wù)越來越復(fù)雜,對數(shù)據(jù)存儲和檢索的需求也越來越復(fù)雜,網(wǎng)站需要采用一些非關(guān)系數(shù)據(jù)庫技術(shù)如 NoSQL 和非數(shù)據(jù)庫查詢技術(shù)如搜索引擎,如圖所示。

9

? ?

業(yè)務(wù)拆分

大型網(wǎng)站為了應(yīng)對日益復(fù)雜的業(yè)務(wù)場景,通過使用分而治之的手段將整個網(wǎng)站業(yè)務(wù)分成不同的產(chǎn)品線。具體到技術(shù)上,**將一個網(wǎng)站拆分成許多不同的應(yīng)用,每個應(yīng)用獨立部署維護(hù)。應(yīng)用之間可以通過一個超鏈接建立關(guān)系(在首頁上的導(dǎo)航鏈接每個都指向不同的應(yīng)用地址),也可以通過消息隊列進(jìn)行數(shù)據(jù)分發(fā),當(dāng)然最多的還是通過訪問同一個數(shù)據(jù)存儲系統(tǒng)來構(gòu)成一個關(guān)聯(lián)的完整系統(tǒng)。

10

? ?

分布式服務(wù)

隨著業(yè)務(wù)拆分越來越小,存儲系統(tǒng)越來越龐大,應(yīng)用系統(tǒng)的整體復(fù)雜度呈指數(shù)級增加,部署維護(hù)越來越困難。

既然每一個應(yīng)用系統(tǒng)都需要執(zhí)行許多相同的業(yè)務(wù)操作,比如用戶管理、商品管理等,那么可以將這些共用的業(yè)務(wù)提取出來,獨立部署。由這些可復(fù)用的業(yè)務(wù)連接數(shù)據(jù)庫,提供共用業(yè)務(wù)服務(wù),而應(yīng)用系統(tǒng)只需要管理用戶界面,通過分布式服務(wù)調(diào)用共用業(yè)務(wù)服務(wù)完成具體業(yè)務(wù)操作,如圖所示。

大型網(wǎng)站的架構(gòu)演化到這里,基本上大多數(shù)的技術(shù)問題都得以解決。

11

? ?

架構(gòu)模式

為了解決應(yīng)用系統(tǒng)面臨的高并發(fā)訪問、海量數(shù)據(jù)處理、高可靠運行等一系列問題與挑戰(zhàn),大型互聯(lián)網(wǎng)公司在實踐中提出了許多解決方案,以實現(xiàn)高性能、高可用、易伸縮、可擴展、安全等各種技術(shù)架構(gòu)目標(biāo)。這些解決方案又被更多公司重復(fù)使用,從而逐漸形成架構(gòu)模式。

12

? ?

分層

分層是企業(yè)應(yīng)用系統(tǒng)中最常見的一種架構(gòu)模式,將系統(tǒng)在橫向維度上切分成幾個部分,每個部分負(fù)責(zé)一部分相對比較單一的職責(zé),然后通過上層對下層的依賴和調(diào)用組成一個完整的系統(tǒng)。

通過分層,可以更好地將一個龐大的軟件系統(tǒng)切分成不同的部分,便于分工合作開發(fā)和維護(hù)。各層之間具有一定的獨立性,只要維持調(diào)用接口不變,各層可以根據(jù)具體問題獨立演化發(fā)展而不需要其他層必須做出相應(yīng)調(diào)整。但是分層架構(gòu)也有一些挑戰(zhàn),就是必須合理規(guī)劃層次邊界和接口,在開發(fā)過程中,嚴(yán)格遵循分層架構(gòu)的約束,禁止跨層調(diào)用及逆向調(diào)用。在實踐中,大的分層結(jié)構(gòu)內(nèi)部還可以繼續(xù)分層。分層架構(gòu)是邏輯上的,三層結(jié)構(gòu)可以部署在同一個物理機器上。但是隨著網(wǎng)站業(yè)務(wù)的發(fā)展,必然需要對已經(jīng)分層的模塊分離部署,使網(wǎng)站擁有更多的計算資源以應(yīng)對越來越多的用戶訪問。在網(wǎng)站架構(gòu)中,通常將應(yīng)用系統(tǒng)分為應(yīng)用層、服務(wù)層、數(shù)據(jù)層,如下圖所示。

13

? ?

分割

分層是將軟件在橫向方面進(jìn)行切分,分割則是在縱向方面對軟件進(jìn)行切分。網(wǎng)站越大,功能越復(fù)雜,服務(wù)和數(shù)據(jù)處理的種類也越多。將這些不同的功能和服務(wù)分割開來,包裝成高內(nèi)聚低耦合的模塊單元,一方面有助于軟件的開發(fā)和維護(hù);另一方面,便于不同模塊的分布式部署,提高網(wǎng)站的并發(fā)處理能力和功能擴展能力。大型網(wǎng)站分割的粒度可能會很小。比如在應(yīng)用層,將不同業(yè)務(wù)進(jìn)行分割,例如將購物、論壇、搜索、廣告分割成不同的應(yīng)用,由獨立的團(tuán)隊負(fù)責(zé),部署在不同的服務(wù)器上。

14

? ?

分布式

對于大型網(wǎng)站,分層和分割的一個主要目的是為了切分后的模塊便于分布式部署,即將不同模塊部署在不同的服務(wù)器上,通過遠(yuǎn)程調(diào)用協(xié)同工作。分布式意味著可以使用更多的資源完成同樣的功能,能夠處理的并發(fā)訪問和數(shù)據(jù)量也更大。但分布式在解決網(wǎng)站高并發(fā)問題的同時也帶來了其他問題。典型的有下面幾點:

  • 意味著服務(wù)調(diào)用必須通過網(wǎng)絡(luò),這可能會對性能造成比較嚴(yán)重的影響。

  • 服務(wù)器越多,宕機的概率也就越大,造成的服務(wù)不可用可能會導(dǎo)致很多應(yīng)用不可訪問,使網(wǎng)站可用性降低。

  • 數(shù)據(jù)在分布式的環(huán)境中保持?jǐn)?shù)據(jù)一致性非常困難,分布式事務(wù)也難以保證。

  • 系統(tǒng)依賴錯綜復(fù)雜,開發(fā)管理維護(hù)困難。

  • 因此分布式設(shè)計要根據(jù)具體情況量力而行。常用的分布式方案有:分布式服務(wù)、分布式數(shù)據(jù)庫、分布式計算、分布式配置、分布式鎖和分布式文件系統(tǒng)等。

    15

    ? ?

    集群

    使用分布式雖然已經(jīng)將分層和分割后的模塊獨立部署,但是對于用戶訪問集中的模塊,還需要將獨立部署的服務(wù)器集群化,即多臺服務(wù)器部署相同應(yīng)用構(gòu)成一個集群,通過負(fù)載均衡設(shè)備共同對外提供服務(wù)。

    因為服務(wù)器集群有更多服務(wù)器提供相同服務(wù),因此可以提供更好的并發(fā)性,當(dāng)有更多用戶訪問的時候,只需要向集群中加入新的機器即可。同時當(dāng)某臺服務(wù)器發(fā)生故障時,負(fù)載均衡設(shè)備或者系統(tǒng)的失效轉(zhuǎn)移機制會將請求轉(zhuǎn)發(fā)到集群中其他服務(wù)器上,提高系統(tǒng)的可用性。

    16

    ? ?

    緩存

    緩存就是將數(shù)據(jù)存放在距離計算最近的位置以加快處理速度。緩存是改善軟件性能的第一手段,在復(fù)雜的軟件設(shè)計中,緩存幾乎無處不在。比如常見的反向代理、Redis(未開啟持久化)、CDN 等。

    使用緩存有兩個前提條件,一是數(shù)據(jù)訪問熱點不均衡,某些數(shù)據(jù)會被更頻繁的訪問,這些數(shù)據(jù)應(yīng)該放在緩存中;二是數(shù)據(jù)在某個時間段內(nèi)有效,不會很快過期,否則緩存的數(shù)據(jù)就會因已經(jīng)失效而產(chǎn)生臟讀,影響結(jié)果的正確性。

    緩存除了可以加快數(shù)據(jù)訪問速度,還可以減輕后端應(yīng)用和數(shù)據(jù)存儲的負(fù)載壓力,網(wǎng)站數(shù)據(jù)庫幾乎都是按照有緩存的前提進(jìn)行負(fù)載能力設(shè)計的。

    17

    ? ?

    異步

    應(yīng)用系統(tǒng)的一個重要目標(biāo)是降低耦合性。系統(tǒng)解耦的手段除了前面提到的分層、分割、分布式等,還有一個重要手段是異步,業(yè)務(wù)之間的消息傳遞不是同步調(diào)用,而是將一個業(yè)務(wù)操作分成多個階段,每個階段之間通過共享數(shù)據(jù)的方式異步執(zhí)行進(jìn)行協(xié)作。

    異步架構(gòu)是典型的生產(chǎn)者消費者模式,兩者不存在直接調(diào)用,只要保持?jǐn)?shù)據(jù)結(jié)構(gòu)不變,彼此功能實現(xiàn)可以隨意變化而不互相影響,這對網(wǎng)站擴展新功能非常便利。除此之外,使用異步消息隊列還有如下優(yōu)點:

    • 提高系統(tǒng)可用性。消費者服務(wù)器發(fā)生故障,數(shù)據(jù)會在消息隊列服務(wù)器中存儲堆積,生產(chǎn)者服務(wù)器可以繼續(xù)處理業(yè)務(wù)請求,系統(tǒng)整體表現(xiàn)無故障。

    • 消費者服務(wù)器恢復(fù)正常后,繼續(xù)處理消息隊列中的數(shù)據(jù)。

    • 加快網(wǎng)站響應(yīng)速度。處在業(yè)務(wù)處理前端的生產(chǎn)者服務(wù)器在處理完業(yè)務(wù)請求后,將數(shù)據(jù)寫入消息隊列,不需要等待消費者服務(wù)器處理就可以返回,響應(yīng)延遲減少。

    • 消除并發(fā)訪問高峰。用戶訪問網(wǎng)站是隨機的,存在訪問高峰和低谷。

    • 使用消息隊列將突然增加的訪問請求數(shù)據(jù)放入消息隊列中,等待消費者服務(wù)器依次處理,就不會對整個網(wǎng)站負(fù)載造成太大壓力。

    但需要注意的是,使用異步方式處理業(yè)務(wù)可能會對用戶體驗、業(yè)務(wù)流程造成影響,需要網(wǎng)站產(chǎn)品設(shè)計方面的支持。

    18

    ? ?

    冗余

    網(wǎng)站需要 7×24 小時連續(xù)運行,但是服務(wù)器隨時可能出現(xiàn)故障,特別是服務(wù)器規(guī)模比較大時,出現(xiàn)某臺服務(wù)器宕機是必然事件。要想保證在服務(wù)器宕機的情況下網(wǎng)站依然可以繼續(xù)服務(wù),不丟失數(shù)據(jù),就需要一定程度的服務(wù)器冗余運行,數(shù)據(jù)冗余備份,這樣當(dāng)某臺服務(wù)器宕機時,可以將其上的服務(wù)和數(shù)據(jù)訪問轉(zhuǎn)移到其他機器上。

    訪問和負(fù)載很小的服務(wù)也必須部署至少兩臺服務(wù)器構(gòu)成一個集群,其目的就是通過冗余實現(xiàn)服務(wù)高可用。數(shù)據(jù)庫除了定期存檔進(jìn)行冷備份外,還需要對數(shù)據(jù)庫進(jìn)行主從分離,實時同步實現(xiàn)熱備份。

    19

    ? ?

    自動化與安全

    目前應(yīng)用系統(tǒng)的自動化架構(gòu)設(shè)計主要集中在發(fā)布運維方面。包括自動化發(fā)布、自動化代碼管理、自動化測試、自動化安全監(jiān)測、自動化部署、自動化監(jiān)控、自動化告警、自動化失效轉(zhuǎn)移與恢復(fù)、自動化降級和自動化分配資源等。

    系統(tǒng)在安全架構(gòu)方面也積累了許多模式:通過密碼和手機校驗碼進(jìn)行身份認(rèn)證;登錄、交易等操作需要對網(wǎng)絡(luò)通信進(jìn)行加密,網(wǎng)站服務(wù)器上存儲的敏感數(shù)據(jù)如用戶信息等也進(jìn)行加密處理;為了防止機器人程序濫用網(wǎng)絡(luò)資源攻擊網(wǎng)站,網(wǎng)站使用驗證碼進(jìn)行識別;對于常見的用于攻擊網(wǎng)站的 XSS 攻擊、SQL 注入、進(jìn)行編碼轉(zhuǎn)換等相應(yīng)處理;對于垃圾信息、敏感信息進(jìn)行過濾;對交易轉(zhuǎn)賬等重要操作根據(jù)交易模式和交易信息進(jìn)行風(fēng)險控制。

    20

    ? ?

    架構(gòu)核心要素

    關(guān)于什么是架構(gòu),維基百科是這樣定義的:“有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個方面的設(shè)計”。

    一般說來,除了功能需求外,軟件架構(gòu)還需要關(guān)注性能、可用性、伸縮性、擴展性和安全性這 5 個要素。

    21

    ? ?

    性能

    性能是網(wǎng)站的一個重要指標(biāo),任何軟件架構(gòu)設(shè)計方案都必須考慮可能會帶來的性能問題。也正是因為性能問題幾乎無處不在,所以優(yōu)化網(wǎng)站性能的手段也非常多,主要的方式可以總結(jié)如下:

    • 瀏覽器:瀏覽器緩存、使用頁面壓縮、合理布局頁面、減少 Cookie 傳輸?shù)?/p>

    • CDN 和反向代理

    • 本地緩存和分布式緩存

    • 異步消息隊列

    • 應(yīng)用層:服務(wù)器集群

    • 代碼層:多線程、改善內(nèi)存管理等

    • 數(shù)據(jù)層:索引、緩存、SQL 優(yōu)化等,以及合理使用 NoSQL 數(shù)據(jù)庫

    22

    ? ?

    可用性

    網(wǎng)站高可用的主要手段是冗余,應(yīng)用部署在多臺服務(wù)器上同時提供訪問,數(shù)據(jù)存儲在多臺服務(wù)器上互相備份,任何一臺服務(wù)器宕機都不會影響應(yīng)用的整體可用,也不會導(dǎo)致數(shù)據(jù)丟失。

    對于應(yīng)用服務(wù)器而言,多臺應(yīng)用服務(wù)器通過負(fù)載均衡設(shè)備組成一個集群共同對外提供服務(wù),任何一臺服務(wù)器宕機,只需把請求切換到其他服務(wù)器即可,但是一個前提條件是應(yīng)用服務(wù)器上不能保存請求的會話信息。

    對于存儲服務(wù)器,需要對數(shù)據(jù)進(jìn)行實時備份,當(dāng)服務(wù)器宕機時需要將數(shù)據(jù)訪問轉(zhuǎn)移到可用的服務(wù)器上,并進(jìn)行數(shù)據(jù)恢復(fù)以保證繼續(xù)有服務(wù)器宕機的時候數(shù)據(jù)依然可用。

    除了運行環(huán)境,網(wǎng)站的高可用還需要軟件開發(fā)過程的質(zhì)量保證。通過預(yù)發(fā)布驗證、自動化測試、自動化發(fā)布、灰度發(fā)布等手段,減少將故障引入線上環(huán)境的可能。

    23

    ? ?

    伸縮性

    衡量架構(gòu)伸縮性的主要標(biāo)準(zhǔn)有:是否可以用多臺服務(wù)器構(gòu)建集群,是否容易向集群中添加新的服務(wù)器,加入新的服務(wù)器后是否可以提供和原來的服務(wù)器無差別的服務(wù),集群中可容納的總的服務(wù)器數(shù)量是否有限制。對于應(yīng)用服務(wù)器集群,通過使用合適的負(fù)載均衡設(shè)備就可以向集群中不斷加入服務(wù)器。對于緩存服務(wù)器集群,需要使用高效的緩存路由算法,避免加入新服務(wù)器導(dǎo)致路由大面積失效。

    關(guān)系數(shù)據(jù)庫很難做到大規(guī)模集群的可伸縮性,因此關(guān)系數(shù)據(jù)庫的集群伸縮性方案必須在數(shù)據(jù)庫之外實現(xiàn),通過路由分區(qū)等手段將部署有多個數(shù)據(jù)庫的服務(wù)器組成一個集群。至于大部分 NoSQL 數(shù)據(jù)庫產(chǎn)品,由于其先天就是為海量數(shù)據(jù)而生,因此其對伸縮性的支持通常都非常好。

    24

    ? ?

    擴展性

    衡量架構(gòu)擴展性的主要標(biāo)準(zhǔn)就是不同產(chǎn)品之間是否很少耦合。在網(wǎng)站增加新的業(yè)務(wù)產(chǎn)品時,是否可以實現(xiàn)對現(xiàn)有產(chǎn)品透明無影響,不需要任何改動或者很少改動既有業(yè)務(wù)功能就可以上線新產(chǎn)品。

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

    事件驅(qū)動架構(gòu)在網(wǎng)站通常利用消息隊列實現(xiàn),將用戶請求和其他業(yè)務(wù)事件構(gòu)造成消息發(fā)布到消息隊列,消息的處理者作為消費者從消息隊列中獲取消息進(jìn)行處理。通過這種方式將消息產(chǎn)生和消息處理分離開來,可以透明地增加新的消息生產(chǎn)者任務(wù)或者新的消息消費者任務(wù)。

    分布式服務(wù)則是將業(yè)務(wù)和可復(fù)用服務(wù)分離開來,通過分布式服務(wù)框架調(diào)用。新增產(chǎn)品可以通過調(diào)用可復(fù)用的服務(wù)實現(xiàn)自身的業(yè)務(wù)邏輯,而對現(xiàn)有產(chǎn)品沒有任何影響。可復(fù)用服務(wù)升級變更的時候,也可以通過提供多版本服務(wù)對應(yīng)用實現(xiàn)透明升級,不需要強制應(yīng)用同步變更。

    25

    ? ?

    安全性

    網(wǎng)站的安全架構(gòu)就是保護(hù)網(wǎng)站不受惡意訪問和攻擊,保護(hù)網(wǎng)站的重要數(shù)據(jù)不被竊取。衡量網(wǎng)站安全架構(gòu)的標(biāo)準(zhǔn)就是針對現(xiàn)存和潛在的各種攻擊與竊密手段,是否有可靠的應(yīng)對策略。

    總結(jié)

    以上是生活随笔為你收集整理的架构概述之架构演化、模式与核心要素的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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