<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          架構(gòu)概述:架構(gòu)演化、模式與核心要素

          共 6640字,需瀏覽 14分鐘

           ·

          2021-05-18 21:54



          -     前言    -


          如何打造一個高可用、高性能、易擴(kuò)展、可伸縮且安全的應(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ù)。

          初始階段

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

          應(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ù)邏輯,因此需要更快更強(qiáng)大的CPU;數(shù)據(jù)庫服務(wù)器需要快速磁盤檢索和數(shù)據(jù)緩存,因此需要更快的硬盤和更大的內(nèi)存;文件服務(wù)器需要存儲大量用戶上傳的文件,因此需要更大的硬盤。

          使用緩存

          隨著用戶逐漸增多,網(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ù),如圖所示。



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


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

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

          只要能通過增加一臺服務(wù)器的方式改善負(fù)載壓力,就可以以同樣的方式持續(xù)增加服務(wù)器不斷改善系統(tǒng)性能,從而實(shí)現(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)站的瓶頸。

          讀寫分離

          網(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ù)庫的這一功能,實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離,從而改善數(shù)據(jù)庫負(fù)載壓力,如圖所示。


          應(yīng)用服務(wù)器在寫數(shù)據(jù)的時候,訪問主數(shù)據(jù)庫,主數(shù)據(jù)庫通過主從復(fù)制機(jī)制將數(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)用透明。

          反向代理和CDN

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


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

          使用分布式文件系統(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ù)器上。


          使用NoSQL和搜索引擎

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

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

          大型網(wǎng)站為了應(yīng)對日益復(fù)雜的業(yè)務(wù)場景,通過使用分而治之的手段將整個網(wǎng)站業(yè)務(wù)分成不同的產(chǎn)品線。具體到技術(shù)上,**將一個網(wǎng)站拆分成許多不同的應(yīng)用,每個應(yīng)用獨(dú)立部署維護(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)的完整系。

          分布式服務(wù)

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

          既然每一個應(yīng)用系統(tǒng)都需要執(zhí)行許多相同的業(yè)務(wù)操作,比如用戶管理、商品管理等,那么可以將這些共用的業(yè)務(wù)提取出來,獨(dú)立部署。由這些可復(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ù)問題都得以解決。



          -     架構(gòu)模式    -


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

          分層

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

          在網(wǎng)站架構(gòu)中,通常將應(yīng)用系統(tǒng)分為應(yīng)用層、服務(wù)層、數(shù)據(jù)層,如下圖所示。
          通過分層,可以更好地將一個龐大的軟件系統(tǒng)切分成不同的部分,便于分工合作開發(fā)和維護(hù)。各層之間具有一定的獨(dú)立性,只要維持調(diào)用接口不變,各層可以根據(jù)具體問題獨(dú)立演化發(fā)展而不需要其他層必須做出相應(yīng)調(diào)整。

          但是分層架構(gòu)也有一些挑戰(zhàn),就是必須合理規(guī)劃層次邊界和接口,在開發(fā)過程中,嚴(yán)格遵循分層架構(gòu)的約束,禁止跨層調(diào)用及逆向調(diào)用。在實(shí)踐中,大的分層結(jié)構(gòu)內(nèi)部還可以繼續(xù)分層。

          分層架構(gòu)是邏輯上的,三層結(jié)構(gòu)可以部署在同一個物理機(jī)器上。但是隨著網(wǎng)站業(yè)務(wù)的發(fā)展,必然需要對已經(jīng)分層的模塊分離部署,使網(wǎng)站擁有更多的計算資源以應(yīng)對越來越多的用戶訪問。

          分割

          分層是將軟件在橫向方面進(jìn)行切分,分割則是在縱向方面對軟件進(jìn)行切分。

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

          分布式

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

          但分布式在解決網(wǎng)站高并發(fā)問題的同時也帶來了其他問題。典型的有下面幾點(diǎn):

          1. 意味著服務(wù)調(diào)用必須通過網(wǎng)絡(luò),這可能會對性能造成比較嚴(yán)重的影響。
          2. 服務(wù)器越多,宕機(jī)的概率也就越大,造成的服務(wù)不可用可能會導(dǎo)致很多應(yīng)用不可訪問,使網(wǎng)站可用性降低。
          3. 數(shù)據(jù)在分布式的環(huán)境中保持?jǐn)?shù)據(jù)一致性非常困難,分布式事務(wù)也難以保證。
          4. 系統(tǒng)依賴錯綜復(fù)雜,開發(fā)管理維護(hù)困難。

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

          集群

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

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

          緩存

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

          使用緩存有兩個前提條件,一是數(shù)據(jù)訪問熱點(diǎn)不均衡,某些數(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è)計的。

          異步

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

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

          • 提高系統(tǒng)可用性。消費(fèi)者服務(wù)器發(fā)生故障,數(shù)據(jù)會在消息隊列服務(wù)器中存儲堆積,生產(chǎn)者服務(wù)器可以繼續(xù)處理業(yè)務(wù)請求,系統(tǒng)整體表現(xiàn)無故障。
          • 消費(fèi)者服務(wù)器恢復(fù)正常后,繼續(xù)處理消息隊列中的數(shù)據(jù)。
          • 加快網(wǎng)站響應(yīng)速度。處在業(yè)務(wù)處理前端的生產(chǎn)者服務(wù)器在處理完業(yè)務(wù)請求后,將數(shù)據(jù)寫入消息隊列,不需要等待消費(fèi)者服務(wù)器處理就可以返回,響應(yīng)延遲減少。
          • 消除并發(fā)訪問高峰。用戶訪問網(wǎng)站是隨機(jī)的,存在訪問高峰和低谷。
            使用消息隊列將突然增加的訪問請求數(shù)據(jù)放入消息隊列中,等待消費(fèi)者服務(wù)器依次處理,就不會對整個網(wǎng)站負(fù)載造成太大壓力。

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

          冗余

          網(wǎng)站需要7×24小時連續(xù)運(yùn)行,但是服務(wù)器隨時可能出現(xiàn)故障,特別是服務(wù)器規(guī)模比較大時,出現(xiàn)某臺服務(wù)器宕機(jī)是必然事件。

          要想保證在服務(wù)器宕機(jī)的情況下網(wǎng)站依然可以繼續(xù)服務(wù),不丟失數(shù)據(jù),就需要一定程度的服務(wù)器冗余運(yùn)行,數(shù)據(jù)冗余備份,這樣當(dāng)某臺服務(wù)器宕機(jī)時,可以將其上的服務(wù)和數(shù)據(jù)訪問轉(zhuǎn)移到其他機(jī)器上。

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

          自動化與安全

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

          系統(tǒng)在安全架構(gòu)方面也積累了許多模式:通過密碼和手機(jī)校驗碼進(jìn)行身份認(rèn)證;登錄、交易等操作需要對網(wǎng)絡(luò)通信進(jìn)行加密,網(wǎng)站服務(wù)器上存儲的敏感數(shù)據(jù)如用戶信息等也進(jìn)行加密處理;為了防止機(jī)器人程序濫用網(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)險控制。


          -     架構(gòu)核心要素    -


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

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

          性能

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

          主要的方式可以總結(jié)如下:
          • 瀏覽器:
            瀏覽器緩存、使用頁面壓縮、合理布局頁面、減少Cookie傳輸?shù)?/span>
          • CDN和反向代理
          • 本地緩存和分布式緩存
          • 異步消息隊列
          • 應(yīng)用層:
            服務(wù)器集群
          • 代碼層:
            多線程、改善內(nèi)存管理等
          • 數(shù)據(jù)層:
            索引、緩存、SQL優(yōu)化等,以及合理使用NoSQL數(shù)據(jù)庫


          可用性

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

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

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

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

          伸縮性

          衡量架構(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ù)庫之外實(shí)現(xiàn),通過路由分區(qū)等手段將部署有多個數(shù)據(jù)庫的服務(wù)器組成一個集群。至于大部分NoSQL數(shù)據(jù)庫產(chǎn)品,由于其先天就是為海量數(shù)據(jù)而生,因此其對伸縮性的支持通常都非常好。

          擴(kuò)展性

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

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

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

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

          安全性

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


          作者:與昊

          來源:segmentfault.com/a/1190000039969525

          瀏覽 49
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天摸天天射 | 亚洲人成网77777色在线播放 | 午夜性爱视频在线播放 | 国产美女做爱A片是免费 | 亚洲日韩国产剧情自制在线观看 |