一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

 zhuxrgf 2021-01-09
Java思享匯2020-07-20 20:02:52

架構(gòu)目的和指標(biāo)

架構(gòu)目的:

架構(gòu)設(shè)計的主要目的是為了解決軟件系統(tǒng)復(fù)雜度帶來的問題,是用最小的人力成本來滿足需求的開發(fā)和響應(yīng)需求的變化,用最小的運行成本來保障軟件的運行。讓軟件達(dá)到“高內(nèi)聚、松耦合”,從而使軟件具有:

  • 易擴(kuò)展——易于增加新的功能

  • 更強(qiáng)壯——不容易被粗心的程序員破壞

  • 可移植——能夠在多樣的環(huán)境下運行

  • 更簡單——容易理解、容易維護(hù)

設(shè)計目標(biāo):

  • 可擴(kuò)展性(Scalable)

  • 可靠性(Reliable),支持灰度發(fā)布,異地容錯

  • 可伸縮 (Extensible),支持水平擴(kuò)展和垂直增強(qiáng)

  • 可維護(hù)性(Maintainable),一是排除現(xiàn)有的錯誤,二是新需求可反映到現(xiàn)有系統(tǒng)中去。

  • 安全性(Secure)

  • 可定制化(Customizable)

  • 客戶體驗(Customer Experience),必須易于使用。

架構(gòu)的方法論

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

面向?qū)ο?/p>

設(shè)計原則-SOLID

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

設(shè)計原則-SOLID

設(shè)計模式的六大原則有:

  • Single Responsibility Principle:單一職責(zé)原則

  • Open Closed Principle:開閉原則

  • Liskov Substitution Principle:里氏替換原則

  • Law of Demeter:迪米特法則

  • Interface Segregation Principle:接口隔離原則

  • Dependence Inversion Principle:依賴倒置原則

把這六個原則的首字母聯(lián)合起來( L 算做一個)就是 SOLID (solid,穩(wěn)定的),其代表的含義就是這六個原則結(jié)合使用的好處:建立穩(wěn)定、靈活、健壯的設(shè)計。

單一責(zé)任原則:

當(dāng)需要修改某個類的時候原因有且只有一個(THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE)。換句話說就是讓一個類只做一種類型責(zé)任,當(dāng)這個類需要承擔(dān)其他類型的責(zé)任的時候,就需要分解這個類。

開放封閉原則:

軟件實體應(yīng)該是可擴(kuò)展,而不可修改的。也就是說,對擴(kuò)展是開放的,而對修改是封閉的。這個原則是諸多面向?qū)ο缶幊淘瓌t中最抽象、最難理解的一個。

里氏替換原則:

當(dāng)一個子類的實例應(yīng)該能夠替換任何其他類的實例時,它們之間才具有is-A關(guān)系。

依賴倒置原則:

  1. 高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象

  2. 抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象

接口分離原則:

不能強(qiáng)迫用戶去依賴那些他們不使用的接口。換句話說,使用多個專門的接口比使用單一的總接口總要好。

設(shè)計模式類型

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

設(shè)計模式類型

CAP定理

CAP是Consistency、Availablity和Partition-tolerance的縮寫。分別是指:

  • 一致性(Consistency):每次讀操作都能保證返回的是最新數(shù)據(jù);

  • 可用性(Availablity):任何一個沒有發(fā)生故障的節(jié)點,會在合理的時間內(nèi)返回一個正常的結(jié)果;

  • 分區(qū)容忍性(Partition-tolerance):當(dāng)節(jié)點間出現(xiàn)網(wǎng)絡(luò)分區(qū),照樣可以提供服務(wù)。

