成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

微服務中如何設計高擴展、易維護的“數(shù)據(jù)網(wǎng)格”?

原創(chuàng)
開發(fā) 架構(gòu) 開發(fā)工具
在本文中,我們先介紹數(shù)據(jù)網(wǎng)格的基本概念、屬性、以及能夠提供的服務,然后討論了如何設計可擴展的數(shù)據(jù)網(wǎng)格,以滿足實際場景的業(yè)務需求。

【51CTO.com原創(chuàng)稿件】在本文中,我們先介紹數(shù)據(jù)網(wǎng)格的基本概念、屬性、以及能夠提供的服務,然后討論了如何設計可擴展的數(shù)據(jù)網(wǎng)格,以滿足實際場景的業(yè)務需求。

[[314899]]

圖片來自 Pexels

在本文中,我們將先介紹數(shù)據(jù)網(wǎng)格(Data Grid)的基本概念、屬性、以及能夠提供的服務,然后討論如何設計可擴展的數(shù)據(jù)網(wǎng)格,以滿足實際場景的業(yè)務需求。

什么是數(shù)據(jù)網(wǎng)格?

數(shù)據(jù)網(wǎng)格是一組能夠提供共享數(shù)據(jù)管理的服務,它可以通過網(wǎng)格狀的結(jié)構(gòu),去訪問源自各種應用程序與服務的異構(gòu)數(shù)據(jù)。

在技術(shù)實現(xiàn)上,我們通常可以采用功能強大的中間件應用程序和服務,實現(xiàn)對于源于各種應用請求的數(shù)據(jù)輸入與查詢。

網(wǎng)格中的數(shù)據(jù)往往可以通過諸如 REST、以及 JSON 格式的 API 被訪問到。這些數(shù)據(jù)既可以被保存到磁盤上,也能夠備份到另一個數(shù)據(jù)庫里。

不同的服務可以將 JSON 格式的數(shù)據(jù)保存到網(wǎng)格之中,并在不到一毫秒的時間內(nèi)實現(xiàn)數(shù)據(jù)查詢(類似于緩存)。

以下便是數(shù)據(jù)網(wǎng)格的基本屬性:

  • 使用 API(基于 REST 的 JSON 格式)從網(wǎng)格進行數(shù)據(jù)訪問。
  • 其本質(zhì)上具有真正的彈性,即:可以水平縮放而沒有上限。
  • 能夠支持任何體量的數(shù)據(jù)。
  • 具有耐用性,可應對各種宕機和系統(tǒng)故障。
  • 提供低延遲的響應。

它的選配屬性則包括:

  • 可以利用諸如:JWT、TSL 客戶端驗證等方案,對網(wǎng)格中的每一種數(shù)據(jù)請求進行授權(quán)。
  • 能夠清除數(shù)據(jù),并為更多相關(guān)數(shù)據(jù)留出空間。
  • 能夠?qū)?shù)據(jù)持久地保存到磁盤上。
  • 能夠從諸如:RDBMS 或 NoSQL 存儲等其他數(shù)據(jù)源,進行數(shù)據(jù)的熱加載(hot-load)。

數(shù)據(jù)網(wǎng)格的使用

在一個真正的微服務架構(gòu)系統(tǒng)中,每一項服務都擁有自己的私有數(shù)據(jù)庫(即:每個服務模型都配有一個數(shù)據(jù)庫)。

如果其中的任何一項服務需要橫跨多個服務獲取數(shù)據(jù)的話,那么我們就需要以諸如:JSON、XML 或二進制格式,來處理這些服務的響應。

而有些請求既可能使用的是 REST 標準的 HTTP(S)請求,也可能使用 SOAP 請求,還有可能使用 RPC 等請求。

不過,真正的挑戰(zhàn)并非在技術(shù)上,而是在處理諸如安全異常、數(shù)據(jù)驗證、握手、網(wǎng)絡、數(shù)據(jù)解析等失敗的情況下,微服務將如何應對。

