1 年經驗,你讓我精通微服務開發,過分嗎?
來源:哪吒程式設計
大家好,我是哪吒。
疫情已經過去一年了,可是,經濟貌似還沒有復甦的跡象,感覺更差了,今年是過去十年最差的一年,卻可能是未來十年最好的一年?
裁員風波,一波接一波,根本沒有停下來的跡象。
失業了怎麼辦?找工作呀~
這麼捲了嗎?初級程式設計師就要會微服務了。
10年前,會寫JSP+servlet+CRUD,我相信你已經很牛逼了,如果再會SSM,這就是妖孽啊,在業界完全可以橫著走; 5年前,會寫SpringBoot + Vue,直呼大佬 現在呢?Java程式設計師,人家都雲原生、大資料、區塊鏈了,你微服務都不會,找工作真的很難~
下面就簡單的說一下啥玩意兒是微服務~
一、服務描述
微服務中的服務描述是對微服務的功能、效能、介面和約束等關鍵特性的詳細定義和描述。
服務描述通常包括以下幾個方面的內容:
服務標識:用於唯一標識服務的名稱或ID。 服務功能:描述服務提供的核心功能和業務邏輯。這有助於其他團隊或開發人員瞭解服務的作用和目的。 介面定義:詳細說明服務的輸入和輸出介面,包括引數、返回值和可能的錯誤程式碼。這對於呼叫方來說至關重要,因為它們需要知道如何與服務進行通訊。 效能特性:描述服務的效能指標,如響應時間、吞吐量、併發支援等。這些資訊有助於呼叫方瞭解服務的能力和限制。 安全性:說明服務的安全特性和要求,如身份驗證、授權、加密等。確保服務的安全性是微服務架構中的重要考慮因素。 約束和限制:列出服務的使用約束和限制,例如頻率限制、資料大小限制等。這有助於呼叫方瞭解在使用服務時應遵循的規則。 文件和支援:提供有關服務的詳細文件,包括API文件、使用指南、故障排除等。此外,還可以提供支援渠道,如論壇、郵件列表或線上聊天等,以便呼叫方在需要時獲取幫助。
一個清晰、準確的服務描述對於微服務架構的成功至關重要。它有助於確保服務之間的互操作性,減少誤解和錯誤,並促進團隊之間的協作。因此,在設計和釋出微服務時,花時間精心編寫和維護服務描述是非常值得的。
二、註冊中心
服務提供者將自己的服務地址登記到註冊中心,服務消費者從註冊中心查詢所需要呼叫的服務地址,然後發起請求。
1、註冊中心的工作流程大白話:
各微服務啟動時,將自己的例項資訊(ip、埠、服務名等)註冊到註冊中心,註冊中心儲存這些資料。 服務消費者從註冊中心獲取到服務提供者的例項資訊,透過ip + 埠方式遠端呼叫服務提供者的介面。 各個微服務透過心跳來上報註冊中心,註冊中心以某個時間段有沒有接收到上報資訊,來決定是否下線某服務例項。 微服務發生變動時,如增加例項或ip變動,重新註冊資訊到註冊中心。這樣,服務消費者就無需改動,直接從註冊中心獲取最新資訊即可。
2、註冊中心的工作流程專業化:
服務註冊:當微服務例項啟動時,它會將自己的資訊(如IP地址、埠號、服務名稱等)註冊到註冊中心。這通常透過傳送一個註冊請求到註冊中心來完成。 服務儲存:註冊中心接收到服務例項的註冊資訊後,會將其儲存在登錄檔中。登錄檔是註冊中心的核心元件,用於儲存所有微服務例項的資訊。 服務發現:其他微服務例項或者客戶端在需要呼叫某個服務時,會向註冊中心發起服務發現請求。註冊中心會根據請求中的服務名稱,從登錄檔中查詢相應的服務例項資訊,並返回給請求方。 心跳檢測:為了確保登錄檔中服務例項資訊的準確性,註冊中心會定期向各個服務例項傳送心跳檢測請求。服務例項在接收到心跳檢測請求後,會返回一個響應,表明它仍然線上。如果註冊中心在一段時間內沒有收到某個服務例項的響應,就會將其從登錄檔中移除。 服務下線:當微服務例項停止執行時,它會向註冊中心傳送一個下線請求。註冊中心在接收到下線請求後,會將該服務例項從登錄檔中移除。 服務變更通知:如果登錄檔中的服務例項資訊發生變化(如新增、下線、IP地址變更等),註冊中心會向訂閱了該服務的客戶端或其他微服務例項傳送變更通知。這樣,客戶端或其他微服務例項就能及時獲取到最新的服務例項資訊。
三、註冊中心實現方式
註冊中心的實現主要涉及幾個問題:
註冊中心需要提供哪些介面,該如何部署? 如何儲存服務資訊? 如何監控服務提供者節點的存活? 如果服務提供者節點有變化如何通知服務消費者,以及如何控制註冊中心的訪問許可權。
1、註冊中心API
服務註冊介面:服務提供者透過呼叫此介面完成服務註冊,將自身的服務資訊告知註冊中心。 服務反註冊介面:服務提供者透過呼叫此介面完成服務登出,當服務提供者停止服務時,透過此介面通知註冊中心。 心跳彙報介面:服務提供者透過呼叫此介面完成節點存活狀態上報,以此告訴註冊中心自己仍在正常執行。 服務訂閱介面:服務消費者透過呼叫此介面完成服務訂閱,獲取可用的服務提供者節點列表,從而瞭解到當前系統中可用的服務資訊。 服務變更查詢介面:服務消費者透過呼叫此介面,獲取最新的可用服務節點列表,以便在服務提供者發生變化時及時更新自己的服務列表。
除此之外,為了便於管理,註冊中心還必須提供一些後臺管理的API,例如:
服務查詢API:允許管理員查詢當前註冊到註冊中心的所有服務的資訊,包括服務的名稱、IP地址、埠號、版本、狀態等。 服務統計API:提供服務的統計資訊,例如服務的總數、線上服務的數量、各個服務的例項數量等。 服務日誌查詢API:可以查詢和獲取服務的操作日誌,便於跟蹤和分析服務的問題。 服務健康檢查API:允許管理員手動觸發服務的健康檢查,檢查服務的心跳狀態、響應時間等健康指標。 服務下線API:當某個服務需要維護或升級時,管理員可以透過此API手動將服務下線,確保服務在不影響系統整體執行的情況下進行維護操作。 許可權管理API:註冊中心通常需要進行許可權控制,這些API允許管理員管理使用者、角色和許可權,確保只有授權的使用者才能訪問和修改註冊中心的資訊。 配置管理API:允許管理員動態修改註冊中心的配置,如修改服務的負載均衡策略、心跳檢測頻率等。 系統監控API:提供註冊中心的效能指標、執行狀態等資訊,幫助管理員實時監控註冊中心的健康狀況。
2、叢集部署
註冊中心作為服務提供者和服務消費者之間溝通的橋樑,它的重要性不言而喻。所以註冊中心一般都是採用叢集部署來保證高可用性,並透過分散式一致性協議來確保叢集中不同節點之間的資料保持一致。
選擇合適的註冊中心解決方案:首先,需要選擇一個支援叢集部署的註冊中心解決方案,例如Eureka、Consul、Nacos等。確保所選解決方案具有高可用性和可擴充套件性。 規劃叢集規模:根據實際需求和服務數量,規劃註冊中心的叢集規模。叢集中通常包含多個註冊中心節點,可以根據需要選擇3個、5個或更多的節點。 部署註冊中心節點:在每個節點上安裝和配置註冊中心軟體。確保不同的節點之間能夠相互通訊,並使用相同的配置和資料儲存方式。 配置叢集模式:在註冊中心的配置檔案中,配置叢集模式。將每個節點配置為叢集模式,並指定叢集中的其他節點資訊,以便它們可以互相發現和組成叢集。 資料同步:確保註冊中心節點之間的資料同步。使用合適的資料同步機制,如分散式資料庫或資料複製技術,確保每個節點都有相同的服務註冊資訊。 負載均衡:在客戶端或服務消費者中,配置負載均衡策略,使其能夠向叢集中的任何一個註冊中心節點發起服務請求。這樣可以分散請求負載,並提高系統的可用性。 監控與健康檢查:設定監控工具,監控叢集中每個註冊中心節點的健康狀況。透過定期的健康檢查機制,檢測節點的可用性,並在節點故障時進行相應的容錯處理。 故障轉移與恢復:配置故障轉移機制,當叢集中的某個節點發生故障時,其他節點能夠自動接管故障節點的服務。同時,設定自動恢復機制,確保故障節點恢復正常後能夠重新加入叢集。
透過以上的叢集部署方式,可以提高註冊中心的可用性、可擴充套件性和容錯能力,確保服務註冊與發現的穩定性和可靠性。
以開源註冊中心ZooKeeper為例,ZooKeeper叢集中包含多個節點,服務提供者和服務消費者可以同任意一個節點通訊,因為它們的資料一定是相同的,這是為什麼呢?這就要從ZooKeeper的工作原理說起:
每個Server在記憶體中儲存了一份資料,Client的讀請求可以請求任意一個Server。 ZooKeeper啟動時,將從例項中選舉一個leader(Paxos協議)。 Leader負責處理資料更新等操作(ZAB協議)。 一個更新操作成功,當且僅當大多數Server在記憶體中成功修改 。
透過上面這種方式,ZooKeeper保證了高可用性以及資料一致性。
3、服務健康狀態檢測
(1)註冊中心的服務健康狀態檢測可以透過以下幾種方式進行
長連線檢測:例如在Zookeeper中,客戶端和伺服器建立連線後,會在timeout週期內進行輪詢,重置timeout。如果發生了timeout,就說明這個會話結束,此節點不可用了,就從註冊中心刪除。 應用層檢測:對於一些特殊的場景,可能需要執行特殊的介面才能判斷服務是否可用。例如部署了資料庫的主備,資料庫的主備可能會在某些情況下切換,需要透過服務名對外提供訪問,保證當前訪問的庫是主庫。此時的健康檢查介面,可能就是一個檢查資料庫是否是主庫的MYSQL命令了。 心跳機制與檢測介面:一些服務無法上報心跳,但可以提供一個檢測介面由外部去探測。例如Nacos支援傳輸層(PIND或TCP)和應用層(如HTTP、Redis、MySQL、使用者自定義)的監控檢查。 白名單機制:用於防止上線時仍保留著開發的服務,增加白名單,只有白名單的服務才能呼叫。
(2)註冊中心服務健康狀態檢測的一些內容:
心跳檢測機制:註冊中心通常採用心跳檢測機制來判斷服務的健康狀態。服務提供者會定期向註冊中心傳送心跳訊息,以表明自己仍然存活。註冊中心會監控這些心跳訊息,如果在一定時間內未收到某個服務的心跳訊息,就認為該服務不健康或已下線。 健康檢查介面:服務提供者可以實現一個專門的健康檢查介面,供註冊中心呼叫以檢查服務的健康狀態。這個介面可以返回一些特定的健康指標,例如記憶體使用情況、資料庫連線狀態等。註冊中心定期呼叫這些介面,並根據返回的結果判斷服務的健康狀態。 服務響應時間檢測:註冊中心可以檢測服務的響應時間作為判斷服務健康狀態的指標之一。如果服務的響應時間過長或者不穩定,可能意味著服務出現問題或者負載過高。註冊中心可以透過模擬請求或者收集真實請求的資料來進行服務響應時間的檢測。 失敗重試機制:在服務健康狀態檢測中,可能會遇到網路故障、暫時性服務故障等情況導致檢測失敗。註冊中心應該實現失敗重試機制,當健康狀態檢測失敗時,可以再次發起檢測請求,以確保檢測的準確性。 告警與通知:當註冊中心檢測到服務健康狀態異常時,應及時觸發告警和通知機制。透過郵件、簡訊、電話等方式通知管理員或相關人員,以便及時介入處理,確保服務的正常執行。
需要注意的是,不同的註冊中心解決方案可能具有不同的健康狀態檢測方式和配置選項。在使用具體註冊中心產品時,應參考其文件和最佳實踐,正確配置和使用健康狀態檢測功能,以確保準確有效地檢測服務的健康狀態。
4、服務狀態變更通知
註冊中心的服務狀態變更通知是一項重要功能,用於將服務的狀態變更資訊實時通知給相關的服務消費者或其他感興趣的元件。以下是有關注冊中心服務狀態變更通知的一些內容:
釋出/訂閱模式:註冊中心通常採用釋出/訂閱模式來實現服務狀態變更通知。服務提供者將自己的服務狀態釋出到註冊中心,而服務消費者則向註冊中心訂閱感興趣的服務狀態。一旦服務的狀態發生變化,註冊中心會將這些變更通知傳送給訂閱者。 實時推送:註冊中心透過長連線、WebSocket或訊息佇列等技術,實現服務狀態變更的實時推送。這種方式可以確保服務消費者在第一時間獲取到服務狀態的變更,從而快速做出相應的處理。 變更事件:當服務狀態發生變化時,註冊中心會生成一個變更事件。該事件包含變更的服務資訊,例如服務的ID、名稱、IP地址、埠號、狀態等。服務消費者可以透過解析這些事件,獲取到所需的服務狀態資訊,並進行相應的邏輯處理。 過濾器與選擇器:註冊中心通常提供過濾器和選擇器機制,允許服務消費者根據特定的條件過濾和選擇感興趣的服務狀態變更通知。這樣可以避免服務消費者接收到無關或冗餘的通知,提高系統的效率和效能。 可靠性保證:為了確保服務狀態變更通知的可靠性,註冊中心應採用可靠的訊息傳遞機制,確保通知能夠成功送達訂閱者。同時,註冊中心還應提供重試、持久化儲存等機制,以處理可能的網路故障或訂閱者不可用等情況。
在使用註冊中心的服務狀態變更通知功能時,開發者和運維人員需要注意以下幾點:
確保註冊中心和服務消費者之間的網路連線穩定可靠,防止因網路問題導致通知失敗。 根據實際需求合理設定過濾器和選擇器,避免接收到過多或無關的通知,減少對系統資源的消耗。 及時處理和響應服務狀態變更通知,保證服務的可用性和一致性。
透過註冊中心的服務狀態變更通知功能,可以實現對服務狀態變化的實時感知和快速響應,提高系統的靈活性和可用性。
5、白名單機制
註冊中心的白名單機制是一種安全控制策略,用於限制只有經過授權的服務提供者才能註冊到註冊中心。這種機制可以確保只有可信的服務提供者能夠參與到服務註冊與發現的流程中,從而提高系統的安全性和可靠性。
在白名單機制下,註冊中心會維護一個白名單列表,其中包含了被授權的服務提供者的身份標識或特徵資訊。當一個服務提供者嘗試註冊到註冊中心時,註冊中心會首先驗證該服務提供者是否存在於白名單列表中。只有在白名單中的服務提供者才能成功註冊,否則將被拒絕訪問。
(1)白名單機制可以基於不同的維度來實現,例如:
基於身份認證:註冊中心可以要求服務提供者在註冊時提供身份憑證,如證照、API金鑰或身份驗證令牌等。註冊中心會驗證這些憑證的有效性,並檢查它們是否屬於白名單中的授權服務提供者。 基於IP地址過濾:註冊中心可以限制只有特定IP地址或IP地址範圍的服務提供者才能註冊。透過配置註冊中心的IP白名單,只有白名單中指定的IP地址才能訪問註冊介面。 基於服務後設資料:註冊中心可以要求服務提供者在註冊時提供一些額外的後設資料,例如服務名稱、版本號、所屬組織等。註冊中心可以根據這些後設資料來判斷服務提供者是否符合白名單的要求。
(2)白名單機制的好處包括:
提高安全性:透過限制服務提供者的註冊許可權,可以減少潛在的安全風險,防止未經授權的服務接入系統。 控制服務質量:白名單機制可以確保只有經過認證和授權的服務提供者才能參與服務註冊與發現,從而提高整體服務的質量和可信度。
需要注意的是,白名單機制需要謹慎配置和管理,以確保不會阻止合法的服務提供者註冊。同時,定期審查和更新白名單也是必要的,以適應系統變化和新的安全要求。
四、服務通訊
服務消費者在發起呼叫之前要明確幾個問題:
1、服務通訊採用什麼協議?
服務通訊可以採用多種協議,其中最常見的是HTTP、TCP、UDP、ICMP等。
HTTP協議是一種應用層協議,用於在客戶端和伺服器之間傳輸資料。它使用TCP連線進行通訊,可以用於請求/響應模型,支援跨平臺和跨網路的應用。
TCP協議是一種傳輸層協議,用於在計算機網路之間傳輸資料。它是一種面向連線的協議,提供可靠的資料傳輸服務,透過握手、確認、重傳和滑動視窗等技術實現資料包的順序傳輸和錯誤檢測。
UDP協議是一種傳輸層協議,用於在計算機網路之間傳輸資料。它是一種無連線的協議,不保證資料的可靠傳輸,但可以提供更快的速度和更少的開銷。
ICMP協議是一種網路層協議,用於在IP網路之間傳輸控制訊息。它用於診斷網路連線問題、報告錯誤和提供反饋資訊。
除了以上協議,還有ARP、RARP、BOOTP等協議用於網路層以下的通訊。例如,ARP協議用於將IP地址解析為硬體地址(MAC地址),RARP協議用於將硬體地址解析為IP地址,BOOTP協議用於動態配置網路裝置。
服務通訊採用什麼協議取決於具體的應用場景和需求。不同的協議具有不同的特點和適用範圍,需要根據實際情況進行選擇和配置。
2、資料傳輸採用什麼方式?
資料傳輸可以採用序列傳輸或並行傳輸。
序列傳輸是將資料流以序列方式在一條通道上傳輸,接收端如何從序列資料流中正確地劃分出傳送的一個個字元所採取的措施稱為字元同步。並行傳輸是將資料以成組的方式在兩條以上的並行通道上同時傳輸,不需另外措施就實現了收發雙方的字元同步。
此外,資料傳輸也可以採用同步傳輸和非同步傳輸方式。同步傳輸方式是指傳送方和接收方的時鐘訊號在傳送資料時以同一種速度運轉,透過在資料中加入特定的校驗位來實現資料的同步;非同步傳輸方式是指傳送方和接收方的時鐘訊號在傳送資料時以不同的速度運轉,透過在資料中加入起始位和停止位來實現資料的同步。
另外,根據資料傳輸的方向和時間關係,還可以分為單工、半雙工和全雙工資料傳輸。單工是指資料只能在一個方向上傳輸;半雙工是指資料可以在兩個方向上傳輸,但是必須交替進行;全雙工是指資料可以在兩個方向上同時傳輸。
資料傳輸可以採用序列傳輸或並行傳輸方式,也可以採用同步傳輸和非同步傳輸方式,根據實際需求進行選擇。同時,根據資料傳輸的方向和時間關係,還可以分為單工、半雙工和全雙工資料傳輸。
3、資料壓縮採用什麼形式?
通常資料傳輸都會對資料進行壓縮,來減少網路傳輸的資料量,從而減少寬頻消耗和網路傳輸時間,比如常見的JSON序列化、Java物件序列化和Protobuf序列化。
服務通訊中,資料壓縮通常採用以下形式:
序列化和反序列化:序列化是將資料結構或物件狀態轉化為可以儲存或傳輸的形式的過程,而反序列化則是從這種形式恢復到原始資料結構或物件狀態的過程。常見的序列化和反序列化方法包括JSON序列化、Java物件序列化以及Protobuf序列化等。 資料壓縮:在服務通訊中,通常會使用資料壓縮來減少網路傳輸的資料量,從而減少頻寬消耗和網路傳輸時間。例如,可以使用常見的壓縮演算法,如gzip、Deflate等對資料進行壓縮。
服務通訊中的資料壓縮採用的形式取決於具體的應用場景和需求。
五、服務監控
透過服務監控,瞭解服務是否正常,服務監控的流程如下:
1、指標收集
服務監控的指標收集包括以下方面:
系統監控指標:包括CPU負載、記憶體負載、磁碟負載、網路IO、磁碟IO、tcp連線數、程式數等。這些指標可以幫助瞭解伺服器的效能和資源使用情況。 應用監控指標:包括可用性、異常、吞吐量、響應時間、當前等待筆數、資源佔用率、請求量、日誌大小、效能、佇列深度、執行緒數、服務呼叫次數、訪問量、服務可用性等。這些指標可以幫助瞭解應用程式的效能和可用性。 業務監控指標:包括大額流水、流水區域、流水明細、請求筆數、響應時間、響應筆數等。這些指標可以幫助瞭解業務處理的速度和效率。 服務可用性監控:包括請求量、響應時間分佈等。這些指標可以幫助瞭解服務的可用性和響應速度。 關鍵介面監控:對關鍵介面進行監控,瞭解介面的效能和可用性。 網站伺服器監控指標和日誌收集:對網站伺服器的各項指標進行監控和收集,瞭解網站的效能和可用性。 基礎類資料:如註冊使用者數、日活使用者數、訪問量等,這些資料可以幫助瞭解服務的使用者數量和活躍度。
在收集這些指標時,通常會使用一些工具和技術,如介面採集、客戶端agent採集、透過網路協議主動抓取等。同時,還需要對收集到的資料進行處理和分析,以提供對服務監控的有用資訊,如生成報告、報警通知等。
2、資料處理
服務監控的資料處理包括以下步驟:
資料收集:透過各種監控工具和技術,收集伺服器的各項指標資料,如系統監控指標、應用監控指標、業務監控指標等。 資料清洗:對收集到的資料進行清洗和過濾,去除異常和無效資料,確保資料的準確性和完整性。 資料聚合:將收集到的資料進行聚合,通常包括介面維度聚合和機器維度聚合。介面維度聚合是將資料按照介面名維度進行聚合,得到每個介面的實時請求量、平均耗時等資訊;機器維度聚合是將資料按照呼叫的節點維度進行聚合,得到每個節點的實時請求量、平均耗時等資訊。 資料儲存:將聚合後的資料儲存到資料庫中,常用的資料庫包括索引資料庫和時序資料庫。索引資料庫以倒排索引的資料結構儲存,需要查詢時根據索引來查詢;時序資料庫以時序序列資料的方式儲存,查詢時按照時序如1min、5min等維度來查詢。 資料展示:透過視覺化工具如Kibana、Grafana等將監控資料繪製成報表,呈現給開發和運維人員。這些報表可以幫助他們瞭解服務的效能、可用性和異常情況,從而及時採取措施進行最佳化和調整。
服務監控的資料處理是透過收集、清洗、聚合、儲存和展示等步驟,將監控資料轉化為有用的資訊,幫助開發和運維人員更好地瞭解服務的狀態和效能,以便及時發現問題並採取相應的措施。
3、資料展示
資料經過處理後,將資料展示在Dashboard皮膚上,並且每隔10s等間隔自動重新整理,用作業務監控和報警等。
服務監控的資料展示主要包括以下幾種方式:
曲線圖:通常用於展示伺服器的效能指標,如CPU使用率、記憶體使用率、磁碟IO等。曲線圖可以實時展示這些指標的變化趨勢,幫助運維人員及時發現伺服器的瓶頸和異常。 餅狀圖:通常用於展示伺服器的資源佔比情況,如CPU使用率、記憶體使用率、磁碟空間等。餅狀圖可以直觀地展示各個資源的佔比情況,幫助運維人員更好地瞭解伺服器的資源分配情況。 格子圖:通常用於展示伺服器的請求量和響應時間等指標。格子圖可以實時展示每個介面的請求量、響應時間等細節資訊,幫助開發和運維人員更好地瞭解服務的效能狀況。 排行榜:用於展示各個服務的效能指標排名,如響應時間、請求量等。排行榜可以幫助開發和運維人員更好地瞭解服務的整體效能狀況和瓶頸所在。 報表:通常用於展示服務監控的歷史資料和統計資訊,如平均響應時間、請求量等。報表可以幫助開發和運維人員更好地瞭解服務的效能狀況和趨勢,以便及時發現問題並採取相應的措施。
服務監控的資料展示是透過將監控資料轉化為曲線圖、餅狀圖、格子圖、排行榜和報表等形式,幫助開發和運維人員更好地瞭解服務的狀態和效能,以便及時發現問題並採取相應的措施。
六、服務追蹤
除了需要對服務呼叫情況進行監控之外,還需要記錄服務呼叫經過的每一條鏈路,以及進行問題追蹤和故障定位。
服務追蹤的工作原理大致如下:
服務消費者發起呼叫前,會在本地按照一定的規則生成一個requestid,發起呼叫時,將requestid當作請求引數的一部分,傳遞給服務提供者。 服務提供者接收到請求後,記錄下這次請求的requestid,然後處理請求。如果服務提供者繼續請求其他服務,會在本地再生成一個自己的requestid,然後把這兩個requestid都當作請求引數繼續往下傳遞。
以此類推,透過這種層層往下傳遞的方式,一次請求,無論最後依賴多少次服務呼叫、經過多少服務節點,都可以透過最開始生成的requestid串聯所有節點,從而達到服務追蹤的目的。
七、服務治理
服務治理就是透過一系列的手段來保證在各種意外情況下,服務呼叫仍然能夠正常進行。
在生產環境中,你應該經常會遇到下面幾種狀況。
1、單機故障
通常遇到單機故障,都是靠運維發現並重啟服務或者從線上摘除故障節點。然而叢集的規模越大,越是容易遇到單機故障,在機器規模超過一百臺以上時,靠傳統的人肉運維顯然難以應對。而服務治理可以透過一定的策略,自動摘除故障節點,不需要人為干預,就能保證單機故障不會影響業務。
服務治理是指透過一系列的手段來保證在各種意外情況下,服務呼叫仍然能夠正常進行。對於單機故障,服務治理可以透過一定的策略,自動摘除故障節點,不需要人為干預,就能保證單機故障不會影響業務。
具體來說,針對單機故障,可以採取以下服務治理策略:
監控策略:對伺服器的各項指標進行實時監控,包括CPU使用率、記憶體使用率、磁碟IO等。一旦發現伺服器出現異常或故障,系統會自動觸發報警機制,通知運維人員及時處理。 容錯策略:在服務呼叫過程中,引入容錯機制,透過重試、降級等手段來降低單機故障對業務的影響。當某個節點出現故障時,系統會自動嘗試其他可用的節點,或者降低故障節點的權重,以保證服務的可用性和穩定性。 負載均衡策略:透過負載均衡技術,將服務請求分散到多個節點上,避免單節點負載過高或故障導致的業務中斷。透過負載均衡策略,可以有效地提高服務的可用性和穩定性。 快速恢復策略:在故障發生後,快速恢復服務是非常重要的。因此,服務治理需要提供快速恢復策略,包括備份節點、快速重啟等手段。當某個節點出現故障時,備份節點可以迅速上線接管業務,或者透過快速重啟技術,將故障節點恢復正常。
針對單機故障,服務治理需要採取一系列的策略和技術手段來保證服務的可用性和穩定性。透過對伺服器進行實時監控、引入容錯機制、負載均衡策略以及快速恢復策略等手段,可以有效地提高服務的可用性和穩定性,降低單機故障對業務的影響。
2、單IDC故障
你應該經常聽說某某App,因為施工挖斷光纜導致大批次使用者無法使用的嚴重故障。而服務治理可以透過自動切換故障IDC的流量到其他正常IDC,可以避免因為單IDC故障引起的大批次業務受影響。
服務治理對於單IDC故障的策略主要是透過冗餘和容錯機制來保證服務的可用性和穩定性。
具體來說,針對單IDC故障,可以採取以下服務治理策略:
冗餘設計:在IDC內部署時,採用冗餘設計,即同一個服務在多個節點上部署,當其中一個節點發生故障時,其他節點可以繼續提供服務。這種設計可以透過負載均衡技術實現,將服務請求分散到多個節點上,提高服務的可用性和穩定性。 容錯機制:在服務呼叫過程中,引入容錯機制,當某個節點發生故障時,系統會自動嘗試其他可用的節點,或者降低故障節點的權重,以保證服務的可用性和穩定性。這種機制可以透過重試、降級等手段實現。 快速恢復策略:在故障發生後,快速恢復服務是非常重要的。因此,服務治理需要提供快速恢復策略,包括備份節點、快速重啟等手段。當某個節點出現故障時,備份節點可以迅速上線接管業務,或者透過快速重啟技術,將故障節點恢復正常。 監控和報警機制:對IDC內部的服務進行實時監控,包括CPU使用率、記憶體使用率、網路IO等指標。一旦發現有節點發生故障或異常情況,系統會自動觸發報警機制,通知運維人員及時處理。
針對單IDC故障,服務治理需要採取冗餘設計、容錯機制、快速恢復策略以及監控和報警機制等手段來保證服務的可用性和穩定性。透過這些手段,可以有效地降低單IDC故障對業務的影響。
3、依賴服務不可用
比如你的服務依賴依賴了另一個服務,當另一個服務出現問題時,會拖慢甚至拖垮你的服務。而服務治理可以透過熔斷,在依賴服務異常的情況下,一段時期內停止發起呼叫而直接返回。這樣一方面保證了服務消費者能夠不被拖垮,另一方面也給服務提供者減少壓力,使其能夠儘快恢復。
服務治理對於依賴服務不可用的問題,需要採取一系列的策略和技術手段來保證服務的可用性和穩定性。
具體來說,針對依賴服務不可用的問題,可以採取以下服務治理策略:
服務降級:當依賴服務不可用時,可以採用服務降級策略,降低對依賴服務的依賴程度,避免因為依賴服務的問題導致整個業務的癱瘓。服務降級可以透過多種方式實現,如提供備份服務、使用熔斷機制等。 熔斷機制:在服務呼叫過程中,引入熔斷機制,當某個依賴服務響應時間過長或者出現異常時,可以自動觸發熔斷機制,切斷該服務的呼叫鏈,避免因為該服務的故障導致整個系統的癱瘓。 限流和限速:對於一些頻繁呼叫的依賴服務,可以採用限流和限速策略,避免因為過高的呼叫頻率導致系統負載過高或者依賴服務的不可用。 服務冗餘和負載均衡:在系統設計時,可以採用服務冗餘和負載均衡策略,將服務請求分散到多個節點上,避免單個節點故障導致的業務中斷。同時,也可以透過負載均衡技術實現服務的容錯和降級。 監控和報警機制:對系統中的各個服務進行實時監控,包括CPU使用率、記憶體使用率、網路IO等指標。一旦發現有服務出現異常或故障,系統會自動觸發報警機制,通知運維人員及時處理。
針對依賴服務不可用的問題,服務治理需要採取服務降級、熔斷機制、限流和限速策略、服務冗餘和負載均衡以及監控和報警機制等手段來保證服務的可用性和穩定性。透過這些手段,可以有效地降低依賴服務不可用對業務的影響。
八、服務釋出和引用
1、服務釋出
定義服務介面:首先,需要明確地定義服務的介面,包括介面名、引數和返回值型別。這樣,其他團隊或元件就能知道如何與該服務進行通訊。 實現服務:根據定義的介面,實現服務的具體邏輯。 服務註冊:將服務釋出到服務註冊中心(例如Consul、Eureka等),這樣其他服務就可以找到和呼叫它。 服務監控與日誌:為了確保服務的穩定性和可靠性,通常還要加入監控和日誌功能。
2、服務引用
服務發現:在需要呼叫某個服務的時候,呼叫方首先需要在服務註冊中心找到相應的服務。 服務呼叫:找到目標服務後,呼叫方會根據介面定義,構造相應的請求併傳送給目標服務。 處理響應:收到目標服務的響應後,呼叫方會處理該響應,完成一次服務呼叫。 錯誤處理與重試:如果服務呼叫失敗,呼叫方通常需要執行錯誤處理邏輯,例如重試或者返回錯誤資訊。
在這個過程中,服務通訊的協議選擇也非常重要。常見的通訊協議有HTTP/RESTful、gRPC、Thrift等。選擇合適的協議取決於具體需求,例如效能要求、跨平臺需求等。
對於RESTful API方式,它是基於HTTP或HTTPS協議的一種介面定義方式,被廣泛應用於微服務架構中。服務提供者透過部署程式碼到Tomcat等應用伺服器,並配置web.xml檔案,將介面以servlet的方式對外提供。消費者則透過HTTP或HTTPS協議呼叫這些介面。
對於XML配置方式,服務提供者首先需要定義介面,並實現介面。在服務提供者程式啟動時,會透過載入server.xml配置檔案將介面暴露出去。服務消費者程式啟動時,則會透過載入client.xml配置檔案來引入要呼叫的介面。
需要注意的是,服務釋出和引用通常需要遵循一定的規範和標準,以確保不同服務之間的互操作性。同時,隨著微服務架構的發展,出現了很多用於服務釋出、引用、監控和治理的工具和平臺,可以大大簡化這些工作。
九、總結
註冊中心可以說是微服務的關鍵,服務提供者和服務消費者不在同一個程式中執行,實現瞭解耦。
服務提供者可以隨意增加和刪除節點,透過健康狀態檢測,註冊中心可以保持最新的服務節點資訊,並將變化通知給訂閱服務的服務消費者。
註冊中心一般採用分散式叢集部署,來保證高可用性,並且為了實現異地多活,有的註冊中心還採用多IDC部署,這對資料一致性產生了很高的要求,這些都是註冊中心在實現時必要要解決的問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2993453/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Nuxt開發經驗分享,讓你踩少點坑!UX
- 微服務那麼火,我也該用微服務嗎?微服務
- Java學習過程中實戰開發經驗重要嗎?Java
- 你說你精通Redis,你看過持久化的配置嗎?Redis持久化
- 2年開發,我總結了7條經驗!
- 微服務實踐k8s&dapr開發部署實驗(1)服務呼叫微服務K8S
- 你知道什麼是微服務嗎?微服務
- 你問我答:現有的應用有必要做微服務改造嗎?微服務
- 你有開發過chrome外掛嗎?說說你的開發過程Chrome
- Android事件分發機制,你瞭解過嗎?Android事件
- 我真的能做好自媒體嗎?這幾年我做自媒體的經驗,分享給你
- 這些前端框架,讓你的開發更高效率,高質量,你用過嗎?前端框架
- 關於微服務,這些你都瞭解嗎-微服務介紹微服務
- 我來悟微服務(1)-夜觀天象微服務
- 微服務開發,這10個點你要知道微服務
- 微服務演進中的經驗和反思微服務
- 我的軟體開發中經驗教訓
- Laplace分佈運算元開發經驗分享
- 深入淺出微服務架構:一分鐘讓你輕鬆上手Docker容器微服務架構Docker
- 小白入門微服務(1) - RPC 初體驗微服務RPC
- 一年Java開發經驗,阿里巴巴五面(已offer)面經,我自己都沒有想到我會過Java阿里
- 2019年我們追過的jQuery,它的漏洞你知道嗎?jQuery
- 微服務異常太亂,我們如何分類?微服務
- 讓遠端成為本地,微服務後端開發的福音微服務後端
- 你瞭解微服務的超時傳遞嗎?微服務
- ? 沒 2 年 React Native 開發經驗,你都遇不到這些坑React Native
- 公司讓我去做開發,我咋搞
- 三年 React 開發經驗的我,遷移到 Vue 的心路歷程ReactVue
- 你問我答:微服務治理應該如何去做?微服務
- Go微服務開發指南Go微服務
- 2019年,你熬過去了嗎?
- 微服務開發攻略之淺析微服務架構微服務架構
- 使用 go micro 搭建微服務介面的經驗教訓Go微服務
- 作為一個Java開發你用過Jib嗎Java
- 都 2021 年了,Serverless 能取代微服務嗎?Server微服務
- 一年Node.js開發開發經驗總結Node.js
- 微服務1:微服務及其演進史微服務
- 沒用過微服務?別慌,丐版架構圖,讓你輕鬆拿捏面試官微服務架構面試