主頁 > 軟體設計 > 聊聊微服務架構思想

聊聊微服務架構思想

2023-03-30 14:20:46 軟體設計

用了好多年微服務架構了,我經常會反思,這個專案為啥用微服務?真的能幫我們解決一些痛點嗎?這個專案有必要用微服務嗎?這個專案體現出微服務的價值了嗎?

我是從2017年開始入手微服務,距今已經五六年了,在此期間,遇到的大小專案,基本都是用微服務架構開發的,其中有數字化工廠專案、教輔系列平臺、政府行政審批系列、商城門戶SASS平臺、大資料平臺等待,在這篇文章中,我就不給大家普及微服務的概念及微服務組件框架,主要討論微服務架構的發展和核心思想,


只要學會舉一反三,懂得總結歸納,從常見事務中剝離方法論,你就會發現,其實軟體架構的發展,到現在的微服務,都是有跡可循,

先聊聊歷史政治的歷程

個人認知,說幾個關鍵歷程

  1. 最初的人文部落管理,扁平化管理,大家都跟著部落首領干,男的打獵,女的耕織,部落首領說了算,規模不大,統治者一言堂,管得過來,
  2. 隨著各部落的壯大發展,部落間混戰,最終軒轅氏皇帝征服其他部落,成部落聯盟首領,再到后來的夏商周三代,基本形成了分封制的管理格局,規模越來越大,管不過來了,分封而治,權利下放,
  3. 春秋戰國,諸侯崛起,周王室衰落,最終秦一統天下,吸取權利下放導致尾大不掉的弊病,于是始皇帝建立郡縣制的同時,統一制度,統一思想,收繳天下兵馬,權利下放,各管各的,容易失控,需要將權利按職能分類,選擇性下放,同時建立統一的管理制度,
    值得一提的,漢孝武黃帝,提出了天下第一陽謀的“推恩令”,徹底維護了郡縣制的落實,防止了重返分封制,
  4. 隨著長期發展,直到今日,形成了圍繞中央政權,成立個多個司法部門,按職能管理的格局,高內聚(按職能成立各種司法部門,統一管理),低耦合(金字塔模式,建立省市縣鎮村多級,將部分權利逐層下放,各管一方)

簡說創業者管理旅程

  1. 常規創業者,創業一開始,所有的活,從生產到銷售一條龍服務,都是老板自己干,親力親為,
  2. 業務發展到一定規模,老板忙不過來了,請了幾個員工一起干,干的好的,積累了經驗,可能撇開老板自己出去創業了跟自己競爭了,管理失控,老板尷尬了,
  3. 于是,招聘了不同能力的人,劃分智能部門干活,讓專業的人干專業的事,離了蘿卜坑還在,只要體系在,就能穩固發展,鐵打的營盤流水的兵,
  4. 隨著公司業務規模越來越大,光靠只能職能部門也沒辦法管理龐大的業務,于是成立分公司,子公司,大區部門等,建立金字塔模式,逐層下放,這時候的老板管理基本就靠制度、企業文化、戰略、組織架構、機制等來管理企業了,

軟體架構的發展

軟體架構的發展,其實也是一樣的,都有個從0到1(質變),從1到n(量變)的程序,不同時期下的管理思想在一定程度上是相似的,
(結合個人經驗,以web發展發展為例說起)

  1. 微軟asp框架說起,asp框架將html,js,css(前端),c#/vb(后端代碼),jdbc-sql(資料庫),系統配置等全部放在.asp檔案中,開發一個功能,直接操作資料庫,查詢到資料,就遍歷渲染了,很直接,開發起來真的很方便簡介,但維護起來卻非常困難,后期檔案極其臃腫,且代碼復用性極差,當遇到大的專案,需要大的開發團隊,分工、管理、規劃就顯得極難,
  2. 后來,asp.net框架出來,做到前后端分離(檔案維度)html,js,css(前端)放在.asp檔案,c#(后端代碼)放在.cs檔案中,甚至MVC框架的出現,將軟體架構進一步拆分為前端展現層-后端(業務控制層-業務處理層-資料庫持久層) 4層,從上到下,底層代碼的復用性得到了極大的提高,每一層可以隔離開發,(PS:當時我也轉JAVA了,java跨平臺太香了,asp.net有點對應java的SSH三大框架,以下以java為例接著說),
  3. 再后來,隨著angularJS、restApi的出現,前端只需要介面提供的資料就可完獨立完成互動,不再依賴后端渲染,權限、配置控制等,可獨立部署,掀起來前后端分離的格局(專案維度),隨后angularJS2+、vue、react + spring boot的架構得到開發者青睞,這時候迎來了前后端獨立的大發展階段,前端沒了后端的束縛,基于mockjs或node,迅速回應市場,快速提供可見軟體,并逐步形成前端框架;后端也是從業務角度,解耦業務,拆分專案,形成一個前端,需要多個后端服務提供介面的局面,然而后端面服務拆分的越多,越難管控,
  4. 微服務框架的誕生就是為這些業務服務提供一系列工具組件去統一管理起來,

總結一下,如下圖:
image
再回頭看一下微服務架構,你會發現,核心業務被一堆抽離出來的職能管理服務團團包圍,
image


微服務架構的核心思想

軟體架構的核心思想是“高內聚、低耦合”,所以任何架構的改造和設計模式都是向這兩個核心思想靠攏,

微服務最關鍵的是拆分微服務,按業務屬性和功能屬性,可以分為縱向拆分和橫向拆分,其拆分的目的,主要還是為了業務解耦,業務解耦的目的:

  1. 并行開發
    大的專案,一般開發周期會比較長,如果規劃的好,微服務可以并行開發,提高人效和縮短開發周期;
  2. 復用性和可移植性
    一個獨立完整的功能,可以復用,降低維護成本,提高功能價值,
  3. 降低隱患范圍,風險最小化
    防止了牽一發動全身,因為一個問題,導致系統全部癱瘓,系統更新,也可以無感區域更新,
  4. 有益于持續交付
    基于微服務低依賴性,更容易做單元測驗和功能交付,
  5. 靈活交付
    特別是toB產品,不同的企業,可能要的功能范圍不一樣,他不想出那么多錢買你全套,只要部分功能,用微服務就可以很靈活搭配,打包不同范圍的產品,

我做過很多大型專案,為了縮短工期,為了能并行開發,敏捷管理,持續交付可用功能,才選型微服務架構,然而,微服務不止是為了解決這些問題,微服務的誕生,更多是為了解決toC高并發,回應慢的問題,單體服務再性能方面擴展有限,且成本很大,而微服務通過集群部署,可以很靈活、很方便的進行性能擴展,同時保證了系統的穩定性,集群部署的目的:

  1. 高并發
    通過部署多節點,并發處理業務,突破業務并發瓶頸,
  2. 消災、滅災
    防止服務宕機,造成系統癱瘓,多節點部署,有備無患,

舉個例子,統計整個學校學生的興趣愛好,如果沒有系統,只能線下統計,大家都能想到最快的方式,逐層統計,由下到上,班主任統計自己班的,統計完交給年級主任,年級主任統計完各年級的交給學段部,學段部校長統計完交給總校長統計,這樣一個龐大的作業拆分成四級,由多人完成,不同的人干不同的事,同級別可并行處理,這極大地提升了干活的效率,這也是微服務分布式處理思想的體現,可以很好的縱向擴展業務,不限層級,但是,在統計程序中,逐層上報,匯總的時候,要去重分組篩選,越到后邊作業量越來越大,總校長事務繁多,實踐投入又很少,總的統計程序還是效率很低,怎么辦,很簡單,根據實際情況,給他們配備不同數量的助手,協助完成統計作業,即不同的人干同一件事,這降低了流水線上單個節點的壓力,同時保證了流水線的運作,每件事,保證始終有人干就行,這是微服務的集群處理思想的體現,根據業務容量大小,可以靈活橫向擴展節點,不限個數,同時保障了系統的可用性,
微服務的架構思想,其實還是源于日常生活,沒那么復雜,只是有些人善于歸納,提煉方法論并應用到其他領域罷了!
畢!

本文來自博客園,作者:·志堅行遠·,轉載請注明原文鏈接:https://www.cnblogs.com/luze/p/17202222.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/548656.html

標籤:架構設計

上一篇:UML 類圖

下一篇:行為型:觀察者模式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more