設計微服務的最佳實踐

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...