1.一致性:一致性是指數(shù)據(jù)在多個副本之間是否能夠保持一致的特性。假如現(xiàn)在的多個節(jié)點中的數(shù)據(jù)是保持一致的,當(dāng)執(zhí)行完某一個更新操作之后,應(yīng)當(dāng)要保證系統(tǒng)的數(shù)據(jù)然后處于一致性的狀態(tài)。對于一個將數(shù)據(jù)副本分布在不同的分布式節(jié)點上,如果對第一個結(jié)點的數(shù)據(jù)進(jìn)行了更新的操作,并且更新成功之后,卻沒有讓第二個節(jié)點得到相應(yīng)的更新。當(dāng)外部系統(tǒng)再去調(diào)用第二個節(jié)點時,獲取到的依然是原始的數(shù)據(jù),這就是分布式數(shù)據(jù)不一致的情況了。在分布式系統(tǒng)中,如果能夠做到針對一個數(shù)據(jù)項更新操作執(zhí)行成功之后,所有的用戶都可以讀取到最新的值,那么這樣的系統(tǒng)就被認(rèn)為是具有強(qiáng)一致性的。

2.可用性:可用性是指系統(tǒng)提供的服務(wù)必須一直處于可用的狀態(tài),對于用戶的每一個操作請求總是能夠在有限的時間內(nèi)返回結(jié)果。有限的時間內(nèi):對于用戶的一個操作請求,系統(tǒng)必須能夠在指定的時間內(nèi)返回對應(yīng)的結(jié)果。如果超過了這個時間,就認(rèn)為系統(tǒng)是不可用的。返回結(jié)果是可用性的一個非常重要的指標(biāo),它要求系統(tǒng)在完成對用戶請求的處理后,返回一個正常的響應(yīng)結(jié)果。正常的響應(yīng)結(jié)果包含成功或失敗,而不是一個讓用戶迷惑的結(jié)果。

3.分區(qū)容錯性:分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障的時候,仍然需要對外提供滿足一致性和可用性的服務(wù)。

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

CAP

一個分布式系統(tǒng)既然不能同時滿足上述的三個需求,因此在進(jìn)行對cap定理的應(yīng)用時,我們就需要去拋棄一項。

①選擇CA

放棄分區(qū)容錯性,比較簡單的方式就是把所有的數(shù)據(jù)都放在一個分布式節(jié)點上。那不就又成為了單機(jī)應(yīng)用了嗎?

②選擇CP

放棄可用性,一旦出現(xiàn)網(wǎng)絡(luò)故障,受到影響的服務(wù)需要再等待一定時間,因為系統(tǒng)處于不可用的狀態(tài)。

③選擇AP

放棄一致性,這里所指的一致性是強(qiáng)一致性,但是確保最終一致性。是很多分布式系統(tǒng)的選擇。

小結(jié):從cap的定理可以看出,分區(qū)容錯性是一個最基本的要求,因為既然是一個分布式系統(tǒng),必然要部署到兩個或兩個以上的節(jié)點上,否則,就不是分布式系統(tǒng),因此我們只能在一致性和可用性尋求平衡。

BASE理論

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

BASE理論

base是Basically Available(基本可用)、Soft state(軟狀態(tài))和Eventually consistent(最終一致性)三個短語的簡寫。base是對cap中一致性和可用性的權(quán)衡的結(jié)果。是根據(jù)cao理論演變而來,核心思想是即使無法做到強(qiáng)一致性,但是每個應(yīng)用根據(jù)自身的業(yè)務(wù)特點,采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達(dá)到最終與執(zhí)行。

①基本可用

基本可用指的是分布式系統(tǒng)出現(xiàn)了不可預(yù)知故障的時候,允許損失部分可用性。響應(yīng)時間合理延長,功能上適當(dāng)做服務(wù)降級。

②弱狀態(tài)

弱狀態(tài)指的是允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該中間狀態(tài)不會影響系統(tǒng)的整體可用性,即允許在各個節(jié)點數(shù)據(jù)同步時存在延時。

③最終一致性

最終一致性強(qiáng)調(diào)的是系統(tǒng)中所有的數(shù)據(jù)副本,在經(jīng)過一段時間的同步之后,最終能夠達(dá)到一個一致的狀態(tài)。因此,最終一致性的本質(zhì)是需要系統(tǒng)保證數(shù)據(jù)最終能夠達(dá)到一致。而不需要實時保證系統(tǒng)數(shù)據(jù)的一致性。

AKF架構(gòu)原則

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

