tft每日頭條

 > 生活

 > springcloud微服務架構搭建

springcloud微服務架構搭建

生活 更新时间:2024-07-28 10:15:05
單體應用

一個系統會劃分前端與後端,前端是用戶看到的,可操作的可視化界面。後端是用戶看不到的,負責處理業務邏輯,數據存儲的。

springcloud微服務架構搭建(微服務是什麼)1

在系統發展的早期,我們一般都是以單體模式出現。

單體模式優點:

  • 容易開發:不講究複用、遇到什麼新需求都造個新“輪子”,這樣最容易開發;
  • 容易回溯:遇到問題的時候很容易定位是哪個新造的“輪子”出了問題;
  • 容易部署:系統新功能上線,因為隻有一套後端代碼,把改過的代碼拷貝過來,就可以了;
  • 容易克隆:别人想買系統,直接複制、粘貼一下就好了。

随着需求越來越多,功能越來越複雜,單體模式的弊端就會暴露出來了。

單體模式缺點:

  • 疊代和維護成本增加:系統規則還小時,一個新功能可能隻與三五個已有功能關聯,所以改動起來容易。但是随着系統功能越來越多,一個新功能可能跟十幾個、甚至更多已有功能關聯時,要改其中一個功能,可謂牽一發而動全身,工作量會變得陡然增加;
  • 工作交接困難:不同功能由不同程序員寫的,又調用了别的程序員寫的代碼,交接起來可能哪些是自己寫的都分不出來,别人的更不知道怎麼維護;
  • 重構難度巨大:萬一哪天性能或複雜度到一定極限,需對代碼進行優化重構,舊的代碼重度耦合,根本無從下手。
技術架構演進

由于單體模式長遠來看明顯弊大于利,所以程序員就開始思考如何有規劃的寫代碼。

MVC

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼。

springcloud微服務架構搭建(微服務是什麼)2

MVC是從代碼意義的層面出發,将代碼分為了負責調度用的Controller控制器、負責業務邏輯和數據庫處理的Model模型、負責最終數據呈現的View視圖三部分。

相對于最開始的“一鍋粥”的混沌狀态,現在代碼間有了一些邊界,程序員分工、代碼定位也更清晰了。

模塊化與分布式

MVC解決了代碼内部管理的不少問題,但是從整個系統的視角來看,依然是一個單體。随着業務規模越來越大,某幾個功能的流量可能占用了服務器絕大部分資源,于是就産生了兩個問題:

  • 功能的穩定性如何保障?
  • 單台服務器的處理能力達到瓶頸後如何處理?

聰明的程序員就想到,把關鍵的業務邏輯和主系統剝離開來,形成獨立的模塊,這樣關鍵邏輯就能單獨運作,不受系統其它邏輯故障的影響。當該模塊用戶量多的時候,還可以把模塊多複制幾份同時運行,這樣其中一個模塊不幸挂了,那麼其他模塊還能接替他繼續運作。

springcloud微服務架構搭建(微服務是什麼)3

把多個模塊放在同一台服務上,并沒有解決服務器處理能力極限的問題,于是就找老闆要為這台服務器升級配置,結果一出價格,吓得老闆直哆嗦。

配置提高一點,價格就高了很多,花同樣的錢能買好幾台原來配置一樣的機器。如果改成買多幾台機器,然後想辦法讓這些機器處理能力能疊在一起,性能還可以遠超升級的配置。

springcloud微服務架構搭建(微服務是什麼)4

于是就有了分布式的誕生,多買幾台幾台服務器,讓他們同時工作。服務器還可以選擇部署在全國不同的地方,實現了用戶的就近區域訪問,讓不同地區用戶都能享受最佳的訪問速度。

微服務

分布式的架構看似幫程序員們解決了很多的問題,但是新的問題又随之而來:

  • 按什麼标準去将代碼獨立成新模塊?按技術的喜好、代碼的作用、還是按業務模塊區分?
  • 未來獨立的模塊越來越多,那該如何管理?

