【虹科乾貨】如何構建彈性、高可用的微服務?

来源:https://www.cnblogs.com/hongcloudtech/archive/2023/11/17/17838244.html
-Advertisement-
Play Games

微服務架構可以更快地推出新產品,幫助產品更輕鬆地擴展,並更好地響應客戶需求。憑藉多種現代數據模型、在任何情況下的容錯性、用於隔離的多租戶功能以及在多個環境中部署的靈活性,Redis Enterprise 使開發人員和運營商能夠針對微服務架構優化他們的數據層。 ...


基於微服務的應用程式可實現戰略性數字轉型和雲遷移計劃,對於開發團隊來說,這種架構十分重要。那麼,如何來構建彈性、高可用的微服務呢?Redis Enterprise給出了一個完美的方案。

 

文況速覽:

 

  • 什麼是微服務架構?
  • 為什麼微服務很重要?
  • Redis Enterprise:微服務的完美方案
  • 微服務架構的設計模式
  • 適合微服務架構的 Redis 企業功能

 

 

 

一、什麼是微服務架構

 

正如著名的微服務專家 Chris Richardson 所定義的那樣,微服務架構是一種將應用程式構建為低耦合服務集合的架構風格,這些服務具有高度的可維護性和可測試性,可獨立部署,受特定業務領域的約束,並由小型團隊負責。微服務架構可以快速、頻繁、可靠地交付大型複雜應用程式。

 

 

 Monolith架構 vs. 微服務架構

 

 

 

二、為什麼微服務很重要

 

基於微服務的應用程式可實現戰略性數字轉型和雲遷移計劃

 

 

 

1.微服務是一種架構風格,有助於開發團隊更快地創建更好的軟體,並最大限度地降低應用現代化的成本和複雜性。這種架構風格及其相關的軟體開發文化使微服務開發團隊能夠按照自己的發佈周期運作,擁抱端到端產品所有權,並採用基於持續集成/持續交付的 DevOps 框架。這樣的好處是,企業可以縮短新服務開發的上線時間,通常可將以月為單位的項目縮短至以天為單位。

 

 

2.微服務可加速數據層雲遷移。這是因為微服務主要依賴於雲原生 NoSQL 資料庫。2021 IDC InfoBrief 調查顯示,NoSQL 資料庫正在取代內部部署的關係型資料庫,因為後者不是為雲或獨立發佈周期而構建的。

 

 

 

此外,一些企業無法一次性將其傳統的單體應用遷移到雲原生應用。微服務可實現子域從單體架構向現代技術棧進行增量遷移。

 

 

 

三、Redis Enterprise:微服務的完美方案

 

1.微服務規模的性能

 

在微服務環境中,需要實時運行的服務必須平衡網路開銷。Redis Enterprise 為所有 Redis 數據類型和模型提供亞毫秒級延遲。 此外,它可以立即線性擴展,以滿足幾乎任何吞吐量需求。

 

 

 2.為容錯和恢復而設計

 

為確保您的應用程式具有故障恢復能力,Redis Enterprise 採用了無共用集群架構。它在各個故障級別都具有容錯能力:在進程層面、單個節點甚至跨基礎架構可用區自動進行故障切換。它還包括可調整的持久性和災難恢復能力。

 

 

3.利用快速靈活的數據模型降低複雜性

 

Redis Enterprise允許開發人員為他們的微服務架構和域驅動設計選擇最適合他們的性能和數據訪問要求的數據模型,同時在單個數據平臺上保持多租戶部署的隔離。

 

 

4.利用原生 Kubernetes 部署簡化操作

 

Redis Enterprise 提供統一的操作界面,可減少技術學習成本、簡化操作並降低服務延遲。

 

針對 Kubernetes Redis Enterprise 運營商為您提供一致的自動化部署,從而降低風險。這讓開發團隊能夠專註於創新和業務價值。

 

 

5.可跨雲跨地域適應

 

Redis Enterprise 可部署在任何地方:任何雲平臺、內部部署、多雲或混合雲架構。

 

 

 

 

