設計微服務的最佳實踐

来源:https://www.cnblogs.com/3xmq/archive/2018/08/20/Microservice.html
-Advertisement-
Play Games

設計微服務最佳實踐 1,為每個微服務分別存儲數據 2,將代碼保持在類似的成熟度級別 3,為每個微服務單獨構建 4,部署到容器 5,將服務設計為無狀態服務 ...


你是否曾想過,什麼是微服務?以及大規模的互聯網行業,例如社交,電商,物流,金融等領域,如何使用微服務構建互聯網應用以滿足用戶需求。

要瞭解微服務是什麼,你必須瞭解如何將單體應用程式,拆解為獨立打包和部署的微型應用程式。本文章將幫助你清晰化的理解,開發者如何根據需求使用微服務來構建他們的應用程式。

下麵,從以下幾個維度進行闡述 

為何選擇微服務? 

什麼是微服務? 

微服務架構的功能

微服務架構的優點 

設計微服務的最佳實踐 

1,為何選擇微服務? 

現在,在我介紹微服務之前,讓我們看看在微服務之前流行的架構,即單體架構。

通俗地說,您可以說它類似於一個大容器,在這個容器中,應用程式的所有軟體組件被緊密地打包並部署在一起。

羅列一下單片架構的挑戰:


不靈活 - 單片應用程式無法使用不同的技術構建

不可靠 - 即使系統的某個功能不起作用,整個系統也不起作用

不可擴展 - 由於每次需要更新應用程式時都無法輕鬆擴展應用程式,因此必須重建整個系統

妨礙持續開發 - 無法同時構建和部署應用程式的多個功能

緩慢的開發 - 單體應用程式的開發需要花費大量的時間來構建,因為每個功能都必須一個接一個地構建

不適合複雜的應用程式 - 複雜應用程式的功能具有緊密耦合的依賴關係

上述挑戰是導致微服務發展的主要原因。

2,什麼是微服務? 

微服務,又稱微服務架構,是一種架構風格,它將應用程式構建為以業務領域為模型的小型自治服務集合。

在微服務架構中,每個服務都是獨立的,並實現單一業務功能。

傳統架構與微服務架構之間的差異

以電子商務網站為例,瞭解它們之間的差異。

我們在上圖中觀察到的主要區別是,所有功能最初都在共用單個資料庫的單個實例下。 但是,通過微服務,每個功能都被分配了不同的微服務,處理自己的數據,並執行不同的功能。

 

現在,讓我們通過查看其架構來瞭解有關微服務的更多信息。請參考下圖:

 

微服務架構

1,來自不同設備的不同客戶端嘗試使用不同的服務,如搜索,構建,配置和其他管理功能

2,所有服務都根據其域和功能分開,併進一步切分成各個微服務

3,這些微服務有自己的負載均衡器和執行環境來執行它們的功能,同時在自己的資料庫中捕獲數據

4,所有微服務都通過無狀態伺服器(REST或消息隊列)相互通信

5,微服務在服務發現中心的幫助下獲取其通信路徑,並執行自動化,監控等操作功能

6,然後,微服務執行的所有功能都通過API網關傳達給客戶端

7,所有內部點都從API網關連接。因此,任何連接到API網關的人都會自動連接到整個系統

現在,讓我們通過查看其功能來瞭解有關微服務的更多信息。

3,微服務功能 

解耦 - 系統內的服務很大程度上是分離的。因此,整個應用程式可以輕鬆構建,更改和擴展

組件化 - 微服務被視為可以輕鬆更換和升級的獨立組件

業務能力 - 微服務非常簡單,專註於單一功能

自治 - 開發人員和團隊可以彼此獨立工作,從而提高速度

持續交付 - 通過軟體創建,測試和審批的系統自動化,允許頻繁發佈軟體

職責 - 微服務不關註作為項目的應用程式。相反,他們將應用程式視為他們負責的產品

分散治理 - 重點是使用正確的工具來做正確的工作。這意味著沒有標準化模式或任何技術模式。開發人員可以自由選擇最有用的工具來解決他們的問題

敏捷 - 微服務支持敏捷開發。任何新功能都可以快速開發並再次丟棄。 

4,微服務的優點 

獨立開發 - 所有微服務都可以根據各自的功能輕鬆開發

獨立部署 - 基於其服務,可以在任何應用程式中單獨部署它們

故障隔離 - 即使應用程式的一項服務不起作用,系統仍可繼續運行

混合技術堆棧 - 可以使用不同的語言和技術來構建同一應用程式的不同服務

粒度縮放 - 單個組件可根據需要進行部署節點縮放,無需將所有組件部署縮放在一起 

5,設計微服務的最佳實踐

在當今世界,複雜性已經蔓延到互聯網的每個產品當中。微服務架構有望保持團隊規模和功能更好。

 

現在,讓我們看一個案列來更好地理解微服務。

 

案例:購物網站

當您打開購物網站時,您看到的只是一個購買頁面。但是,在幕後,購物網站具有接受付款的服務,用於客戶咨詢的服務等

假設此網站的開發人員已在單一框架中創建它。請參閱下圖:

因此,所有功能都放在一個代碼庫中,並且位於單個底層資料庫下。

現在,讓我們假設市場上出現了一個新的品牌,開發商希望將即將到來的品牌所有細節都放在這個網站中,原有的資料庫結構和UI展示已經無法滿足。

然後,他們不僅需要為新標簽重做服務,而且還必須重新構建整個系統並相應地進行部署。

為避免此類挑戰,購物網站的開發人員決定將其應用程式從單片架構轉移到微服務。請參閱下圖瞭解購物網站的微服務架構。

這意味著開發人員不會創建Web微服務,邏輯微服務或資料庫微服務。相反,他們為搜索,推薦,客戶服務等創建單獨的微服務。

 

這種類型的應用程式架構不僅可以幫助開發人員剋服以前架構所面臨的所有挑戰,還可以幫助輕鬆構建,部署和擴展購物車應用程式。

通過上述案列,我們可以總結出來,設計微服務的最佳實踐:

1,為每個微服務分別存儲數據

2,將代碼保持在類似的成熟度級別

3,為每個微服務單獨構建

4,部署到容器

5,將服務設計為無狀態服務

作者:帝都羊 出處: http://3xmq.cnblogs.com/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。如果覺得還有幫助的話,可以點一下右下角的【推薦】
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前幾天安卓真機測試的時候,突然發現一個嚴重的問題。 後退兩次退出應用,再開啟白屏。而殺掉進程後再開啟就是好的。 這個重大bug我跟了好久,以為是splash-screen的問題。 後來一點一點打console,才找出問題————redux在後退兩次退出時,未重置,而保留了退出前的狀態值。 我不知道為 ...
  • 萬惡的IE,option竟然不支持display樣式,想到的解決思路有二個: 1、ajax聯動查詢 2、jQuery的remove()、after()方法 方法1的不好之處是初始頁面,需要顯示全部IP,本來已經從後臺查詢了一次,如果再利用ajax,會給伺服器造成壓力,所以採用方法2。 後臺code ...
  • 堆排序 堆排序是利用堆這種數據結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為O(nlogn),它也是不穩定排序。首先簡單瞭解下堆結構。 堆是具有以下性質的完全二叉樹:每個結點的值都大於或等於其左右孩子結點的值,稱為大頂堆;或者每個結點的值都小於或等於其左右孩子結點 ...
  • 在通常的登錄界面我們都可以看到驗證碼,驗證碼的作用是檢測是不是人在操作,防止機器等非人操作,防止資料庫被輕而易舉的攻破。 驗證碼一般用PHP和java等後端語言編寫。 但是在前端,用canva或者SVG也可以繪製驗證碼。 繪製驗證碼不能是簡單的隨機字元串,而應該在繪製界面有一些干擾項: 如:干擾線段 ...
  • 項目地址:http://liu12fei08fei.github.io/blog/41react native.html 說明 • 項目總結代碼地址 • 從項目開始啟動(2018 07 02)到項目進入測試(2018 08 20) • 從我基本沒用過react,到直接上手react native • ...
  • js-完整輪播圖 今天寫一個完整的輪播圖,首先它需要實現三個功能:1.滑鼠放在小圓點上實現輪播。2.點擊焦點按鈕實現輪播。3.無縫自動輪播。 輪播圖的原理: 一系列的大小相等的圖片平鋪,利用CSS佈局只顯示一張圖片,其餘隱藏。通過計算偏移量(封裝一個動畫函數)自動播放,或通過手動點擊事件切換圖片。 ...
  • 讀完這篇博客,你就可以回答一個經典的面試題:當你訪問Google時,到底發生了什麼? ...
  • 二叉樹的基本概念 在電腦中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。 二叉樹是一個連通的無環圖,並且每一個頂點的度不大於3。有根二叉樹還要滿足根結點的度不大於2。有了根節點之後,每個頂點定義了唯一的父節 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...