一文搞懂應用架構的3個核心概念

来源:https://www.cnblogs.com/tangshiye/p/18357630
-Advertisement-
Play Games

如果你是一名業務開發,你可能要說,我整天就是做CRUD(增刪改查),哪裡需要瞭解什麼應用架構設計? 經常有人說,程式員 35 歲之後很容易陷入瓶頸,被行業淘汰,我覺得原因其實就在此。 有些朋友在寫代碼的時候,可能沒有太多考慮非功能性的需求、擴展性,只是完成功能,覺得能用就好。做事情的時候,也沒有長遠 ...


如果你是一名業務開發,你可能要說,我整天就是做CRUD(增刪改查),哪裡需要瞭解什麼應用架構設計?

經常有人說,程式員 35 歲之後很容易陷入瓶頸,被行業淘汰,我覺得原因其實就在此。

有些朋友在寫代碼的時候,可能沒有太多考慮非功能性的需求、擴展性,只是完成功能,覺得能用就好。做事情的時候,也沒有長遠的規劃,只是把眼前的事情做好就滿足了。

我面試過很多大齡候選人,他們的簡歷長達十幾頁,項目經歷有幾十個。然而,細看之下,每個項目只是重覆堆砌業務邏輯,缺乏難度遞進,能力提升不明顯。

這樣的人,十年的積累可能與一年的積累無異。這樣的人,怎麼不會被行業淘汰呢?

隨著年齡增長,互聯網大環境也越來越捲,架構思維和設計知識是必須要掌握的。

應用架構是什麼?

應用架構定義了企業中的應用系統的結構和行為。它不僅僅是搭建幾個系統那麼簡單,更重要的是要考慮這些系統之間的關係,以及它們如何協同工作,以滿足業務需要。

通過應用架構,我們可以清晰地識別出支持業務和數據處理所需的應用系統,並實現從業務需求到IT系統的轉化。

一個優秀的應用架構,能讓系統既穩定,又能靈活擴展和升級,快速應對市場需求變化。

應用架構的設計步驟一般包括:

  • 基於業務架構,完成業務到IT系統的轉換,識別核心應用服務。
  • 劃分應用結構,設計應用結構與業務流程,數據的關係。
  • 設計應用結構間的交互、集成關係。

應用服務

應用服務在應用架構中起著至關重要的作用,它將系統的核心功能打包,並提供給外部使用,可以視為系統對外的“門面”,用戶或其他系統通過調用應用服務來實現特定的業務功能。

從外部視角來看,應用服務通常是帶有明確的業務含義,比如下單、支付、查詢庫存等。這些服務的設計必須緊密圍繞業務需求,確保能夠高效地支撐業務流程的執行。

應用服務的概念源於SOA和微服務架構的興起。通過將系統功能拆分為多個獨立的服務,可以提高系統的可維護性、可擴展性和靈活性。

應用服務的概念源自於面向服務的架構(SOA)和微服務架構的興起。通過將系統的功能模塊化為多個獨立的服務,不僅提升了系統的可維護性,還增強了系統的擴展性和靈活性。每個服務可以獨立開發、部署和升級,這樣即使業務需求發生變化,也只需調整相關服務,而無需大幅修改整個系統。

面向服務的架構最大的價值就在於它的敏捷性和靈活性。

敏捷性體現在服務可以快速調整,獨立演化。靈活性則體現在每個服務都有清晰的業務邊界,功能內聚性強,能夠單獨管理生命周期。

通過服務的組合和編排,系統可以快速響應業務的變化,支持複雜的業務流程,構建起一個既穩固又靈活的技術基礎設施。

應用結構

應用結構描述了應用系統內部的層次結構和組織關係,它決定了系統的模塊化程度,以及後續的開發和維護難度。

在應用結構設計中,我們通常會把系統抽象為不同的層次。比如,將系統劃分為系統級、應用級、模塊級和代碼級。

這種抽象級別的劃分幫助我們在不同層面處理複雜性,確保系統結構清晰且易於維護。如圖所示:

  • 系統級:關註的是各個系統的整體佈局和治理方式,比如各個系統之間的關係,以及它們如何協同工作。
  • 應用級:聚焦於各個應用的整體架構,包括應用與其他應用的交互方式,以及各個應用在整個系統中的角色。
  • 模塊級:對應用內部的進一步細化,它涉及到代碼的模塊化設計、數據和狀態的管理等。通過合理的模塊劃分,可以提高代碼的可維護性、可重用性,減少重覆勞動。
  • 代碼級:關註的是代碼本身的結構和實現方式。這一層級的設計直接影響到代碼的質量和實現細節。

image.png

抽象級別的存在,主要是為了幫助我們更好地管理系統的複雜性。

1.分解複雜度

如果將所有的細節混雜在一起,整個系統將變得難以理解、維護和擴展。通過設置不同的抽象級別,我們可以將系統的複雜性分解到各個層次,每個層次只需關註特定的功能和職責。

這種分層處理方式使開發人員在專註於系統某一部分時,無需過多關註其他部分的細節,從而大大簡化了系統的設計和開發過程。

2.團隊協作邊界清晰

在大型項目中,通常會有多個團隊並行開發。如果系統沒有明確的邊界,各團隊之間很容易產生衝突和重覆勞動。

通過清晰的抽象級別劃分,不同團隊可以專註於系統的不同層次或模塊,互不幹擾。