AFK立方體

X軸擴(kuò)展

所謂X軸代表把同樣的工作或數(shù)據(jù)鏡像分配給多個實體。換句話說就是復(fù)制服務(wù)然后負(fù)載均衡。這也是最簡單最基礎(chǔ)的擴(kuò)展。

示例:我有個網(wǎng)站,一開始部署在服務(wù)器A上對外服務(wù),隨著訪問人數(shù)增加,一臺服務(wù)器的性能無法支持,于是我又在服務(wù)器上B上同樣部署了網(wǎng)站,然后在前面部署了Apache或者Nginx來分流訪問,這就是最基本的X軸擴(kuò)展。

Y軸擴(kuò)展

針對X軸擴(kuò)展產(chǎn)生的問題,我們需要將大型服務(wù)進(jìn)行拆解,把分割的工作指責(zé)和數(shù)據(jù)分配給多個實體這也就是Y軸擴(kuò)展。也是微服務(wù)理論誕生的基礎(chǔ)。

示例:我把網(wǎng)站的注冊登錄模塊,首頁新聞?wù)故灸K,后臺維護(hù)模塊拆成了多個微服務(wù)進(jìn)行部署維護(hù)。 X軸擴(kuò)展和Y軸擴(kuò)展并不矛盾,是可以結(jié)合的,比如我發(fā)現(xiàn)新聞?wù)故灸K壓力很大,我可以對新聞?wù)故灸K進(jìn)行X軸擴(kuò)展,部署多個鏡像來分擔(dān)壓力。

Z軸擴(kuò)展

Z軸代表按照客戶、客戶的需要、位置或者價值分割或分配工作職責(zé)。一般在超大型系統(tǒng)中,架構(gòu)設(shè)計就會面臨Z軸擴(kuò)展的需求。

示例:網(wǎng)站一開始建設(shè)在上海數(shù)據(jù)中心,面向全國服務(wù)。隨著公司業(yè)務(wù)的增長,西安的客戶大量增加,但是訪問上海數(shù)據(jù)中心速度很慢,所以公司考慮在西安建立數(shù)據(jù)中心來應(yīng)對用戶訪問,這就是Z軸擴(kuò)展。

康威定律

  • 第一定律:企業(yè)溝通方式會通過系統(tǒng)設(shè)計表達(dá)出來

  • 第二定律:再多的時間也沒辦法讓任務(wù)完美至極,但總有時間能將它完成

  • 第三定律:線型系統(tǒng)和線型組織架構(gòu)間有潛在的異質(zhì)同態(tài)特性

  • 第四定律:大系統(tǒng)比小系統(tǒng)更適用于任務(wù)分解

架構(gòu)思維

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

架構(gòu)思維圖

架構(gòu)的變遷

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

架構(gòu)的變遷圖

單體架構(gòu):最簡單架構(gòu)風(fēng)格所有代碼在一個項目中,團(tuán)隊所有成員,可隨時任意修改一段代碼或增加一些新的代碼。

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

單體架構(gòu)圖

Web應(yīng)用程序發(fā)展的早期,大部分web工程師將所有的功能模塊打包到一起并放在一 個web容器中運行,所有功能模塊使用同一個數(shù)據(jù)庫。

特點:

1、所有的功能集成在一個項目工程中。

2、所有的功能打在一個war包部署到服務(wù)器。

3、通過部署應(yīng)用集群和數(shù)據(jù)庫集群來提高系統(tǒng)的性能。

優(yōu)點:

1、項目架構(gòu)簡單,前期開發(fā)成本低,周期短,小型項目的首選。

2、開發(fā)效率高,模塊之間交互采用本地方法調(diào)用。

3、容易部署,運維成本小,直接打包到web容器即可運行。

4、容易測試,無依賴,在本地就可以啟動調(diào)試完整的系統(tǒng)。

缺點:

1、全部功能集成在一個工程中,對于大型項目不易擴(kuò)展及維護(hù)。

2、版本迭代速度逐漸變慢,修改就要將整個應(yīng)用全部編譯。

