微服務

来源:https://www.cnblogs.com/SunBT/archive/2019/10/04/11623451.html
-Advertisement-
Play Games

概述 優點 第一 ,它解決了複雜問題。它把可能會變得龐大的單體應用程式分解成一套服務。雖然功能數量不變,但是應用程式已經被分解成可管理的塊或者服務。每個服務都有一個明確定義邊界的方式,如遠程過程調用(RPC)驅動或消息驅動 API。微服務架構模式強制一定程度的模塊化,實際上,使用單體代碼來實現是極其 ...


概述

優點

第一,它解決了複雜問題。它把可能會變得龐大的單體應用程式分解成一套服務。雖然功能數量不變,但是應用程式已經被分解成可管理的塊或者服務。每個服務都有一個明確定義邊界的方式,如遠程過程調用(RPC)驅動或消息驅動 API。微服務架構模式強制一定程度的模塊化,實際上,使用單體代碼來實現是極其困難的。因此,使用微服務架構模式,個體服務能被更快地開發,並更容易理解與維護。

第二,這種架構使得每個服務都可以由一個團隊獨立專註開發。開發者可以自由選擇任何符合服務 API 契約的技術。當然,更多的組織是希望通過技術選型限制來避免完全混亂的狀態。然而,這種自由意味著開發人員不再有可能在這種自由的新項目開始時使用過時的技術。當編寫一個新服務時,他們可以選擇當前的技術。此外,由於服務較小,使用當前技術重寫舊服務將變得更加可行。

第三,微服務架構模式可以實現每個微服務獨立部署。開發人員根本不需要去協調部署本地變更到服務。這些變更一經測試即可立即部署。比如,UI 團隊可以執行 A|B 測試,並快速迭代 UI 變更。微服務架構模式使得持續部署成為可能。

最後,微服務架構模式使得每個服務能夠獨立擴展。您可以僅部署滿足每個服務的容量和可用性約束的實例數目。此外,您可以使用與服務資源要求最匹配的硬體。例如,您可以在 EC2 Compute Optimized 實例上部署一個 CPU 密集型圖像處理服務,並且在 EC2 Memory-optimized 實例上部署一個記憶體資料庫服務。

缺點

微服務另一個主要缺點是由於微服務是一個分散式系統,其使得整體變得複雜。開發者需要選擇和實現基於消息或者 RPC的進程間通信機制。此外,由於目標請求可能很慢或者不可用,他們必須要編寫代碼來處理局部故障。雖然這些並不是很複雜、高深,但模塊間通過語言級方法/過程調用相互調用,這比單體應用要複雜得多。

微服務的另一個挑戰是分區資料庫架構。更新多個業務實體的業務事務是相當普遍的。這些事務在單體應用中的實現顯得微不足道,因為單體只存在一個單獨的資料庫。在基於微服務的應用程式中,您需要更新不同服務所用的資料庫。通常不會選擇分散式事務,不僅僅是因為 CAP 定理。他們根本不支持如今高度可擴展的 NoSQL 資料庫和消息代理。您最後不得不使用基於最終一致性的方法,這對於開發人員來說更具挑戰性。

測試微服務應用程式複雜。例如,使用現代框架如 Spring Boot,只需要編寫一個測試類來啟動一個單體 web 應用程式並測試其 REST API。相比之下,一個類似的測試類對於微服務來說需要啟動該服務及其所依賴的所有服務,或者至少為這些服務配置存根。再次聲明,雖然這不是一件高深的事情,但不要低估了這樣做的複雜性。

微服務架構模式的另一個主要挑戰是實現了跨越多服務變更。例如,我們假設您正在實現一個變更服務 A、服務 B 和 服務 C 的需求,其中 A 依賴於 B,且 B 依賴於 C。在單體應用程式中,您可以簡單地修改相應的模塊、整合變更並一次性部署他們。相反,在微服務中您需要仔細規劃和協調出現的變更至每個服務。例如,您需要更新服務 C,然後更新服務 B,最後更新服務 A。幸運的是,大多數變更只會影響一個服務,需要協調的多服務變更相對較少。

部署基於微服務的應用程式也是相當複雜的。一個單體應用可以很容易地部署到基於傳統負載均衡器的一組相同伺服器上。每個應用程式實例都配置有基礎設施服務的位置(主機和埠),比如資料庫和消息代理。相比之下,微服務應用程式通常由大量的服務組成。例如,據 Adrian Cockcroft 瞭解到,Hailo 擁有 160 個不同的服務,Netflix 擁有的服務超過 600 個。

每個服務都有多個運行時實例。還有更多的移動部件需要配置、部署、擴展和監控。此外,您還需要實現服務發現機制,使得服務能夠發現需要與之通信的任何其他服務的位置(主機和埠)。比較傳統麻煩的基於票據(ticket-based)和手動的操作方式無法擴展到如此複雜程度。因此,要成功部署微服務應用程式,需要求開發人員能高度控制部署方式和高度自動化。

一種自動化方式是使用現成的平臺即服務(PaaS),如 Cloud Foundry。PaaS 為開發人員提供了一種簡單的方式來部署和管理他們的微服務。它讓開發人員避開了諸如採購和配置 IT 資源等煩惱。同時,配置 PaaS 的系統人員和網路專業人員可以確保達到最佳實踐以落實公司策略。

自動化微服務部署的另一個方式是開發自己的 PaaS。一個普遍的起點是使用集群方案,如 Kubernetes,與 Docker 等容器技術相結合。


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

-Advertisement-
Play Games
更多相關文章
  • JavaScript 語法是一套規則,它定義了 JavaScript 的語言結構。 JavaScript 值 JavaScript 語句定義兩種類型的值:混合值和變數值。 混合值被稱為字面量(literal)。變數值被稱為變數。 JavaScript 字面量 書寫混合值最重要的規則是: 寫數值有無小 ...
  • 裝飾模式: 1、定義:動態地給一個對象增加一些額外的職責,就增加對象功能來說,裝飾模式比生成子類實現更為靈活 2、模型結構: (1)抽象構件(Component):定義一個抽象介面以規範準備接收附加責任的對象 (2)具體構件(ConcreteComponent):實現抽象構件,通過裝飾角色為其添加一 ...
  • 職責鏈模式(Chain of Responsibility): 在現實生活中,常常會出現這樣的事例:一個請求需要多個對象處理,但每個對象的處理條件或許可權不同。如公司員工報銷差旅費,可審批的領導有部分負責人、副總經理、總經理等,但每個領導能審批的金額是不同的,不同的金額需要找相應的領導審批,也就是說要 ...
  • # -*- coding: utf-8 -*-"""Spyder Editor This is a temporary script file.tensor flow 之線性回歸模式2019-oct-5""" import tensorflow as tfimport numpy as npimpo ...
  • 本文主要講解Spring Boot 整合Jwt 認證的示例,詳細內容,詳見文末源碼。 ...
  • time模塊 作用:列印日期,做時間轉換。 import timeimport datetime #示例一:sleep()print("start to sleep.....")time.sleep(5) #讓程式停止5秒print("wake up...") #示例二:時間戳print(time. ...
  • 高強度訓練第二十天總結:Mybatis面試題 什麼是Mybatis? 1. Mybatis 是一個半 ORM(對象關係映射)框架,它內部封裝了 JDBC,開發時 只需要關註 SQL 語句本身,不需要花費精力去處理載入驅動、創建連接、創建 statement 等繁雜的過程。程式員直接編寫原生態 sql ...
  • CAP定理與BASE理論 CAP定理 2000 年 7 月,加州大學伯克利分校的 Eric Brewer 教授在 ACM PODC 會議上提出 CAP 猜想。2年後,麻省理工學院的 Seth Gilbert 和 Nancy Lynch 從理論上證明瞭 CAP。之後,CAP 理論正式成為分散式計算領域 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...