微服務的到來,就為這些問題打開了新思路

微服務架構是一種架構模式,它提倡将單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間采用輕量級的通信機制互相協作(通常是基于HTTP協議的RESTful API)。每個服務都圍繞着具體業務進行構建,并且能夠被獨立的部署到生産環境、類生産環境等。

微服務中有幾個關鍵啟:

  • 小:将大系統拆成一組小的服務
  • 獨立:每個服務互相獨立
  • 輕:我們可以簡單理解為代碼之間通過一套标準化、大衆化的方式互相溝通
  • 業務:服務圍繞着業務進行構建(微服務最終選擇了以業務結構作為其服務劃分)

馬爾文·康威1967提出的:“設計系統的架構受制于産生這些設計的組織的溝通結構。”通俗的來講:産品必然是其(人員)組織溝通結構的縮影。

微服務架構

springcloud微服務架構搭建(微服務是什麼)5

微服務其實是對模塊化和分布式的一種升級。

首先,後端增加了統一的“門面”——網關。

有了網關之後,前端就不需要知道衆多的服務他們分布在哪裡,隻需要請求網關,由網關将需求傳遞到相應的服務中。網關還能自動幫前端找到最快且穩定的服務節點,讓前端體驗更勝一籌。

諸多的服務分散在不同的地方,為了将這些服務組織管理起來,知道他們用途、狀态信息,避免後續發展成一共有多少個服務都無法統計,就誕生了服務池的“管理機構”。所有服務都必須在管理機構内注冊登記、及時上報自身情況。

稍微複雜點的功能,都需要多個服務互相配合才能完成的。

單體模式時代,由于隻有一套系統,程序員順藤摸瓜就能找到bug出在哪。現在存在多個獨立的服務,程序員必須每個服務逐一排查故障,這就讓找bug根源問題變得非常困難,于是就需要一套故障追蹤機制,記錄前端請求在後端實現的全鍊路,以便發現問題出在哪。

微服務實踐

為了讓程序員可以更好将系統架構向微服務遷移,于是就衍生出了微服務的代碼框架,其中比較出名的方案有SpringCloud、Dubbo兩家,我們來簡單看看他們他們的官方示例圖。

springcloud微服務架構搭建(微服務是什麼)6

從SpringCloud的架構中不難看出微服務的相對于原有的分布式架構的新特征:

  • 網關:對前後端的溝通進行統一的管理。
  • 注冊中心:用于對所有服務進行管理,服務必須在注冊中心注冊登記才能使用
  • 配置中心:每個服務的配置不是在各自服務内進行,而是統一放在“配置中心”便于管理
  • 分布式追蹤器:就是用來配合程序員定位一個功能鍊條中是哪個環節出了問題

微服務不是某種新技術,更像是技術架構的一種新思想,一種正在不斷疊代的、用業務的思想解決技術問題的思路。業務驅動下産生的微服務,無疑讓寫代碼這件事變得更具挑戰性,但卻讓程序更能直接表達其價值,能讓企業的業務更好、更快的發展。

業務驅動微服務研發工作流

springcloud微服務架構搭建(微服務是什麼)7

當我們讨論産品方案時,都不能脫離業務,業務是需求最重要的根源,那到底什麼是業務呢?

從詞語定義來說,業務是指某個行業或者某個職務所做的事情,就叫做“業務”,其參與者是人,未來也可能是電腦、機器(AI、自動化),其目的滿足行業、職務的服務對象的需要。

業務方在工作過程中,為了實現更高的産能、獲得更高的回報,就會想辦法去優化整個業務流程,這就産生了“需求”。隻要業務想發展、在發展,需求就會源源不斷的産生。

産品經理接觸的需求來源,外部是業務的服務對象:用戶;内部則是業務的執行方:老闆、運營、商務、财務、法務、供應商等。業務方将需求告知産品經理,産品經理經過調研論證,将需求轉換為産品方案,輸出可以滿足業務需求的産品需求文檔、原型。

