基於Spring Cloud的微服務構建學習-1 基礎知識

来源:http://www.cnblogs.com/xiemubg/archive/2017/08/02/7275435.html
-Advertisement-
Play Games

基於Spring Cloud的微服務構建學習-1 基礎知識 什麼是微服務架構 微服務是系統架構上的一種設計風格,它的主旨是將一個原本獨立的系統拆分成多個小型服務,這些小型服務都在各自獨立的進程中運行,服務之間通過基於HTTP的RESTful API進行通信協議。 每個微服務都維護者自身的數據存儲、業 ...


基於Spring Cloud的微服務構建學習-1 基礎知識

什麼是微服務架構

  微服務是系統架構上的一種設計風格,它的主旨是將一個原本獨立的系統拆分成多個小型服務,這些小型服務都在各自獨立的進程中運行,服務之間通過基於HTTP的RESTful API進行通信協議。

  

  每個微服務都維護者自身的數據存儲、業務開發、自動化測試案例以及獨立部署機制。由於有了輕量級的通信協議,所以這些微服務可以使用不同的語言來編寫。

為什麼需要微服務

  在業務發展初期,由於所有的業務邏輯在一個應用中,開發、測試、部署都還比較容易且方便。但是,隨著企業發展,系統為了應對不同的業務需求會不斷為該單體項目增加不同的業務模塊(前端展現模塊以及提供支持的各種藉口模塊。。。),隨著業務需求的增長,單體應用變得越來越臃腫。往往修改一個小功能,都有可能影響到其他功能的運行。最終增加了維護成本,且難以控制(性能容量評估)。

使用微服務會帶來什麼問題

  微服務雖然帶來了很多吸引人的優點,但是也因為服務的拆分引發了很多原本在單體應用中沒有的問題:

  • 運維的新挑戰:在微服務架構中,運維人員需要維護的進程數量將會大大增加。如何有效編排運維過程是一個重要的問題(自動化)。
  • 介面的一致性:雖然拆分了服務,但業務邏輯上的依賴並不會消除,只是從單體應用的代碼依賴變為通信依賴。因此我們需要更完善的介面和版本管理,或是嚴格遵循開閉原則
  • 分散式的複雜性:由於拆分後的各個微服務都是獨立部署並運行在各自的進程內,它們只能通過通信來進行協作,所以分散式環境的問題都將是微服務架構系統設計時要考慮的重要因素,比如網路延遲、分散式事務、非同步消息等。

微服務的九大特性

  • 服務組件化:組件,是一個可以獨立更換和升級的單元。就像PC中的CPU、記憶體、顯卡、硬碟一樣,獨立且可以更換升級而不影響其他單元。

                                                                                    可插拔

  • 按業務組織團隊:面對大型項目的時候,對於微服務團隊的拆分更加建議按業務線的方式進行拆分,一方面可以有效減少服務內部修改所產生的內耗;另一方面,團隊邊界可以變得更加清晰。

                         

  • 做“產品”的態度:在實施微服務架構的團隊中,每個小團隊都應該以做產品的方式,對其產品的整個生命周期負責。有助於增加開發者對具體業務的理解,發現更多的問題。
  • 智能端點與啞管道:在微服務架構中,通常會使用①RESTful API或輕量級的消息發送協議,實現信息傳遞與服務調用的觸發②在輕量級消息匯流排上傳遞消息,類似RabbitMQ等一些提供可靠非同步交換的中間件。
  • 去中心化治理:在集中化的架構治理方案中,通常在技術平臺上都會制定統一的標準,但是也許該技術在某一個問題上處理效果並不好,不得不花費大力氣去解決,由於底層原因,最終成為系統的瓶頸,而微服務就不存在這樣的問題,微服務採用輕量級的契約定義介面,使得我們對於服務 本身的具體技術平臺不再那麼敏感。降低了對開發人員的技術水平要求。
  • 去中心化管理數據:每個微服務都有自己的資料庫。分散式事務本身的實現難度非常大,所以在微服務架構中,儘量做到服務之間“無事務”的調用,而對於數據一致性,達到最終一致性即可。

     

  • 基礎設施自動化:雖然應用程式個頭變小了,但數量增多了,增加了運維難度。所以在構建微服務架構中,務必從一開始就構建起“持續交付”平臺來支撐整個實施過程。該平臺需要兩大內容:自動化測試和自動化部署
  • 容錯設計:在單體應用中,一般不存在單個組件故障而其他部件還在運行的情況,一般是一掛全掛,而在微服務中則存在這種情況,這也是微服務的好處(實現這種好處就需要有良好的容錯設計)。在微服務架構中,快速檢測出故障源並儘可能地自動恢復服務是必須被設計和考慮的。通常,我們都希望在每個服務中實現監控和日誌記錄的組件,比如服務狀態、斷路器狀態、吞吐量、網路延遲等關鍵數據的儀錶盤等。

 

  • 演進式設計:

  1.以單體系統的方式設計和實施(系統初期體量不大,構建維護成本不高)

  2.將經常變化的業務進行微服務處理

  3.穩定的業務模塊變成一個核心微服務