3、無法針對某業(yè)務(wù)按需伸縮。

垂直架構(gòu):分層是典型的對復(fù) 雜系統(tǒng)進(jìn)行結(jié)構(gòu)化 思考和抽象聚合的 通用方法,也符合金字塔原理。MVC是一個常見的三層架構(gòu)模式。

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

垂直架構(gòu)圖

針對單體架構(gòu)的不足,為了適應(yīng)大型項目的開發(fā)需求,許多公司將一個單體系統(tǒng)按業(yè) 務(wù)垂直拆分為若干系統(tǒng),系統(tǒng)之間通過網(wǎng)絡(luò)交互來完成用戶的業(yè)務(wù)處理,每個系統(tǒng)可 分布式部署,這種架構(gòu)稱為分布式架構(gòu)。

特點:

1、按業(yè)務(wù)垂直拆分成一個一個的單體系統(tǒng),此架構(gòu)也稱為垂直架構(gòu)。

2、系統(tǒng)與系統(tǒng)之間的存在數(shù)據(jù)冗余,耦合性較大,如上圖中三個項目都存在客戶信息。

3、系統(tǒng)之間的接口多為實現(xiàn)數(shù)據(jù)同步,如上圖中三個項目要同步客戶信息。

優(yōu)點:

1、通過垂直拆分,每個子系統(tǒng)變成小型系統(tǒng),功能簡單,前期開發(fā)成本低,周期短。

2、每個子系統(tǒng)可按需伸縮。

3、每個子系統(tǒng)可采用不同的技術(shù)。

缺點:

1、子系統(tǒng)之間存在數(shù)據(jù)冗余、功能冗余,耦合性高。

2、按需伸縮粒度不夠,對同一個子系統(tǒng)中的不同的業(yè)務(wù)無法實現(xiàn),比如訂單管理和用戶管理。

SOA架構(gòu):面向服務(wù)架構(gòu)是一種建設(shè)企業(yè)IT生態(tài)系統(tǒng)的架構(gòu)指導(dǎo)思想。SOA關(guān)注服務(wù),服務(wù)是最基本的業(yè)務(wù)功能單元, 服務(wù)之間通過ESB通信。

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

SOA架構(gòu)圖

SOA是一種面向服務(wù)的架構(gòu),基于分布式架構(gòu),它將不同業(yè)務(wù)功能按服務(wù)進(jìn)行拆分, 并通過這些服務(wù)之間定義良好的接口和協(xié)議聯(lián)系起來。

特點:

1、基于SOA的架構(gòu)思想,將重復(fù)公用的功能抽取為組件,以服務(wù)的方式向各個系統(tǒng)提供服務(wù)。

2、各個系統(tǒng)與服務(wù)之間采用webservice、rpc等方式進(jìn)行通信。

3、ESB企業(yè)服務(wù)總線作為系統(tǒng)與服務(wù)之間通信的橋梁。

優(yōu)點:

1、將重復(fù)的功能抽取為服務(wù),提高開發(fā)效率,提高系統(tǒng)的可重用性、可維護(hù)性。

2、可以針對不同服務(wù)的特點按需伸縮。

3、采用ESB減少系統(tǒng)中的接口耦合。

缺點:

1、系統(tǒng)與服務(wù)的界限模糊,會導(dǎo)致抽取的服務(wù)的粒度過大,系統(tǒng)與服務(wù)之間耦合性高。

2、雖然使用了ESB,但是服務(wù)的接口協(xié)議不固定,種類繁多,不利于系統(tǒng)維護(hù)。

微服務(wù)架構(gòu):微服務(wù)架構(gòu)風(fēng)格以實現(xiàn)一組小服務(wù)的方式來開發(fā)一個獨立的應(yīng)用系統(tǒng)方法。其中每個小服務(wù)運行在獨立進(jìn)程。服務(wù)間通過ApiGW機(jī)制通信。

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

微服務(wù)架構(gòu)圖

