1. 獨立系統(tǒng)架構(gòu) 微服務(wù)原則

        共 3641字,需瀏覽 8分鐘

         ·

        2021-08-03 23:11

        點擊上方“程序員大白”,選擇“星標(biāo)”公眾號

        重磅干貨,第一時間送達

        獨立系統(tǒng)架構(gòu)

        簡介

        獨立系統(tǒng)架構(gòu)(ISA,Independent Systems Architecture)是基于經(jīng)驗的最佳實踐的集合,特別是微服務(wù)和自包含系統(tǒng)以及這些項目所面臨的挑戰(zhàn)。

        通常采用微服務(wù)的項目都未能成功。這套最佳實踐可確保避免常見的陷阱,并實現(xiàn)微服務(wù)所承諾的優(yōu)勢。

        但是,ISA原則并不總是適用 - 有關(guān)詳細信息,請參閱常見問題

        術(shù)語

        這些原則中對于不能在系統(tǒng)中妥協(xié)且必須存在于系統(tǒng)中的方面使用“必須”?!皯?yīng)該”用于具有很多好處的原則,但在某些情況下可以省略。這里描述的原則談?wù)撘粋€系統(tǒng)。通常在企業(yè)的IT環(huán)境中會包含許多系統(tǒng)。,每個系統(tǒng)可能使用不同的原則構(gòu)建,甚至可能采用完全不同的方法。

        原則

        原則一:模塊

        模塊是一個存在已久的概念,一個系統(tǒng)由多個模塊構(gòu)成。

        系統(tǒng)必須分為提供接口模塊。只能通過這些接口訪問其他模塊。因此,模塊不能直接依賴于其他模塊的實現(xiàn)細節(jié),例如:數(shù)據(jù)庫中的內(nèi)部數(shù)據(jù)表示。其余原則定義了如何實現(xiàn)模塊,以及ISA與其他模塊化方法有何不同。

        長期以來模塊化被認為是處理大型復(fù)雜軟件系統(tǒng)的重要工具。使用術(shù)語“模塊”重用了這些想法。模塊意味著例如:高凝聚力和低耦合作為架構(gòu)的目標(biāo),或單一責(zé)任原則。信息隱藏也意味著任何其他模塊都不得訪問數(shù)據(jù)和數(shù)據(jù)庫。因此,沒有必要明確說明這些想法。

        原則二:宏架構(gòu)和微架構(gòu)(The Micro Architecture)

        系統(tǒng)必須具有兩個明確分離的架構(gòu)決策級別:

        • 宏架構(gòu)包含涵蓋所有模塊的決策。所有進一步的原則都是宏架構(gòu)的一部分。

        • 微架構(gòu)考慮可以針對每個模塊單獨進行的決策

        這里提出的架構(gòu)允許大量自由。但是,所有模塊仍然需要顯示為一個整體。因此需要在宏架構(gòu)層面上做出一些決策。一經(jīng)定義,宏和微架構(gòu)清楚地說明了在哪個級別上必須決定什么。目標(biāo)是在宏架構(gòu)級別上盡可能少地定義,以便在沒有充分理由的情況下不受限制。并非每個細節(jié)都應(yīng)在宏架構(gòu)中定義。此外,宏架構(gòu)應(yīng)該專注于從長遠來看相當(dāng)穩(wěn)定的決策,而微架構(gòu)決策則不那么穩(wěn)定。宏架構(gòu)影響所有模塊,因此更難改變。所以不應(yīng)該過于頻繁地改變它。

        原則三:容器

        模塊必須作為單獨的進程,容器或虛擬機實現(xiàn),以最大限度地提高獨立性并實現(xiàn)宏架構(gòu)和微架構(gòu)之間的分離。


        將模塊分成進程,容器或虛擬機允許如每個模塊在不同平臺上以不同的編程語言實現(xiàn)。因此,技術(shù)決策僅針對一個模塊。此外,這種分離意味著每個模塊都可以在沒有任何其他模塊崩潰的情況下崩潰。如果所有模塊只是一個過程的一部分,那么這將是不同的。這有助于彈性能力。

        原則四:通信集成

        必須對系統(tǒng)的集成通信選項的選擇進行限制和標(biāo)準(zhǔn)化??梢允褂猛交虍惒酵ㄐ?,并且/或者在UI級別上進行集成。通信必須使用一組有限的協(xié)議,如:RESTful HTTP或消息傳遞。為每個集成選項使用一個協(xié)議可能是有意義的。

        模塊被劃分為多個進程。因此無法使用本地方法調(diào)用集成它們,但需要不同的集成方法。標(biāo)準(zhǔn)意味著創(chuàng)建真正的系統(tǒng)。如果每個模塊的集成方式均不相同,則很難將集成結(jié)果視為一個系統(tǒng)。乍看似乎只有一種融合方式就足夠了。但事實上,集成通常會在UI層和邏輯層上完成。這已經(jīng)需要兩種不同類型的集成。在同一系統(tǒng)中可能存在不同的情況,例如,同步和異步集成可能很有用。通信定義了模塊用于交互的底層協(xié)議。當(dāng)然,通信和集成之間存在關(guān)聯(lián)。但是例如REST允許同步和異步集成。與集成一樣,一種通信選擇可能還不夠。對于通信和集成,原則僅考慮系統(tǒng)內(nèi)模塊之間的通信。與其他系統(tǒng)的通信可以使用一組不同的集成和通信技術(shù)來完成。有時,通信和集成已經(jīng)定義,因此系統(tǒng)無法更改。系統(tǒng)的公共接口也不同于架構(gòu)的觀點:更難于更改,因為更改將影響其他系統(tǒng)。

        原則五:身份認證&元數(shù)據(jù)

        元數(shù)據(jù),例如 對于身份認證,必須標(biāo)準(zhǔn)化。否則,用戶需要登錄每個微服務(wù)。這可以使用例如:與每個調(diào)用/請求一起傳輸?shù)牧钆啤F渌纠赡馨ǜ櫿{(diào)用的跟蹤ID及其通過微服務(wù)的相關(guān)調(diào)用。

        用戶不必登錄每個模塊,而是登錄到整個系統(tǒng)。因此,傳輸身份驗證信息(包括主體及其角色)也是標(biāo)準(zhǔn)化的一部分。授權(quán)與領(lǐng)域邏輯密切相關(guān),應(yīng)該在每個模塊中完成。因此,每個模塊都可以允許訪問或特定操作。除認證信息之外的其他元數(shù)據(jù)也可能需要標(biāo)準(zhǔn)化。例如,跟蹤微服務(wù)之間的調(diào)用,必須傳輸調(diào)用和所有相關(guān)調(diào)用的唯一ID。

        原則六:獨立的持續(xù)交付流水線

        每個模塊必須有自己獨立的持續(xù)交付流水線。測試是持續(xù)交付流水線的一部分,因此模塊必須獨立測試。


        只有每個模塊都可以自行部署,才能實現(xiàn)真正的獨立性。架構(gòu)只是一個先決條件。換句話說:如果架構(gòu)允許獨立模塊,但它們?nèi)匀恍枰鳛橐粋€整體進行部署,那么該方法僅提供所需獨立性的一部分,但仍然需要花費大量精力。在某些情況下,存在共享集成測試階段。每個模塊最終傳播到此階段并進行獨立測試,即所有其他模塊必須等到該模塊通過集成測試階段。這是部署流水線中的依賴性瓶頸的示例:在模塊通過階段之前,其他流水線無法繼續(xù)。必須避免這種情況,例如通過使用消費者驅(qū)動的契約測試和通過Mock來測試模塊之間的接口,或通過分離集成測試階段。

        原則七:標(biāo)準(zhǔn)化運維

        運營應(yīng)該標(biāo)準(zhǔn)化。這包括配置,部署,日志分析,跟蹤,監(jiān)控和告警。如果模塊有非常具體的要求,標(biāo)準(zhǔn)可能會有例外。

        每個模塊都是一個單獨的進程、容器或虛擬機。運維部門必須處理每一項問題,因此面臨著巨大的挑戰(zhàn)。標(biāo)準(zhǔn)化有助于應(yīng)對這種復(fù)雜性。但是,可能仍然存在具有特殊要求的服務(wù),這些服務(wù)可能使用不同的操作方法。另外:在“You build it - you run it”組織中,每個團隊都應(yīng)該負責(zé)選擇最適合它們的操作方法。大多數(shù)情況下,這仍然是一種標(biāo)準(zhǔn)化方法,因為這會減少團隊的工作量。請注意,該標(biāo)準(zhǔn)僅涵蓋該技術(shù)。當(dāng)然,每個模塊可能都有自己的一組指標(biāo),告警等。ISA需要高度成熟的運維:大多數(shù)運維程序必須自動化。必須處理許多模塊。缺乏這種成熟度可能會導(dǎo)致無法成功實施ISA。

        原則八:標(biāo)準(zhǔn)化

        應(yīng)在接口級別強制執(zhí)行運維,集成或通信的標(biāo)準(zhǔn)化。例如,通信協(xié)議和數(shù)據(jù)結(jié)構(gòu)可以標(biāo)準(zhǔn)化為使用HTTP交互的特定JSON有效載荷格式,但每個模塊應(yīng)該可以自由使用不同的REST庫/實現(xiàn)。

        在某種程度上,這是模塊化的結(jié)果:模塊可能只能通過接口訪問。對于任何標(biāo)準(zhǔn)案例理應(yīng)如此, 例如:運維。此外,技術(shù)水平的標(biāo)準(zhǔn)限制了技術(shù)的自由選擇,這是該架構(gòu)的主要優(yōu)點。但在某些情況下,可能無法將標(biāo)準(zhǔn)限制為接口級別。所以該原則只是“應(yīng)該”。

        原則九:彈性

        模塊必須具有彈性

        • 它們必須對不可用的模塊或通信問題進行補償。

        • 它們必須能夠應(yīng)對意外停機而不會丟失數(shù)據(jù)或狀態(tài)。

        • 必須可以將它們移動到其他運行時環(huán)境(主機,網(wǎng)絡(luò),配置等)。

        模塊級別的彈性極大地有助于整個分布式系統(tǒng)的高可用性的獲得。調(diào)度程序也可以選擇重新啟動模塊或?qū)⑺鼈円苿拥狡渌?wù)器。模塊必須能夠處理這個問題。

        其他原則

        ISA(獨立系統(tǒng)架構(gòu))是最佳實踐的集合。但是ISA沒有定義完整的體系結(jié)構(gòu)。以下內(nèi)容介紹了不屬于ISA的其他原則以及它們被忽略的原因。

        ISA定義了模塊技術(shù)層面的內(nèi)容。但系統(tǒng)如何拆分為模塊超出ISA的范圍。 領(lǐng)域驅(qū)動設(shè)計限界上下文是很好的指導(dǎo)原則。但有時技術(shù)模塊需要因為可擴展性等原因的分離也很重要。正確拆分為模塊非常困難,因此不能輕易地將其放在一些原則中。

        架構(gòu)可以產(chǎn)生巨大的組織和文化影響。該方法允許更好的分離模塊,允許獨立,自組織的團隊。 康威定律指出,軟件架構(gòu)反映了團隊中的社會邊界,因此組織與架構(gòu)之間存在著密切的關(guān)系。但是,ISA在不調(diào)整組織結(jié)構(gòu)的場景下工作,因此這種想法可以通過這種方式更廣泛地應(yīng)用。

        ISA不偏好通信協(xié)議或運維技術(shù)。它陳述了一般原則,而不是具體的技術(shù)決策。

        遵循這些原則可提供獨立可擴展性,負載平衡和高可用性等優(yōu)勢。然而,這些好處是遵循原則的結(jié)果而非原則本身,所以它們未被明確提及。

        這些原則帶來了不一致的數(shù)據(jù)等問題。這些是分布式系統(tǒng)的基本挑戰(zhàn),需要加以解決。這超出了ISA的定義。

        source: http://kaelzhang81.github.io/2019/08/30/獨立系統(tǒng)架構(gòu)/


        “拍一拍” 能撤回了 ?。?!

        5款Chrome插件,第1款絕對良心!

        為開發(fā)色情游戲,這家公司赴日尋找AV女優(yōu)拍攝,期望暴力賺錢結(jié)果...

        拼多多終于釀成慘劇

        華為阿里下班時間曝光:所有的光鮮,都有加班的味道


        關(guān)


        ,學(xué)西學(xué)學(xué),質(zhì),結(jié)關(guān)[],學(xué)習(xí)


        瀏覽 76
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. h全肉学校公共厕所 | 久久99精品一区二区三区 | 操逼操逼操逼操逼操逼操逼操逼操逼操逼 | 欧美3p一区二区三区 | 免费看黄 的网站 |