四、微服務架構的設計模式

 

1.微服務查詢緩存

 

獨立或有界上下文是微服務架構的一個重要特征。作為領域驅動設計的一部分,每個服務都可以擁有一個專用資料庫,該資料庫有自己獨特的數據模型和SLAService Level Agreement,服務水平協議性能目標。查詢緩存是一種常用於縮短微服務響應時間的緩存模式,其工作原理是在每個微服務旁部署 Redis Enterprise 緩存,以提供單一業務上下文中所需的數據。(也就是說,它只服務於一個微服務)。

 

 

 

Redis Smart Cache 是一個開源庫,可將緩存無縫添加到任何符合 JDBC 標準的平臺、應用程式或微服務中,在提高查詢性能的同時降低操作複雜性,而且無需更改應用程式代碼。Redis Enterprise 支持多種數據模型,可輕鬆實現多租戶部署,保持數據隔離的同時,不降低性能。

 

 

 

 

2.通過 CQRS 緩存跨域共用數據

 

微服務需要快速訪問數據,但當數十或數百個微服務試圖從同一個緩慢的磁碟資料庫中讀取數據時,就會產生許多問題。跨域數據需要實時提供給每個微服務,而且不能超出其重點業務環境和目標的範圍。

 

 

 

命令查詢責任隔離(Command-Query Responsibility Segregation, CQRS)是微服務架構中一種重要的預取緩存模式,它將讀取(查詢)和寫入命令分離開來,這使應用程式能夠將數據寫入速度較慢的基於磁碟的 SQL 資料庫,同時使用 Redis Enterprise 中集成的變更數據捕獲(CDC)功能預取和緩存該數據,以實現高速讀取。這樣,其他需要數據的微服務就能立即獲得這些數據。

 

 

 

 

3.全局數據的 API 網關緩存

 

微服務應用程式可以在 API 網關級別緩存全局訪問數據,以分發和加速所有服務都會訪問的數據。通常情況下,這些數據包括會話數據(如用戶 ID 和偏好設置)和驗證數據(令牌、授權狀態和許可權)。這樣,所有服務都能實時獲得頻繁請求的數據。結果如何?減少應用延遲,同時不打破每個微服務業務上下文的界限。

 

 

 

API 網關上還可以使用 Redis Enterprise 實現速率限制,即在一定時間範圍內對 API 請求的數量進行計量。這可以防止系統超載,並防止 DDoS 攻擊。

 

 

 

 

4.用於服務間通信的非同步消息傳遞

 

微服務必須在不破壞隔離的情況下相互通信狀態、事件和數據,而且必須保持解耦。常見的解決方案是在架構中引入發佈-訂閱消息代理,即讓服務間通信由事件驅動並最終保持一致,並將微服務之間的每條消息都視為一個事件。

 

 

 

Redis Streams 是一種不可變的按時間排序的日誌數據結構,可讓服務(生產者)發佈非同步消息,多個消費者可訂閱這些消息。可以對其進行配置,以處理不同的交付保證、支持消費者群組,並應用與 Apache Kafka 主題分區類似的其他功能。更棒的是,Redis Streams 可幫助在後端創建報告、分析、審計和取證分析。

 

 

 

 

五、適合微服務架構的 Redis 企業功能

 

1.雙活備份

 

微服務架構有許相互多連接的服務,但它面臨著與單體應用程式相同的性能需求。為儘量減少延遲,數據應儘可能靠近服務。您還需要確保資料庫在發生故障或更新衝突時彼此保持一致。Redis Enterprise 可以部署為雙活、無衝突複製的資料庫,以處理來自多個本地服務安裝的更新,而不會影響延遲或數據一致性,併在發生故障時提供連續性服務。

 

 

 

2.多種數據模型

 

Redis Enterprise 提供多種數據結構(哈希值、字元串、流、列表等)和模型,包括 JSON、搜索、時間序列和圖形,可讓您選擇最適合您的微服務域、性能和數據訪問要求的數據模型,這一切都在一個數據平臺中實現。

 

 

 