基于SOA架構(gòu)的思想,為了滿足移動互聯(lián)網(wǎng)對大型項目及多客戶端的需求,對服務(wù)層進(jìn)行細(xì)粒度的拆分,所拆分的每個服務(wù)只完成某個特定的業(yè)務(wù)功能,比如訂單服務(wù)只實現(xiàn)訂單相關(guān)的業(yè)務(wù),用戶服務(wù)實現(xiàn)用戶管理相關(guān)的業(yè)務(wù)等等,服務(wù)的粒度很小,所以稱為微服務(wù)架構(gòu)。

特點:

1、服務(wù)層按業(yè)務(wù)拆分為一個一個的微服務(wù)。

2、微服務(wù)的職責(zé)單一。

3、微服務(wù)之間采用RESTful、RPC等輕量級協(xié)議傳輸。

4、有利于采用前后端分離架構(gòu)。

優(yōu)點:

1、服務(wù)拆分粒度更細(xì),有利于資源重復(fù)利用,提高開發(fā)效率。

2、可以更加精準(zhǔn)的制定每個服務(wù)的優(yōu)化方案,按需伸縮。

3、適用于互聯(lián)網(wǎng)時代,產(chǎn)品迭代周期更短。

缺點:

1、開發(fā)的復(fù)雜性增加,因為一個業(yè)務(wù)流程需要多個微服務(wù)通過網(wǎng)絡(luò)交互來完成。

2、微服務(wù)過多,服務(wù)治理成本高,不利于系統(tǒng)維護(hù)。

微服務(wù)架構(gòu)2.0-Service Mesh

程序員蛻變?yōu)榧軜?gòu)師必須要知道的「架構(gòu)理論」

Service Mesh

優(yōu)點:

1、屏蔽分布式系統(tǒng)通信的復(fù)雜性(負(fù)載均衡、服務(wù)發(fā)現(xiàn)、認(rèn)證授權(quán)、監(jiān)控追蹤、流量控 制等等),服務(wù)只用關(guān)注業(yè)務(wù)邏輯。

2、真正的與語言無關(guān),服務(wù)可以用任何語言編寫,只需和Service Mesh通信即可。

3、對應(yīng)用透明,Service Mesh組件可以單獨升級。

缺點:

1、邊緣網(wǎng)絡(luò),IoT場景:資源非常有限,不適合啟動太多Sidecar。

2、FaaS場景:應(yīng)用自身足夠輕量,甚至比Sidecar還要輕量。

3、Serverless場景:ScaletoZero時,對冷啟動速度有嚴(yán)格要求,Sidecar的啟動和初始化可能拖累應(yīng)用啟動速度。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲一区二区欧美激情| 国产精品视频一区二区秋霞 | 美女被后入视频在线观看| 91天堂免费在线观看| 国产又粗又猛又大爽又黄同志 | 亚洲欧洲一区二区综合精品| 欧美日韩精品人妻二区三区| 99热九九在线中文字幕| 欧美日韩亚洲综合国产人| 欧美成人免费夜夜黄啪啪| 日韩欧美高清国内精品| 大香蕉久草网一区二区三区| 久久99青青精品免费| 五月婷婷六月丁香狠狠| 日本不卡在线视频你懂的 | 日韩欧美一区二区黄色| 亚洲国产四季欧美一区| 日韩精品一级片免费看| 老鸭窝精彩从这里蔓延| 99久久国产综合精品二区| 成人午夜视频精品一区| 国产不卡免费高清视频| 91亚洲国产成人久久| 日韩在线视频精品视频| 久久碰国产一区二区三区| 久热人妻中文字幕一区二区| 色综合久久六月婷婷中文字幕| 老司机精品视频免费入口| 老鸭窝精彩从这里蔓延| 亚洲精品小视频在线观看| 麻豆国产精品一区二区| 国产精品欧美激情在线观看| 国产成人精品国产成人亚洲| 老司机精品视频在线免费| 97精品人妻一区二区三区麻豆| 草草视频精品在线观看| 色小姐干香蕉在线综合网| 国产亚洲精品俞拍视频福利区| 东京热一二三区在线免| 日韩日韩欧美国产精品| 中文人妻精品一区二区三区四区|