在實際應用中,我們常常會碰到高度依賴性的問題。也就是說:生產(chǎn)者(producer)服務中的任何變更都可能會更改響應的結(jié)構(gòu),而消費者(consumer)服務也可能需要跟著適應此類變更。

如果消費者服務僅從其他服務中查詢數(shù)據(jù)(而非請求任何計算結(jié)果),那么該方式則可能無效。

為了解決上述問題,我們引入了數(shù)據(jù)網(wǎng)格的方法,該方法幾乎能夠提供任意數(shù)量的自定義數(shù)據(jù)存儲,并且具有高度可擴展性和易于維護的低延遲響應。

在此,我們將 Apache Ignite(https://ignite.apache.org/,以下簡稱為 Ignite)作為數(shù)據(jù)網(wǎng)格設計中的主要組件之一,由它提供具有持久性、彈性和分布式的內(nèi)存平臺。

此外,Ignite 還提供了多種緩存選項,可連接 RDBMS 和 NoSQL 存儲,以及計算服務等功能。

數(shù)據(jù)定義

通常,若要為基礎架構(gòu)構(gòu)建數(shù)據(jù)網(wǎng)格,所有的微服務都應當發(fā)布各自寫入網(wǎng)格的數(shù)據(jù)格式。

例如:用戶服務(即:管理某個系統(tǒng)中所有用戶信息的服務)應當發(fā)布所有具有 upsert 和 delete 操作的用戶信息,以及用戶數(shù)據(jù)結(jié)構(gòu)的定義。

同時,此類數(shù)據(jù)定義應當能夠支持版本控制,以便任何新的服務都可以查詢到特定的最新版本。

據(jù)此,所有相關(guān)的消費者服務也都可以從“數(shù)據(jù)網(wǎng)格”中查詢到數(shù)據(jù)定義,進而構(gòu)建相應的服務功能。

以下是一個已發(fā)布的用戶數(shù)據(jù)結(jié)構(gòu)(版本 1)的代碼示例。其對應的 URL 為:

https:///grid/datadefinition&type=user&version=1.

如下是對于用戶數(shù)據(jù)定義版本 2 的查詢代碼,其對應的 URL 為:

https:///grid/datadefinition&type=user&version=2.

高級設計

我們可以使用某個在線購物網(wǎng)站為例,來展示數(shù)據(jù)網(wǎng)格的系統(tǒng)設計。該購物網(wǎng)站是采用各種微服務(例如:用戶服務、訂單服務、產(chǎn)品目錄服務、以及其他服務)來構(gòu)建的。

這些微服務有助于實現(xiàn)從各種目錄中訂購產(chǎn)品,并最終將其交付給客戶。下圖是數(shù)據(jù)網(wǎng)格的完整工作流程:

各個組件服務

數(shù)據(jù)層

這是數(shù)據(jù)網(wǎng)格的核心,其中部署了 Apache Ignite 的服務器端模式設置,并構(gòu)成了“Ignite 服務器群集”。

在此,Ignite 提供了如下可用于構(gòu)建可擴展網(wǎng)格的功能:

  • 通過內(nèi)存中緩存,實現(xiàn)低延遲的響應。
  • 分布式的持久存儲。
  • 彈性,即:通過添加節(jié)點,實現(xiàn)水平擴展。
  • 容錯,即:數(shù)據(jù)復制,以及在節(jié)點出現(xiàn)故障時的自動負載均衡。
  • 針對磁盤或數(shù)據(jù)庫的數(shù)據(jù)復制和持久性。

Ignite 也可以在無主控的架構(gòu)上工作,并通過拆分其他節(jié)點,只向群集組中添加額外的內(nèi)存內(nèi)(in-memory)緩存空間。

另外,通過 Ignite 提供的各種緩存配置,您可以按需對其進行調(diào)整和增強。此類配置包括:數(shù)據(jù)持久性選項、緩存的逐出策略、以及數(shù)據(jù)復制等方面。

數(shù)據(jù)網(wǎng)格的 API 網(wǎng)關(guān)

該網(wǎng)關(guān)可以將查詢請求路由到適當服務器上。同時,多個服務也可以被注冊到該網(wǎng)關(guān)上,以便根據(jù)真實的負載,來處理和調(diào)節(jié)各種請求。

查詢服務與更新服務

這是一些大規(guī)模的應用服務,可用于查詢數(shù)據(jù),或?qū)?shù)據(jù)更新并添加到數(shù)據(jù)層,也就是“Ignite 服務器群集”上(有關(guān)數(shù)據(jù)層的可視化,請參見上圖)。