3.多用戶資料庫

 

在微服務架構的資料庫設計中,單個 Redis Enterprise 集群可為多個不同的服務提供資料庫,每個服務都有自己的獨立實例,並針對給定的工作負載進行了調整。每個資料庫實例的部署、擴展和建模都獨立於其他實例,同時利用相同的集群環境,在不增加操作複雜性的情況下隔離服務之間的數據。

 

 

 

4.靈活跨雲

 

微服務提供了極大的技術靈活性,選擇在哪裡部署資料庫也不例外。Redis Enterprise 可以部署在任何地方:任何雲平臺、企業內部、多雲或混合雲架構。它還可在 KubernetesPivotal Kubernetes Service (PKS) Red Hat OpenShift 上使用。

 

 

 

5.本地 Kubernetes 容器編排和管理

 

容器與企業部署微服務應用程式密切相關,並有助於企業部署微服務應用程式。Kubernetes 是容器部署、調度和編排的標準平臺。Redis 是在容器上運行的頂級資料庫技術,Docker hub 啟動次數超過 20 億次。用於 Kubernetes Redis Enterprise Operator 提供:自動可擴展性、持久存儲捲、簡化的資料庫端點管理和零停機時間滾動升級。它可多個 Kubernetes 平臺和雲托管服務上使用

 


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

-Advertisement-
Play Games
更多相關文章
  • Kubernetes 是用於編排容器化應用程式的雲原生系統。最初由 Google 創建,如今由 Cloud Native Computing Foundation(CNCF)維護更新。 Kubernetes 是市面上最受歡迎的集群管理解決方案之一。它自動化容器化應用程式的部署、擴展和管理,允許管理和 ...
  • 可以少去理解一些不必要的概念,而多去思考為什麼會有這樣的東西,它解決了什麼問題,或者它的運行機制是什麼? React 1. React 起源和發展(是什麼?) React 是用於構建用戶界面的 JavaScript 庫,起源於 Facebook 的內部項目,該公司對市場上所有 JavaScript ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 日常開發中,我們經常遇到過tooltip這種需求。文字溢出、產品文案、描述說明等等,每次都需要寫一大串代碼,那麼有沒有一種簡單的方式呢,這回我們用指令來試試。 功能特性 支持tooltip樣式自定義 支持tooltip內容自定義 動 ...
  • 小程式作為目前一種輕量、便捷的應用、目前應用越來越廣泛了。 很多沒有開發經驗的開發同學可能初次接觸就是小程式開發,為了詳細講解下小程式開發的步驟,我會按照小程式的開發流程一步一步從零開始給大家介紹下如何開發支付寶小程式,後續教程中會更新最新版 demo 給到大家。 ...
  • 一、項目背景 公司和第三方合作開發一個感測器項目,想要通過電腦或者手機去控制項目現場的感測器控制情況。現在的最大問題在於,現場的邊緣終端設備接入的公網方式是無線接入,無法獲取固定IP,所以常規的HTTP協議通信就沒法做,現在打算使用MQTT來實現雲平臺和邊緣終端(感測器)之間的雙向通信。 二、術語定 ...
  • 一個有必要實現的需求 因為項目中需要使用canvasTexture(一個threejs3d引擎中的材質類型),繪製大量的圖片,每次使用都會請求大量的oss圖片資源,雖然重覆請求會有磁碟緩存但畢竟這個磁碟緩存時效過短, 這裡需要瞭解一下知識才能正常閱讀。 Transferable objects ht ...
  • 遇到的問題:將長度為40的數組數據賦值<el-table></el-table>,我發現loading沒有效果,後面發現是頁面卡住了,loading直接沒有出現。 經過查詢資料,發現<el-table>會有卡頓的問題,看到有的博主推薦使用一款叫umy-ui的插件,我就試了試,發現卡頓的問題解決了。 ...
  • 由於我司的業務特性,需要 APP 能夠支持即時在無網路的場景下,也能夠正常使用 APP 的功能 那麼,為了讓一個用 web 前端實現的 APP 能夠在無網路的場景下,也能夠正常運行程式,這其中的離線方案就需要實現幾個關鍵點: 代碼的離線、更新 數據的下載、上傳、更新 本篇就想來講一講,我們在離線應用 ...