然後,産品将功能的需求提給研發人員,研發最終将這些功能得以實現,于是系統誕生了。業務方使用系統,不斷發展擴大,産生更多的新需求,于是以此往複,形成業務-産品-研發的需求鍊條閉環。

在這個鍊條閉環裡,業務形态、流程決定了系統最終的形态,而系統形态則推動業務的發展。産品是連接業務與系統的紐帶,技術并不是在瞎逛,而是根據産品的需求去研發系統,技術研發出來的系統會最終決定業務未來的走向。

架構轉變

springcloud微服務架構搭建(微服務是什麼)8

服務是技術讓代碼更适應業務發展的産物,是業務驅動下的産物。

微服務的概念需要程序員更了解業務的闆塊劃分和發展方向,代碼要随着業務的不斷成熟,按照業務結構進行模塊化、服務化,才能方便業務的發展壯大,這就要求程序員要“懂點産品”。

如果程序員一味的按照純粹的技術方案或者自己拍腦袋定的方向做,那随着業務的疊代發展,很容易出現“這個需求做不了”的問題,因為代碼被技術方案禁锢住了,無法适應業務的發展,如果要解決,可能就要重構,時間、人力成本将居高不下。

業務驅動的過程,不是一個“理想”、“理性”的過程,代碼講究的是邏輯,是要“不出bug”、“跑得起來”,但是業務的發展是用戶、市場需求不斷積累的一個過程,很多需求可能是很主觀的,甚至有時候是“靈光一閃而過”的。需求存在不确定性,這就讓程序員犯難了,那到底要不要按照這個方向做呢?萬一做了用不上要推倒重來怎麼辦?

這時候就體現出了産品經理與技術人員的協調作用,以及對現有業務架構的劃分、對新需求的判斷和歸類,這将直接影響微服務的架構模塊。

也就是說在微服務架構下,業務人員不隻要懂業務,還要懂點技術;技術人員不隻要懂技術,還要懂點業務。

産品藍圖

百度複制過來的藍圖,僅參考

springcloud微服務架構搭建(微服務是什麼)9

springcloud微服務架構搭建(微服務是什麼)10

産品藍圖和功能架構圖十分相似?其實表現上差不多,但是産品藍圖還包含了對整套系統的發展方向預期,裡面的很多模塊可能處于“會有的”狀态,随着業務的發展不斷補全。

有了産品藍圖後,新需求就可以很方便的進行歸類,做版本規劃時也可以看得出距離預期目标還有哪些沒有實現的地方,然後進行補齊。

更重要的是,産品藍圖作為産品設計方向的指導作用,能讓技術對産品未來的完整形态一目了然,然後再進行以業務為驅動的代碼服務化,這樣就能讓代碼能适應更長遠的發展需要,避免盲目設計導緻最終影響業務發展、需要推倒重來。

通過産品藍圖、産品規劃,産品經理能讓技術了解整個業務的未來發展方向,讓技術可以更熟悉産品,知道“為什麼這麼做”、“以後還要做什麼”,這樣在寫代碼的時候可以更有方向的做兼容。

總結

微服務其實是技術、産品的目标一緻化的必然結果,大家都以如何更好的發展業務去進行工作。

産品經理可以不需要深入了解微服務下各種配套的機制、利弊的問題,但需要知道,微服務其實是産品架構在代碼層的映射、體現。

一個好的産品架構,将有利于技術框架的成型和發展,反之一個模糊不清、結構混亂的産品架構,将會讓技術也無從下手,隻能頭痛醫頭的解決眼前的需求,無法從代碼層面做長遠的兼容、發展考慮。

所以我的觀點是,微服務是技術架構适應業務發展的一個過程,如果從技術的工作上看,讓代碼順應業務的發展其實是個大難事,關愛程序猿人人有責。而産品經理雖然不需要知道微服務的技術細節和實現方法,但應該更多的強化自己的産品能力,多将業務發展方向的事情與技術同事聊聊、科普一下,有利于技術架構更好的發展。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved