聊聊微服務架構思想

来源:https://www.cnblogs.com/luze/archive/2023/03/29/17202222.html
-Advertisement-
Play Games

XSS攻擊是什麼? XSS攻擊是指攻擊者利用網站中的漏洞,向頁面中註入惡意腳本,從而獲取用戶的信息或者控制用戶的電腦。 舉一個通俗的例子,早期使用JSP頁面渲染頁面的項目,如果將用戶名改成nick<alert>1</alert>,則當用戶打開頁面時,就會彈出一個警告框,而這個警告框可以被惡意腳本所 ...


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

我是從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


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

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 假設,我們有這樣一張 Gif 圖: 利用 CSS,我們嘗試來搞一些事情。 圖片的 Glitch Art 風 在這篇文章中 --CSS 故障藝術,我們介紹了利用混合模式製作一種暈眩感覺的視覺效果。有點類似於抖音的 LOGO。 像是這樣: 假 ...
  • 本博文介紹CSS中的基礎選擇器和複合選擇器。基礎選擇器包括標簽選擇器、類選擇器、id選擇器和通配符選擇器,複合選擇器包括後代選擇器、子選擇器、並集選擇器和偽類選擇器。 ...
  • 在上篇隨筆《基於Admin.NET框架的前端的一些改進和代碼生成處理(1)》中大致介紹了一些關於對Admin.NET框架的前端的改造工作,主要目的就是希望能夠增加代碼的簡潔和可讀性,以及利用代碼生成工具來快速生成相關的代碼,從而減少開發過程中的繁瑣問題。本篇隨筆繼續探討一下,對其中一些模塊功能進行一... ...
  • Array --JavaScript內置對象 描述 可以用一個變數存儲多種數據類型的Array對象,Array不是關聯數組,不能使用字元串作為索引訪問數組元素,需要使用非負整數的下標訪問數組中的元素。 和對象的某些特征很相似,例如:屬性訪問器一半相似,衍生出的使用 .call() 或者 .apply ...
  • 享元模式(Flyweight Pattern):是一種用於優化對象創建和管理的設計模式。它旨在減少記憶體消耗和提高性能,通過共用具有相同狀態的對象來實現這一目標。 具體來說,享元模式涉及兩個主要的對象:享元工廠和具有共用狀態的享元對象。享元工廠負責創建和管理共用對象,以確保每個對象只被創建一次。享元對 ...
  • 上一篇文章我們介紹了 Vue2模版編譯原理,這一章我們的目標是弄清楚模版 template和響應式數據是如何渲染成最終的DOM。數據更新驅動視圖變化這部分後期會單獨講解 我們先看一下模版和響應式數據是如何渲染成最終DOM 的流程 Vue初始化 new Vue發生了什麼 Vue入口構造函數 funct ...
  • 定義 觀察者模式屬於行為型模式,它定義了對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都將得到通知,並自動更新。 一種一對多的關係中一稱為被觀察者也叫目標對象Subject而多則稱為觀察者對象Observer 觀察者模式中通常有兩個模型,一個觀察者(observer)和 ...
  • UML 類圖 1 類圖的結構 用動物園的類圖結構來舉例,先抽象化動物類如圖所示: 一個類圖包括類名、屬性和行為,類名不用解釋,在介紹屬性和行為前,先瞭解一下訪問許可權: ‘ - ’ private:只有類內部的成員才能訪問 ‘ + ’ public:類內部和類外部都能訪問 ‘ # ’ protecte ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...