什麼是微服務

来源:https://www.cnblogs.com/haizai/archive/2019/05/15/10872669.html
-Advertisement-
Play Games

什麼是微服務 簡而言之 : 微服務架構風格這種開發方法,是以開發一組小型服務的方式來開發一個獨立的應用系統的.其中每個小型服務都運行在自己的進行中,並經常採用HTTP資源API 這樣輕量的機制來相互通信.這些服務圍繞業務功能進行構建,並能通過全自動的部署機制來進行獨立部署.這些微服務可以使用不同的語 ...


什麼是微服務
簡而言之 : 微服務架構風格這種開發方法,是以開發一組小型服務的方式來開發一個獨立的應用系統的.其中每個小型服務都運行在自己的進行中,並經常採用HTTP資源API
這樣輕量的機制來相互通信.這些服務圍繞業務功能進行構建,並能通過全自動的部署機制來進行獨立部署.這些微服務可以使用不同的語言來編寫,並且可以使用不同的數據
存儲技術.對這些微服務我們僅做最低限度的集中管理.
微服務具備的特性
1. 每個微服務可獨立運行在自己的進程里;
2. 一系列獨立運行的微服務共同構建起了整個系統;
3. 每個服務為獨立的業務開發,一個微服務一般完成某個特定的功能,比如 : 訂單管理,用戶管理等.
4. 微服務之間通過一些輕量的通信機制進行通信,例如通過REST API或者RPC的方式進行調用.
5. 全自動部署機制.
微服務優點
1. 易於開發和維護;
一個微服務只關註一個特定的業務功能,所以它的業務清晰,代碼量較少.開發和維護單個微服務相對是比較簡單的.而整個應用是由著若幹個微服務構建而成的.所以
整個應用也會維持在可控狀態.
2. 啟動較快;
單個微服務代碼量較少,所以啟動會比較快.
3. 局部修改容易部署;
單體應用只要修改,就得重新部署整個應用,微服務解決了這樣的問題.一般來說,對某個微服務進行修改,只需要 重新部署這個服務即可.
4. 技術棧不受限;
在微服務中,我們可以結合項目業務及團隊的特點,合理的選擇技術棧.例如某些服務可使用 關係型資料庫MySQL;某些微服務有圖形計算的需求,我們可以使用Neo4j;甚至可以
根據需要,部分微服務使用java開發,部分微服務使用NodeJS進行開發.
5. DevOps
微服務帶來的挑戰
1. 運維要求較高;
更多的服務意味著更多的運維投入.在單體架構中,只需要保證一個應用的正常運行;而在微服務中,需要保證幾十甚至幾百個服務的正常運行與協作,這給項目的運維帶來了很大挑戰.
2. 分散式的複雜性;
使用微服務構建的是分散式系統.對於一個分散式系統,系統容錯,網路延遲,分散式事務等都給我們帶來了很大的挑戰.
3. 介面調整成本高;
微服務之間通過介面進行通信.如果修改某一個微服務的API,可能所有使用了該介面的微服務都需要做調整.
4. 重覆勞動.
很多服務可能會使用到相同的功能,而這個功能並沒有達到分解為一個微服務的程度,這個時候,可能各個服務都會開發這一功能,從而導致代碼重覆.
微服務設計原則
1. 單一職責原則;
2. 服務自治原則;
3. 輕量級通信原則;
4. 介面明確原則.

雪崩效驗:
當一臺伺服器請求發送到另一臺伺服器,另一臺伺服器由於宕機無法響應,這樣請求的伺服器會一直發送請求,會堆積大量的線程和進程,當堆積到一定程度以後系統資源被
消耗殆盡,這樣這台伺服器也就宕機了,如果其他伺服器訪問這台伺服器也會以此類推的出現無法響應,導致請求伺服器等待響應,無法獲取結果,這樣一臺伺服器接著一臺伺服器
宕機,形成雪崩效驗.

