一文搞懂應用架構的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 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...