<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:57811|
      • 收錄網站:279872|

      IT精英團

      五分鐘理解軟件架構模式(翻譯)

      五分鐘理解軟件架構模式(翻譯)

      瀏覽次數:
      評論次數:
      編輯: 景同
      信息來源: ITPUB
      更新日期: 2022-08-18 21:56:29
      摘要

      .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align

      • 正文開始
      • 相關閱讀
      • 推薦作品
      Card-title.two-line{line-height:20px;display:-webkit-box;text-overflow:ellipsis;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;}.css-1wr1m8 .LinkCard.new .LinkCard-title.loading{margin-bottom:8px;width:80%;}.css-1wr1m8 .LinkCard.new .LinkCard-title.loading.withTitle{margin-bottom:6px;}.css-1wr1m8 .LinkCard.new .LinkCard-title.loadingTitle{margin-bottom:5px;}.css-1wr1m8 .LinkCard.new .LinkCard-excerpt{display:-webkit-box;text-overflow:ellipsis;font-size:13px;line-height:18px;color:#999999;margin-bottom:4px;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1;}.css-1wr1m8 .LinkCard.new .LinkCard-excerpt .LinkCard-author{color:#444444;}.css-1wr1m8 .LinkCard.new .LinkCard-desc{display:-webkit-box;font-size:13px;height:18px;line-height:18px;color:#999999;word-break:break-all;text-overflow:ellipsis;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1;}.css-1wr1m8 .LinkCard.new .LinkCard-desc .LinkCard-tag,.css-1wr1m8 .LinkCard.new .LinkCard-desc .tag{display:inline-block;font-size:11px;margin-left:8px;padding:0 4px;border-radius:3px;background:rgba(211,211,211,0.3);}.css-1wr1m8 .LinkCard.new .LinkCard-desc.loading{width:40%;}.css-1wr1m8 .LinkCard.new .LinkCard-desc svg{margin-right:2px;}.css-1wr1m8 .LinkCard.new .LinkCard-image{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;background-color:#EBEBEB;background-size:cover;background-position:center;position:relative;display:block;width:60px;height:60px;margin-left:20px;object-fit:cover;border-radius:inherit;overflow:hidden;}.css-1wr1m8 .LinkCard.new .LinkCard-image.LinkCard-image--default{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;background-color:#EBEBEB;color:#D3D3D3;}.css-1wr1m8 .LinkCard.new .LinkCard-image.LinkCard-image--default svg{color:#999999;}.css-1wr1m8 .LinkCard.new .LinkCard-image img{width:100%;height:100%;object-fit:cover;}.css-1wr1m8 .LinkCard.new .LinkCard-image .LinkCard-image--video{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);width:24px;height:24px;border-radius:12px;background:rgba(255,255,255,0.9);pointer-events:none;}.css-1wr1m8 .LinkCard.new .LinkCard-image .LinkCard-image--video svg{color:#444444;}.css-1wr1m8 .LinkCard.new .LinkCard-richText .text{color:#444444;}.css-1wr1m8 .LinkCard.new .LinkCard-richText .bold{font-weight:600;}.css-1wr1m8 .LinkCard.new .LinkCard-richText .tag{margin-left:4px;}.css-1wr1m8 .LinkCard.old{position:relative;display:block;margin:1em auto;width:390px;box-sizing:border-box;border-radius:12px;max-width:100%;overflow:hidden;}.css-1wr1m8 .LinkCard.old,.css-1wr1m8 .LinkCard.old:hover{-webkit-text-decoration:none;text-decoration:none;border:none !important;color:inherit !important;}.css-1wr1m8 .LinkCard-ecommerceLoadingCard{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:12px;border-radius:inherit;height:80px;box-sizing:border-box;background:rgba(246,246,246,0.88);color:#D3D3D3;}.css-1wr1m8 .LinkCard-ecommerceLoadingCardAvatarWrapper{width:60px;height:60px;background:#EBEBEB;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;border-radius:6px;margin-right:10px;}.css-1wr1m8 .LinkCard-ecommerceLoadingCardNetwork{width:20px;height:20px;}.css-1wr1m8 .LinkCard-ecommerceLoadingCardLoadingbar{height:60px;-webkit-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}.css-1wr1m8 .LinkCard-ecommerceLoadingCardLoadingbar span{height:16px;display:inline-block;background:#EBEBEB;}.css-1wr1m8 .LinkCard-ecommerceLoadingCardLoadingbar span:nth-of-type(1){width:60px;margin-bottom:4px;}.css-1wr1m8 .LinkCard-ecommerceLoadingCardLoadingbar span:nth-of-type(2){width:127px;}
      說明:本文翻譯于:Software Architecture Patterns: 5 minute read

      當一個人深入軟件工程的世界時,總有一天他需要學習軟件架構模式的基礎知識。當我剛開始編碼的時候,我不知道從哪里獲得一個關于現有架構模式的簡要介紹的文章。我們希望不是詳細、混亂地理解軟件工程,而是抽象、簡單地理解軟件工程。

      這一直是個問題,直到我找到了 Mark Richards 寫的《軟件架構:架構模式、特征及實踐指南》一書。在這里,我想與您分享一些關于該書以及架構模式的最重要部分。(要了解更多信息,我強烈建議你閱讀這本書或他的報告)。

      為什么作為軟件工程師,你至少應該學習基本的架構模式?

      我相信已經有很多文章回答了這個問題,但我這里將給你一些理由來說服你。

      • 首先,如果您了解體系結構模式的基礎,那么您就可以更容易地遵循架構師的需求。
      • 其次,了解這些模式將有助于你在代碼中做出決定:例如,如果你的應用設計是基于事件驅動的微服務,作為一名軟件工程師,如果你注意到現有服務中邏輯的復雜性和責任的增加,你必須把你的代碼解耦到一個單獨的服務中。(如果你沒有理解這個說法,別擔心,下文會具體進行解釋)。

      Mark Richards 的書中描述了 5 種模式:

      • 分層架構-Layered architecture
      • 事件驅動架構-Event-driven architecture
      • 微內核架構-Microkernel architecture (or Plugin architecture)
      • 微服務架構-Microservices architecture
      • 基于空間的架構-Space-based architecture (or Cloud architecture pattern)

      1. 分層架構-Layered architecture

      它是單體應用最常見的架構。該模式的基本思想是將應用程序的邏輯劃分為若干層,每層都封裝了特定的角色。例如,持久層-Persistence layer 將負責你的應用程序與數據庫引擎的通信。

      圖1.分層架構模式

      補充說明:在 7 種面向對象的設計原則中,單一職責原則建議一個類只負責一個功能領域中的相應職責?;蛘呖梢远x為:就一個類而言,應該只有一個引起它變化的原因。實際上分層架構的背后,符合了單一職責原則。

      2. 事件驅動架構-Event-driven architecture

      這種模式背后的想法是將應用邏輯解耦為單一用途的事件處理組件,這些組件異步地接收和處理事件。這種模式是流行的分布式異步架構模式之一,以高可擴展性和適應性而聞名。

      圖2.事件驅動架構

      補充說明:一個注明的事件驅動 Java 應用網絡框架為 Netty。

      3. 微內核框架-Microkernel Architecture

      微內核架構,也被稱為插件架構,是有兩個主要組成部分的設計模式:一個核心系統和插件模塊(或擴展)。一個很好的例子是網絡瀏覽器(核心系統),在那里你可以安裝無盡的擴展(或插件)。

      圖3.微內核框架

      補充說明,作者在其項目中給出了簡單的插件模式:Mikrokernel or Plugin pattern,使用 Go 語言編寫。插件設計模式的核心是:

      • Core System 面向接口編程,每一個插件都應該實現統一的接口
      • Core Sysrem 負責插件的聲明周期,插件的初始化、加載、銷毀,這些聲明周期方法統一定義在接口中

      在原作者的項目中,所有插件被 Core System 統一對待,因此,插件之間的通信 Core System 并不負責,插件通信由插件內部的業務邏輯實現。例如你可以將一個插件 DB 作為插件 Service 構造器參數,通過組合的方式,插件 Service 與插件 DB 進行通信(業務邏輯依賴于 service)。但是,更好的做法是 Core System 提供一套插件通信機制,插件與插件之間不直接通信,插件間通信通過 Core System 來完成,Core System 實現了面向接口的插件間通信。例如,第一步,實現不同類型的插件接口,插件接口符合職責單一原則,例如 ServicePlugin 接口、DbPlugin 接口。插件之間的通信交給 Core System 來完成,我們在接口層面實現 ServicePlugin 接口依賴 DbPlugin 接口的關系,而不是交給具體的插件實現來通信。

      4. 微服務架構-Microservices Architecture

      微服務架構由單獨部署的服務組成,每個服務都有理想的單一責任。這些服務是相互獨立的,如果一個服務出現故障,其他服務不會停止運行。

      圖4.微服務架構

      5. 基于空間的架構-Space-Based Architecture

      基于空間的模式背后的主要想法是分布式共享內存,以緩解經常發生在數據庫層面的問題。其假設是,通過使用內存數據處理大部分操作,我們可以避免在數據庫中進行額外的操作,從而避免可能在將來出現的一些問題(例如,如果你的用戶活動數據實體發生了變化,你不需要改變一堆代碼來持久化和從數據庫中檢索該數據)。

      基本的方法是將應用程序分離成處理單元(可以根據需求自動擴大和縮?。?,數據將在這些單元之間復制和處理,而不需要持久化到中央數據庫(盡管在系統故障的情況下會有本地存儲)。

      圖5.基于空間的架構

      你可以在我的 GitHub 賬戶中找到其中一些架構模式的最簡單例子。

      • Layered pattern (in Java)
      • Mikrokernel or Plugin pattern (in Go or Golang)
      • Microservices pattern (in Go)

      如果你想快速了解應用程序如何擴展的基礎知識,那么請閱讀我的下一篇文章《How to Scale Your Applications: 5 min read》。接著是文章Caching as a part Software Architecture: 5 min read。這是對通過緩存進行性能調整的更細致的研究。

      另外,如果你尋找更進階的主題,可以閱讀RPC chains: 5 min read。

      標簽:架構 插件 模式
      如何繪制架構圖(包括知識圖譜)
      ? 上一篇 2022-08-18
      SQL Server全文搜索
      下一篇 ? 2022-08-19
      • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
        0閱讀 0條評論 個贊
        在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
      • 國產核心板全志T507助力消防系統升級
        0閱讀 0條評論 個贊
        9月16日下午,位于湖南長沙市區內的中國電信大樓發生火災,建筑高度218米,現場濃煙滾滾,數十層樓體燃燒劇烈。消防救援人員趕到現場后很快將火勢控制住,目前大樓火勢已被撲滅,所幸未發現人員傷亡。湖南電信……
      • 教大家如何處理Spring Boot易流中的用戶和群體!
        0閱讀 0條評論 個贊
        1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
      • 從PG15開始WAL壓縮優化
        0閱讀 0條評論 個贊
        PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
      • 深入了解美團葉子發射器開源方案
        0閱讀 0條評論 個贊
        大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 內存泄漏——原因、避免和位置
        0閱讀 0條評論 個贊
        .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
      • Java線程面試題前50名
        0閱讀 0條評論 個贊
        .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
      • Sql Server連接池及其用法
        0閱讀 0條評論 個贊
        其實我們一直在使用SqlServer的連接池。在連接字符串中,Pooling為是否啟用連接池,默認值為true,表示啟用。與連接池相關的兩個重要參數是MinPoolSize和MaxPoo……
      • smile——Java機器學習引擎
        2閱讀 0條評論 個贊
        資源https://haifengl.github.io/https://github.com/haifengl/smile介紹Smile(統計機器智能和學習引擎)是一個基于Java和Scala的快速……
      • 構建docker鏡像庫(1):用注冊表構建本地鏡像庫
        0閱讀 0條評論 個贊
        目錄一.系統環境二.前言三.使用registry搭建私有鏡像倉庫3.1環境介紹3.2k8smaster節點配置鏡像倉庫3.3k8sworker1節點配置從私有倉庫上傳和拉取鏡像3.3.1上傳鏡……
      • 談談我是如何學習SQL Server的
        0閱讀 0條評論 個贊
        談談我是如何學習SQLServer的相信很多人都想做大牛,但是你們知道這些大牛是怎樣煉成的嗎?我的一個同事做了差不多10年的.NET開發,算得上是大牛了吧?如果他遇到他熟悉的項目很快就能手到拿來,立……
      • 淺談SQL Server中統計對查詢的影響
        4閱讀 0條評論 個贊
        簡介SQLServer查詢分析器是基于開銷的。通常來講,查詢分析器會根據謂詞來確定該如何選擇高效的查詢路線,比如該選擇哪個索引。而每次查詢分析器尋找路徑時,并不會每一次都去統計索引中包含的行數,值……
      • 我們能從AlloyDb的架構中學到什么
        0閱讀 0條評論 個贊
        前些天我發了一篇解讀信通所分布式數據庫發展報告內容的文章,有些朋友對我把Aurora、AlloyDB、PolarDB等也歸類于分布式數據庫感到有些不解。實際上這是信通所在報告里的歸類,和國際上的常見歸……
      • 開發者如何在應用后臺直接控制用戶的運動狀態?
        18閱讀 0條評論 個贊
        酷暑終于過去,很多人伴著涼爽的秋風開啟了新一輪的健身計劃。當用戶進行戶外運動或使用跑步機、橢圓機等器械時,他們會希望在運動健康類App里點擊即可開啟運動并記錄運動數據。而對于開發者自己開發的應用來說,……
      • 解決ShardingJdbc不支持復雜SQL問題的說明
        18閱讀 0條評論 個贊
        背景介紹公司最近做分庫分表業務,接入了ShardingJDBC,接入完成后,回歸測試時發現好幾個SQL執行報錯,關鍵這幾個表都還不是分片表。報錯如下:這下糟了嘛。熟悉ShardingJDB……
      • 深入了解美團葉子發射器開源方案
        0閱讀 0條評論 個贊
        大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
      • Go語言知識|基本數據類型
        0閱讀 0條評論 個贊
        前言學習Go半年之后,我決定重新開始閱讀《TheGoProgramingLanguage》,對書中涉及重點進行全面講解,這是Go語言知識查漏補缺系列的文章第二篇,前一篇文章則對應書中一二兩章。我……
      • 設計模式介紹——單一模式
        0閱讀 0條評論 個贊
        簡介一個類只允許創建一個對象(或實例),那么這個類就是一個單例類,這種設計模式稱作單例設計模式(SingletonDesignPattern),簡稱單例模式。單例模式保證系統內存中只存在一個對象,……
      • 如何獲取Yarn和Spark UI的界面索引信息
        1閱讀 0條評論 個贊
        .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
      • 深入理解Redis數據結構-字典
        0閱讀 0條評論 個贊
        字典,又稱為符號表、關聯數組或映射,是一種用于保存鍵值對的抽象數據結構。在字典中,一個鍵可以和一個值進行關聯,這些關聯的鍵和值稱為鍵值對。鍵值對中鍵是唯一的,我們可以根據鍵key通過映射查找或者更新對……
      • 基于 網絡6的輕量級Webapi框架緊固點
        0閱讀 0條評論 個贊
        大家好,我是等天黑。FastEndpoints是一個基于.NET6開發的開源webapi框架,它可以很好地替代.NETMinimalAPIs和MVC,專門為開發效率而生,帶來了全……
      • 面試官:談談你對mysql事務的認識?
        0閱讀 0條評論 個贊
        引言今天回頭繼續講講數據庫系列的文章。這篇文章屬于mysql數據庫系列,我們來談談事務方面的常見面試題。那么,具體題目有下面這些:1、講講為什么用事務?事務的四大特性?事務的隔離級別知道吧,你們生產……
      • 在頭腦中扎根泛型的思想3354深刻理解泛型
        0閱讀 0條評論 個贊
        1.前言往往一些剛接觸C#編程的初學者,對于泛型的認識就是直接跳到對泛型集合的使用上,雖然微軟為我們提供了很多內置的泛型類型,但是如果我們只是片面的了解調用方式,這會導致我們對泛型盲目的使用。至于為什……
      • 轉:Java老了 科特林會取而代之嗎?
        0閱讀 0條評論 個贊
        .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
      • 多線程技術的歷史發展和簡單使用
        0閱讀 0條評論 個贊
        進程與線程進程是應用的執行實例,可狹義理解為一個應用程序就是一個進程。啟用一個應用程序時就是啟動了一個進程。該應用運行所需的所有地址空間,代碼,數據及系統資源都屬于此進程。進程所使用的所有資源會在進程……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>