微服務容錯處理方案 :
1. 為請求設置超時
通過網路請求其他服務時,都必須設置超時。正常情況下,一個遠程調用一般在幾十毫秒內就能得到響應了。如果依賴的服務不可用,或者網路有問題,響應時間將會變得很長(幾十秒)。
通常情況下,一次遠程調用對應著一個線程/進程。如果響應太慢,這個線程/進程就得不到釋放。而線程/進程又對應著系統資源,如果得不到釋放的線程/進程越積越多,服務資源就會被耗盡,從而導致服務不可用。
因此,必須為每個請求設置超時,讓資源儘快地得到釋放。
 
2. 使用斷路器
試想一下,如果家庭里沒有斷路器,電流過載了(例如功率過大、短路等),電路不斷開,電路就會升溫,甚至是燒斷電路、起火。有了斷路器之後,當電流過載時,會自動切斷電路(跳閘),從而保護了整條電路與家庭的安全。當電流過載的問題被解決後,只要將關閉斷路器,電路就又可以工作了。
同樣的道理,當依賴的服務有大量超時時,再讓新的請求去訪問已經沒有太大意義,只會無謂的消耗現有資源。譬如我們設置了超時時間為1秒,如果短時間內有大量的請求(譬如50個)在1秒內都得不到響應,就往往意味著異常。此時就沒有必要讓更多的請求去訪問這個依賴了,我們應該使用斷路器避免資源浪費。
斷路器可以實現快速失敗,如果它在一段時間內偵測到許多類似的錯誤(譬如超時),就會強迫其以後的多個調用快速失敗,不再請求所依賴的服務,從而防止應用程式不斷地嘗試執行可能會失敗的操作,這樣應用程式可以繼續執行而不用等待修正錯誤,或者浪費CPU時間去等待長時間的超時。斷路器也可以使應用程式能夠診斷錯誤是否已經修正,如果已經修正,應用程式會再次嘗試調用操作。
斷路器模式就像是那些容易導致錯誤的操作的一種代理。這種代理能夠記錄最近調用發生錯誤的次數,然後決定使用允許操作繼續,或者立即返回錯誤。
Spirng Clound為開發人員提供了快速構建分散式系統中的一些通用模式,是基於SpringBoot的一整套實現微服務的框架.他提供了微服務開發所需的配置管理 ,服務發現,短路器,
智能路由,微代理,控制匯流排,全局鎖,決策競選,分散式會話和集群狀態管理等組件.
子項目:
Spring Cloud Config就是我們通常意義上的配置中心.Spring Cloud Config把應用原本放在本地文件的配置抽取出來放在中心伺服器,本質是配置信息從本地遷移到雲端.
從而能夠提供更好的管理,發佈能力.
Spring Cloud Config分服務端和客戶端,服務端負責將git(svn)中存儲的配置文件發佈成REST介面,客戶端可以從服務端REST介面獲取配置.但客戶端並不能主動感知到配置
的變化,從而主動去獲取新的配置,這需要每個客戶端通過POST方法觸發各自的/refresh.

Spring Cloud Eurka提供在分散式環境下的服務發現,服務註冊的功能.
Spring Clound Netflix,該項目是Spring Cloud的子項目之一,主要內容是對Netflix公司一系列開源產品的包裝,它為Spring Boot應用提供了自配置的Netflix OSS整合.
通過一些簡單的註解,開發者就可以快速的在應用中配置一下常用模塊並構建龐大的分散式系統.它主要提供的模塊包括 : 服務發現 (Eureka), 斷路器(Hystrix), 智能路由(Zuul)
,客戶端負載均衡(Ribbon)等.
Netflix Eureka : 雲端負載均衡,一個基於REST的服務,用於定位服務,以實現雲端的負載均衡和中間層伺服器的故障轉移.
Netflix Hystrix : 容錯管理工具,旨在通過控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力.
Netflix Zuul : 邊緣服務工具,是提供動態路由,監控,彈性,安全等邊緣服務.
Netflix Archaius : 配置管理API,包含一系列配置管理API,提供動態類型化屬性,線程安全配置操作,輪詢框架,回調機制等功能.