查詢服務設置將使用 Ignite 的客戶端庫(即:配置為客戶端模式)連接到 Ignite 服務器群集,并成為 Ignite 群集拓撲中的一部分。

如果這些服務并不會被作為 Ignite 的客戶端節(jié)點加入群集拓撲,那么我們可以使用 Ignite 的瘦客戶端(如:Java Thin Client 或 Node.js Thin Client)去連接到 Ignite 服務器集群,并執(zhí)行各種緩存操作。

而且,每個服務都能夠更新 Ignite 服務器群集中的一到多個緩存。

將數(shù)據(jù)推送到數(shù)據(jù)網(wǎng)格雖然會產(chǎn)生開銷,但是我們可以通過使用異步機制,或者將數(shù)據(jù)推送到某些 Kafka 的 topic 上來解決。

在此類 topic 中,數(shù)據(jù)網(wǎng)格的更新服務(Data Grid Update Service)會將其推送到 Ignite 的服務器群集之中。

注意:應用服務會使用 Ignite 的客戶端庫,來進行各項緩存操作。在默認情況下,它們通過加入 Ignite 服務器群集拓撲,來充當服務器節(jié)點,以參與緩存任務。

當然,這并不是必需的。我們需要在 Ignite 的配置文件中啟用客戶端模式標志(即:設置為 true),或者在應用服務的初始化時,調(diào)用某個類似的 Ignite API。

有關(guān) Ignite 客戶端和服務器設置的更多信息,請參見:https://apacheignite.readme.io/docs/clients-vs-servers

使用數(shù)據(jù)網(wǎng)格的示例

在上圖中,最左側(cè)的組件是微服務,其中每個服務都有自己的數(shù)據(jù)庫。在傳統(tǒng)的非數(shù)據(jù)網(wǎng)格方法中,上例中的訂購服務需要針對用戶服務,去查詢用戶的相關(guān)信息(例如:用戶的電子郵件與地址等)。

而在圣誕節(jié)、感恩節(jié)等銷售旺季,此類訂購服務可能會遇到大量的交易請求。那么此類訂購服務就必須調(diào)用相應的用戶服務,以獲取與交易數(shù)量成比例的用戶相關(guān)信息。

當然,訂購服務可以緩存用戶的信息,以避免多個網(wǎng)絡的調(diào)用。或者,為了滿足不斷增加的用戶服務負載,我們還可以向集群添加更多的用戶服務節(jié)點,以處理各種讀取請求。不過,總的說來,數(shù)據(jù)網(wǎng)格更適合于處理此類業(yè)務場景。

當某個微服務有數(shù)據(jù)更新時,該數(shù)據(jù)將會被數(shù)據(jù)網(wǎng)格更新服務推送到數(shù)據(jù)網(wǎng)格之中。Ignite 服務器進而根據(jù)緩存配置將數(shù)據(jù)插入到緩存里。

此外,由于 Ignite 具有持久性,因此我們可以添加任意數(shù)量的節(jié)點,以支持來自各種服務的大型數(shù)據(jù)集。

這些 Ignite 服務器群集既可以通過原生持久性來啟用,也可以連接到數(shù)據(jù)庫上,以便保留各種緩存數(shù)據(jù)。

當某個微服務需要訪問特定的數(shù)據(jù)時,它會通過傳遞必要的查詢參數(shù),來使用數(shù)據(jù)網(wǎng)格的查詢服務。