為什麼選擇Spring Cloud

  微服務架構屬於分散式架構,分散式架構中遇到的問題在微服務的架構中也會面對。

  現在已經有了很多解決分散式系統難題的現成的開源框架,針對同一個問題,解決方案也是多種多樣的,但是他們的側重點不同,所以還需要根據具體項目作出選擇。

  對於剛接觸微服務的人來說,如何選擇框架也是一個艱難的問題。

  Spring Cloud集成了很多主流的分散式框架,提供了綜合的解決方案,省去了很多框架學習時間以及開發時間(約定由於配置、自動化配置)。

 

參考文獻:

  Spring Cloud微服務實戰

 轉載註明出處:http://www.cnblogs.com/xiemubg/p/7275435.html


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

-Advertisement-
Play Games
更多相關文章
  • 1 //選擇排序對數據進行升序排序 2 public static void selectSortArray(int[] arr){ 3 for(int i = 0; iarr[j]){ 6 int temp = arr[j]; 7 arr[j... ...
  • 裝箱和拆箱 裝箱和拆箱 基本數據類型的包裝類 舉兩個例子,看一下 基本數據類型的包裝類 舉兩個例子,看一下 對於byte/short/long/float/double和Integer(int)類用法類似 對於byte/short/long/float/double和Integer(int)類用法類 ...
  • 有時候,需要禁止函數修改列表。例如要對裂變進行修改操作,也要保留原來的未列印的設計列表,以供備案。為解決這個問題,可向函數傳遞列表的副本而不是原件;這樣函數所做的任何修改都隻影響副本,而絲毫不影響原件。 8-9 魔術師 魔術師 :創建一個包含魔術師名字的列表,並將其傳遞給一個名為show_magic ...
  • 垃圾收集器與記憶體分配策略 由於JVM中對象的頻繁操作是在堆中,所以主要回收的是堆記憶體,方法區中的回收也有,但是比較謹慎 一、對象死亡判斷方法 1.引用計數法 就是如果對象被引用一次,就給計數器+1,否則-1 實現簡單,但是無法解決對象相互引用的問題;實際上JVM也不是使用的此種方式,因此已下的程式我 ...
  • 最近跑來打數據結構,於是我決定搞一發可持久化,然後發現……一發不可收啊…… 對於可持久化數據結構,其最大的特征是“歷史版本查詢”,即可以回到某一次修改之前的狀態,並繼續操作;而這種“歷史版本查詢”會衍生出其他一些強大的操作。 今天,我們主要講解可持久化線段樹。其實,它的另外一個名字“主席樹”似乎更加 ...
  • 1. php中字元串可以用哪三種方法定義: 單引號、雙引號、定界符 2. 定義常量和靜態常量的語法是: define(‘常量名’,’常量值’) static $var 3. 用php列印出昨天的時間,格式是2006-05-10 22:21:21: date_default_timezone_set( ...
  • 最近接觸了不少次下載http網頁和文件的程式,突然對其原理很感興趣,又碰巧看到了http協議基於socket,這更是讓我激動不已。畢竟之前花了很長時間接觸socket這個實用的底層協議,做了小型聊天室來練習,然而卻不知道生活中有什麼具體的實例是由socket完成的。於是乎,查閱了各路筆記和文檔,再加... ...
  • 迭代器和生成器是函數中的一大重點,務必掌握,何為迭代?何為迭代器? ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...