3.擴展性強

隨著業務需求的變化,系統往往需要不斷地擴展和升級。如果系統的架構設計沒有合理的抽象級別,擴展和升級就會變得異常困難,甚至可能引發系統的全面重構。

而在有抽象級別的系統中,變更往往只需要聚焦在特定的層次上進行,而不會影響整個系統。例如,一次業務改造隻影響模塊級別,我們可以在不改變系統整體架構的情況下,替換或新增某個模塊,以滿足新的業務需求。

應用交互

應用交互是指不同應用系統或組件之間的數據交換和通信方式。

在一個複雜的系統中,各個應用並不是孤立存在的,它們往往需要相互協作,才能完成更複雜的業務流程。

應用交互的設計就是為了確保這些系統和組件能夠順暢地“對話”,實現系統整體功能。

應用交互的形式有多種,包括同步調用、非同步消息傳遞、事件驅動等。每種交互方式都有其特定的應用場景和優缺點。

例如,同步調用通常用於那些需要即時響應的場景,用戶在前端提交訂單後,系統會立即調用訂單服務創建訂單,這種方式的優點是可以保證請求的實時性,但也要求系統的各個部分在調用時都能正常工作。

相對的,非同步消息傳遞則適用於那些不需要即時響應的場景,比如訂單創建後,訂單服務可以將訂單創建的消息發送到消息隊列,而履約服務可以在適當的時候處理這條消息。這種方式的優勢在於能夠提高系統的解耦性,避免系統在高負載時,因為同步調用導致性能瓶頸。

通過合理的交互設計,系統中的各個部分能夠高效協同,減少耦合度,增加系統的靈活性。同時,良好的交互設計還能顯著提升系統的性能和容錯能力,即使在大流量訪問、業務需求複雜的情況下,也依然保持穩定運行。

寫在最後

應用架構定義了企業應用系統的結構和行為,強調系統間的關係和協同工作。

通過應用架構,可以識別支持業務和數據處理的系統,實現從業務需求到IT系統的轉化。設計步驟包括業務到IT系統的轉換、應用結構設計及其交互關係。

應用服務是系統的核心功能模塊,源於SOA和微服務架構,提升了系統的可維護性和靈活性。

應用結構則描述了系統的層次結構,幫助管理複雜性,促進團隊協作和系統擴展。應用交互設計確保系統組件間的數據交換和通信方式高效,提升系統性能和容錯能力。

本文來自博客園,作者:架構師湯師爺,轉載請註明原文鏈接:https://www.cnblogs.com/tangshiye/p/18357630


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文比較了NPM、Yarn 和 pnpm 三種包管理工具的特點,重點分析了它們在安裝速度、依賴管理、磁碟空間使用、依賴衝突處理等方面的差異,重點介紹了pnpm的依賴組織結構。 ...
  • 前言 在現代 Web 開發中,WebAssembly (WASM) 已成為一種強大的工具。它使得開發者可以在瀏覽器中運行高性能的代碼,跨越傳統的 JavaScript 性能限制。Rust 語言因其高效性和記憶體安全性,成為了編寫 WASM 模塊的熱門選擇。本文將介紹如何將 Rust 代碼編譯為 Web ...
  • title: 使用 onBeforeRouteLeave 組合式函數提升應用的用戶體驗 date: 2024/8/14 updated: 2024/8/14 author: cmdragon excerpt: 摘要:本文介紹了在Nuxtjs中使用onBeforeRouteLeave組合式函數來提升應 ...
  • 什麼是Web Component Web Component是一套Web瀏覽器的技術和規範,能夠讓開發者定製自己的HTML元素 來自MDN的描述: Web Component 是一套不同的技術,允許你創建可重用的定製元素(它們的功能封裝在你的代碼之外)並且在你的 web 應用中使用它們。 Web C ...
  • title: 使用 navigateTo 實現靈活的路由導航 date: 2024/8/13 updated: 2024/8/13 author: cmdragon excerpt: 摘要:本文詳細介紹 Nuxt.js 中的 navigateTo 函數,包括基本用法、在路由中間件中使用、導航到外部 ...
  • SCS(- )架構介紹SCS(- )架構定義與特性自主Web應用:SCS是一個自主的Web應用程式,包含Web UI、邏輯和持久化層。這種完整性確保了一個用戶故事通常可以通過修改一個SCS來實現。 API的可選性:SCS可以有一個服務API,但這並非必需。如果SCS內的邏輯僅由SCS內的UI使用,則 ...
  • 分散式事務的兩階段提交(2PC)和三階段提交(3PC)是分散式系統中常用的事務管理協議,它們各自有優缺點。 兩階段提交(2PC) 流程: 準備階段(Prepare Phase): 協調者向所有參與者發送請求,詢問是否可以提交事務。 每個參與者執行本地事務操作,但不提交(僅預提交),並返回成功或失敗的 ...
  • 簡介 發佈訂閱模式是一種常用的用於解耦的模式。 它和觀察者模式的區別在於: 觀察者模式:被觀察者需要維護一個觀察者的集合; 發佈訂閱模式:通信雙方互相不知道對方的存在,通過第三方事件匯流排進行通信。 發佈訂閱模式在前端領域很常見,例如: Vue 框架中組件的$on和$emit方法; Node.js 中 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...