一周排行
    -Advertisement-
    Play Games
  • 當使用Autofac處理一個介面有多個實現的情況時,通常會使用鍵(key)進行區分或者通過IIndex索引註入,也可以通過IEnumerable集合獲取所有實例,以下是一個具體的例子,演示如何在Autofac中註冊多個實現,並通過構造函數註入獲取指定實現。 首先,確保你已經安裝了Autofac Nu ...
  • 本篇將分享Prometheus+Grafana的監控平臺搭建,並監控之前文章所搭建的主機&服務,分享日常使用的一些使用經驗本篇將配置常用服務的監控與面板配置:包括 MySQL,MongoDB,CLickHouse,Redis,RabbitMQ,Linux,Windows,Nginx,站點訪問監控,已... ...
  • 使用Aspirate可以將Aspire程式部署到Kubernetes 集群 工具安裝 dotnet tool install -g aspirate --prerelease 註意:Aspirate 正在開發中,該軟體包將作為預覽版進行版本控制,--prelease 選項將獲得最新的預覽版。 容器註 ...
  • 前言 本文要說的這種開發模式,這種模式並不是只有blazor支持,js中有一樣的方案next.js nuxt.js;blazor還有很多其它內容,本文近關註漸進式開發模式。 是的,前後端是主流,不過以下情況也許前後端分離並不是最好的選擇: 小公司,人員不多,利潤不高,創業階段能省則省 個人開發者,接 ...
  • 在.NET中,Microsoft.Extensions.Logging是一個靈活的日誌庫,它允許你將日誌信息記錄到各種不同的目標,包括資料庫。在這個示例中,我將詳細介紹如何使用Microsoft.Extensions.Logging將日誌保存到MySQL資料庫。我們將使用Entity Framewo ...
  • chatgpt介面開發筆記3: 語音識別介面 1.文本轉語音 1、瞭解介面參數 介面地址: POST https://api.openai.com/v1/audio/speech 下麵是介面文檔描述內容: 參數: { "model": "tts-1", "input": "你好,我是饒坤,我是ter ...
  • 前面兩篇文章主要是介紹瞭如何解決高併發情況下資源爭奪的問題。但是現實的應用場景中除了要解決資源爭奪問題,高併發的情況還需要解決更多問題,比如快速處理業務數據等, 本篇文章簡要羅列一下與之相關的更多技術細節。 1、非同步編程:使用async和await關鍵字進行非同步編程,這可以避免阻塞線程,提高程式的響 ...
  • 大家好,我是棧長。 Nacos 2.3.0 前幾天正式發佈了,新增了不少實用性的新功能,真是史上最強版本。 Nacos 2.3.0 還真是一個比較重要的大版本,因為它涉及了太多重大更新,今天棧長給大家來解讀下。 Nacos 先掃個盲: Nacos 一個用於構建雲原生應用的動態服務發現、配置管理和服務 ...
  • IDEA的遠程開發功能,可以將本地的編譯、構建、調試、運行等工作都放在遠程伺服器上執行,而本地僅運行客戶端軟體進行常規的開發操作即可,舊版本IDEA目前不支持該功能.,本例使用的是IDEA2023.2.5版本 下麵介紹如何在IDEA中設置遠程連接伺服器開發環境並結合Cpolar內網穿透工具實現無公網 ...
  • 本文解釋為啥會有響應式編程,為什麼它在開發者中不太受歡迎,以及引入 Java 虛擬線程後它可能最終會消失。 命令式風格編程一直深受開發者喜愛,如 if-then-else、while 迴圈、函數和代碼塊等結構使代碼易理解、調試,異常易追蹤。然而,像所有好的東西一樣,通常也有問題。這種編程風格導致線程 ...