Spring cloud Hystrix熔斷器
斷路器(Cricuit Breaker)是一種能夠在遠程服務不可用時自動熔斷(打卡開關),併在遠程服務恢復時自動恢復(閉合開關)的設施.
斷路器(Cricuit Breaker)是一種能夠在遠程服務不可用時自動熔斷(打開開關),併在遠程服務恢復時自動恢復(閉合開關)的設施,Spring Cloud通過Netflix組件
的Hystrix組件提供斷路器,資源隔離與自我修複功能.
Spring Cloud Zuul 服務網關
Spring Cloud Bus : 事件,消息匯流排,用於在集群(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署;
Spring Cloud for Cloud Foundry : 通過Oauth2協議幫到服務到CloudFoundry,CloudFoundry是VMware推出的開源PaaS平臺.
Spring Cloud Sleuth : 日誌收集工具包,馮總了Dapper,Zipkin和HTrace操作.
Spring Cloud Data Flow : 大數據操作工具,通過命令行方式操作數據流.
Spring Cloud Security : 安全工具包,為你的應用程式添加安全控制,主要是指OAuth2.
Spring Cloud Consul : 封裝了Consul操作,consul是一個服務發現與配置工具,與Docker容器可以無縫集成.
Spring Cloud Zookeeper : 操作Zookeeper的工具包,用於使用zookeeper方式的服務註冊和發現.
Spring Cloud Stream : 數據流操作開發包,封裝了與Redis,Rabbit,Kafka等發送接收消息.
Spring Cloud CLI : 基於SpringBoot CLI,可以讓你命令行方式快速建立雲組件.
Spring Cloud特點 :
1 : 約定優於配置;
2 : 開箱既用,快速啟動;
3 : 適用於各種環境
4 : 輕量級組件;
5 : 組件支持豐富,功能齊全.
6 : 選型中立.


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

-Advertisement-
Play Games
更多相關文章
  • react框架下,在頁面內載入顯示PDF文件,關於react-pdf-js的使用註意事項 之前做了一個需求,在註冊賬號的時候,讓用戶同意服務條款, 服務條款是一個PDF文件, 這就需要在react內載入PDF文件的插件了,今天特地做一個總結 我用的版本是4.0.1 然後在頁面內引入 import P ...
  • 前段時間遇到的一個需求,要求滑鼠懸停顯示使用描述, 用到了react-tooltip插件,今天寫一個總結 先看效果(為了方便參考,用的是原始樣式): 文檔參考地址: https://www.npmjs.com/package/react-tooltip 1, 首先在配置文件加上引用 2, 然後在頁面 ...
  • 摘要: 你所不知道的系列。 原文: "提高 JavaScript 開發效率的高級 VSCode 擴展之二!" 作者: "前端小智" "Fundebug" 經授權轉載,版權歸原作者所有。 作為一名業餘愛好者、專業人員,甚至是每月只有一次編程的開發人員,你必須知道,對於任何願意在工作中投入最大生產時間的 ...
  • 道路千萬條,安全第一條! 魔方結構解析 從魔方的外觀來看,可以有多種方式來表達它的組成,從而也有多種方式來形成一個魔方。如: 由六個面組成 由若幹層組成 由多個方塊組成 無論哪種方式,都可以製作魔方。只是,不同的方式對後續的其它操作會有影響,有些方式甚至會導致利用已有的特性無法直接表達。因此,在這項 ...
  • 1.代碼: ...
  • 工廠方法模式 定義 工廠方法(Factory Method)模式的意義是定義一個創建產品對象的工廠介面,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色 ...
  • saltstack遠程執行 安裝完Saltstack後可以立即執行shell命令,更新軟體包並將文件同時分不到所有受管系統。所有回覆都以一致的可配置格式返回。遠程執行參考文檔:http://docs.saltstack.cn/topics/tutorials/modules.html Salt命令的 ...
  • 最近做一個項目是關於採集指紋的系統,先給大家簡單介紹一下項目的主要功能: 該項目主要是做一個採集嬰幼兒的手掌指紋和掌紋的客戶端,並且通過服務端介面保存手掌指紋到阿裡雲oss存儲中。 同時後臺提供管理功能,對採集人員,系統角色許可權管理,同時提供嬰幼兒的手指指紋圖片的查看和分析功能。 系統分為三個子系統 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...