由于查詢服務連接著 Ignite 服務器,因此它可以從緩存中查詢到數(shù)據(jù)。當然,如果數(shù)據(jù)不在緩存中,卻已經(jīng)啟用了持久性,那么 Ignite 則可以從持久性存儲中加載相應的數(shù)據(jù)。

在極端情況下,如果緩存和持久性存儲中的數(shù)據(jù)都不可用,那么查詢服務則可以通過內(nèi)置的邏輯,將請求重新路由到相應的微服務上,以獲取數(shù)據(jù)并將其插入到緩存中。

同時,該響應也會將請求發(fā)送給消費者服務,以便在下一個請求到來時,直接從數(shù)據(jù)網(wǎng)格本身獲取對應的數(shù)據(jù)。

由于插入到緩存中的數(shù)據(jù)是基于更新服務來部署緩存的,因此它確保了在任何微服務中的更新數(shù)據(jù),都會在數(shù)據(jù)網(wǎng)格中可用。

此外,由于 Ignite 具有持久性,因此我們可以添加任意數(shù)量的節(jié)點,以支持來自各種服務的大型數(shù)據(jù)集。

總結(jié)

本文提供了將消費者服務與生產(chǎn)者服務相解耦的思路,進而讓用戶能夠靈活地向微服務群添加更多的服務,以構(gòu)建和部署新的功能集。

【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】

 

責任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2023-09-21 11:20:46

2017-09-13 13:42:09

微服務緩存架構(gòu)

2022-03-29 10:57:39

運維服務架構(gòu)

2022-09-06 10:46:34

服務網(wǎng)格可觀測性微服務

2022-08-08 10:09:58

服務網(wǎng)格架構(gòu)

2020-11-15 23:48:57

服務網(wǎng)格微服務網(wǎng)絡網(wǎng)絡技術(shù)

2019-08-29 08:00:00

微服務架構(gòu)服務網(wǎng)格

2022-09-06 10:29:27

無服務器Serverless

2015-07-28 14:35:40

2020-07-13 07:00:03

微服務服務網(wǎng)格架構(gòu)

2019-09-25 09:50:29

高可用微服務系統(tǒng)

2019-07-18 12:41:52

數(shù)字化服務網(wǎng)格微服務

2020-10-10 10:37:54

微服務架構(gòu)技術(shù)API

2019-10-21 16:54:48

數(shù)據(jù)庫設計SQL

2022-08-07 22:11:25

微服務架構(gòu)

2023-11-07 09:54:27

架構(gòu)演進

2017-09-25 12:11:14

高可用微服務架構(gòu)

2016-09-08 10:40:48

易維幫助臺

2018-03-12 09:05:48

高并發(fā)微服務架構(gòu)

2020-12-09 09:21:41

微服務架構(gòu)數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 色吊丝2288sds中文字幕 | 精品国产免费一区二区三区演员表 | 亚洲三级在线观看 | 久久久久亚洲精品中文字幕 | 国产欧美一区二区三区国产幕精品 | 亚洲成人av在线播放 | а_天堂中文最新版地址 | 中文字幕精品一区二区三区精品 | 中文字幕 视频一区 | 国产精品久久久久久久久久久免费看 | 国产福利资源 | 三级成人在线 | 久久久视 | 亚洲视频免费在线播放 | 国产一区二区欧美 | a级在线免费 | av网站推荐| 亚洲高清免费视频 | 日本精品999 | 在线观看a视频 | 国产高清视频一区二区 | 一级黄色片在线看 | 一区二区三区日本 | 一级做a爰片性色毛片16美国 | 久久丝袜| 亚洲一区二区久久久 | 亚洲天天干 | 日韩中文字幕在线播放 | 最新免费av网站 | 久久久国产一区二区三区 | 欧美一区二区三区在线观看 | 日韩精品一区二区久久 | 亚洲成人三级 | av影音资源 | 国产成人精品一区二区三区网站观看 | 精品国产一区二区国模嫣然 | 欧美极品一区二区 | 欧美激情综合网 | www.五月婷婷.com | 国产精品毛片无码 | 一本一道久久a久久精品蜜桃 |