現代化的 App 開發-訊息傳遞
訊息導向應用程式涵蓋許多架構 - 元件之間的資料傳輸可能是定義完善的分散式與融合式處理管線的一部分,或者元件可能會將訊息發布到獨立發展的多個獨立下游系統。共有三個通用現代化訊息傳遞模型,每個模型都具備共用及不同的應用程式需求:
事件串流
Event Streaming 應用程式會擷取必須即時處理之大量資料和高速串流。原始資料必須進行處理,以擷取其他應用程式元件可能使用的洞察分析、進行監控,或儲存供日後分析使用。

maf-messaging-streaming.png 圖解說明
maf-messaging-streaming-oracle.zip
此事件串流處理應用程式範例使用 Oracle Cloud Infrastructure Streaming 或 Oracle Transactional Event Queues (TEQ) 作為基礎訊息傳遞解決方案、Oracle Cloud Infrastructure Functions 用於即時處理,以及使用 Oracle Autonomous Database 作為備份存放區。
發布 - 訂閱
Publish-subscribe 或 pub/sub 是一種通訊模式,可讓資料產生器將資料發布至特定主題,然後藉由訂閱這些主題來使用任意數目的下游消費者。生產者與消費者之間的耦合相當流暢,因此消費者可以獨立發展,而不會影響上游生產商。

maf-messaging-publisers-subscribers.png 圖解說明
maf-messaging-publisers-subscribers-oracle.zip
此範例顯示如何使用 Oracle Cloud Infrastructure Streaming 或 Oracle TEQ 來實行發佈 / 子訊息傳遞樣式。
訊息佇列
訊息佇列可啟用分散式狀態性處理,其中上游與下游元件緊密結合,並實作應用程式工作流程。訊息傳遞解決方案必須支援語意 (例如最少一次傳遞),以確保在使用訊息之前不會遺失訊息。

maf-messaging-queuing.png 圖解說明
maf-messaging-queuing-oracle.zip
此範例說明如何使用 Oracle Cloud Infrastructure Queue 或 Oracle TEQ 來實行訊息佇列。
設計原則
- 將應用程式建置為使用 REST API 進行通訊的服務套件
使用業界標準 API (例如 Kafka 和 JMS) 提供應用程式互通性,並以無縫接軌的方式建立混合雲和多雲訊息傳遞應用系統。Oracle Cloud Infrastructure (OCI) 串流提供 Kafka 相容 API,Oracle Transaction Event Queues (TEQ) 支援 Kafka 和 JMS API。Kafka 和 JMS 兩者都受到第三方產品支援。例如,您可以使用 Confluent Kafka JMS 連線器,在 Oracle TEQ 和 Kafka 之間傳輸訊息。您也可以使用部署在 Oracle Container Engine for Kubernetes 叢集上的 Kafka Connect,與第三方產品連線。Oracle Cloud Infrastructure Queue 可以使用 RESTful API 定義 (含 OpenAPI 規格) 或使用業界標準 STOMP 通訊協定來呼叫。
- 使用託管服務來排除應用程式開發和作業的複雜性
使用具有內建基礎架構維護和安全補丁的完全管理服務,例如 Oracle Autonomous Database (ADB) 的 OCI Streaming、OCI Queue 以及 Oracle TEQ and Advanced Queuing (AQ) 功能。這些服務具備高可用性,可跨可用性網域自動複寫,並支援調整規模自動化以因應不斷變化的負載。
- 讓應用程式層維持無狀態
訊息相關狀態 (例如訊息佇列中的位置) 不應儲存在應用程式或本機檔案系統上,因為這樣做可能會在應用程式執行處理失敗時導致資料遺失。應用程式可能會快取訊息內容以進行處理,但傳訊解決方案應保持所有傳訊資料的單一事實來源。相關描述資料 (例如訊息佇列中的位置) 應儲存在資料庫或物件儲存體中,以避免遺失訊息並確保冪等作業。這有助於復原故障,同時也讓服務在不遺失正確性的情況下更容易向上或向下調整。
- 工具端對端監督與追蹤功能
維持對應用程式狀況、效能以及作業狀態的授權瞭解。您可以使用 Oracle Cloud Observability and Management Platform 服務組合,從資料產生器和用戶到訊息管道本身,獲得應用程式堆疊所有層面的可見性和可行洞察力。監控佇列長度和處理持續時間,以找出錯誤和瓶頸,並偵測訂閱主題的服務發生問題。
- 透過自動化資料複製和故障復原,消除單一故障點
將訊息傳遞資料備份至持續性儲存體,以滿足法規遵循的需求。使用跨區域備份進行災害復原。將等候性併入訊息傳遞應用程式,例如在 OCI 佇列中使用訊息可見性逾時。將無法復原的錯誤寫入個別串流、死信佇列或永久儲存,而不封鎖主要執行管線。
- 導入自動化的深度防禦方法,保護您的 App 及其資料
導入 Oracle Cloud Infrastructure Identity and Access Management (IAM) 原則,讓只有授權的使用者能夠建立、傳送或接收 OCI 串流和佇列的資料。使用專用端點和服務閘道保護訊息傳遞端點的存取,以應用最低連線能力原則,限制來自網際網路的存取。使用 OCI Streaming、OCI Queue 及 TEQ 的立即可用功能加密靜態和傳輸中的資料,以實現資料機密性。不過,如果您需要增加金鑰輪換的擁有權,請使用 Oracle Cloud Infrastructure Vault 服務安全地管理您的主要金鑰。
架構

maf-messaging.png 圖解描述
使用 OCI Streaming 導入事件串流處理和發布 / 子訊息傳遞模式,以及 Oracle Cloud Infrastructure Queue 以導入訊息佇列。使用 Oracle Autonomous Database 保存已處理的事件資料。OCI 函數可在下游應用程式元件使用事件資料或保存至資料庫之前,用來處理事件資料。
針對您的應用程式和資料庫以及訊息傳遞服務使用專用子網路,以實行網路隔離。使用專用端點保護對串流的存取。使用 Oracle Cloud Infrastructure Identity and Access Management (IAM) 原則限制對佇列的存取
使用 Oracle Cloud Infrastructure Object Storage 來保留長期訊息。使用無伺服器服務 (例如服務連線器) 以無縫接軌的方式將資料從 OCI 串流移至物件儲存,並啟用物件儲存的跨區域備份,以達成多區域備份。在容錯的 Oracle Container Engine for Kubernetes (OKE) 環境上部署的 Kafka MirrorMaker 2.0 跨區域災害復原策略,以非同步方式在串流之間複寫資料。此設定會啟用「復原時間目標 (RTO)」與「復原點目標 (RPO)」分鐘數。使用遠端 VCN 對等互連,確保資料傳輸時可將延遲降到最低。
使用死信件佇列來隔離有問題的訊息。建立佇列時,會自動建立死信佇列。死信佇列可協助您避免失敗的訊息封鎖主要執行管線。接著可以分析死信佇列中的訊息,以判斷失敗的原因。
將已處理的訊息倒推至應用系統,例如物件儲存這類外部儲存體。查詢外部存放區以偵測並捨棄重複項目。將可輕易復原的錯誤分類,並允許重新執行訊息。
此架構使用下列服務和技術:
- 串流處理
Oracle Cloud Infrastructure Streaming 提供完全託管、可擴展且持久的儲存解決方案,可擷取連續的大量資料串流,讓您即時使用及處理這些資料。您可以使用「串流處理」來擷取大量資料 (例如應用系統日誌、作業遙測、Web 點擊串流資料),或用於在發布/訂閱訊息傳遞模型中持續且循序產生及處理資料的其他使用案例。
- 佇列
Oracle Cloud Infrastructure 佇列提供可擴展的系統來處理訊息,同時處理複雜的管理工作,例如至少一次保證處理、追蹤及從屬端隔離。此集中式服務也管理訊息順序與處理狀態,讓無狀態從屬端處理作業卸載游標追蹤。
- 函數
Oracle Cloud Infrastructure Functions 是一個完全託管、多租用戶、可高度擴展、隨選、Functions-as-a-Service (FaaS) 平台。它由 Fn 專案開放原始碼引擎提供技術支援。函數可讓您部署程式碼,然後直接呼叫程式碼或觸發程式以回應事件。Oracle Functions 使用 Oracle Cloud Infrastructure Registry 中代管的 Docker 容器。
- 服務連線器
Oracle Cloud Infrastructure Service Connector Hub 是一個雲端訊息匯流排平台,可協調 OCI 中服務之間的資料移動。您可以使用服務連接器將資料從來源服務移至目標服務。服務連接器也可讓您選擇性地指定要在資料傳遞到目標服務之前,對其執行的工作 (例如函數)。
您可以使用 Oracle Cloud Infrastructure Service Connector Hub 快速建置安全資訊和事件管理 (SIEM) 系統的記錄日誌聚總架構。
資料庫中心替代架構
此架構使用「交易事件佇列 (TEQ)」在現代化應用程式中實作訊息傳遞模式。TEQ 是 Oracle Autonomous Database 的內建功能。

maf-messaging-alternate.png 圖解的描述
maf-messaging-alternate-oracle.zip
此架構不需使用外部串流或佇列服務,並提供交易訊息傳遞功能,可簡化常見的微服務模式。
TEQ 將資料和訊息處理結合在可擴充的基礎架構中,可簡化生命週期管理、安全性和災害復原,同時提供高效能。TEQ 支援常見的傳訊模式,包括串流、佇列及 pub/sub。您可以使用 TEQ 跨傳訊和資料庫作業實作交易,並輕鬆實作傳訊模式,例如交易寄件匣和剛性傳訊,而且只需少許或完全不需要額外的程式碼。Oracle TEQ 可為資料庫中執行的應用程式提供一次完整的訊息。這表示您不需要維護訊息 ID 來檢查重複的訊息,或在應用程式層次建立等冪用戶。TEQ 支援事件處理中典型的小型訊息,以及與業務工作流程相關的較大有效負載,也可以作為安全事件網狀組織。
透過外部串流或佇列服務,簡化了狀態管理。事件與訊息會儲存在應用程式使用的相同資料庫中。這可讓您輕鬆達成和維護事件、訊息和應用程式變更之間的一致性。如果發生時間點復原或災害復原的失敗,所有項目 (事件、訊息以及應用程式資料) 都會自動復原到一致的狀態。
TEQ 受益於 Autonomous Database 的高可用性。TEQ 中的訊息資料會自動備份,並受到 ADB 使用 Autonomous Data Guard 進行跨區域複製保護。您可以使用 Oracle Real Application Clusters 和 Oracle Active Data Guard (兩者都是 Oracle Autonomous Database 的內建功能) 以高可用性方式部署 Oracle TEQ。Oracle Real Application Clusters 在區域內提供可用性,而 Oracle Active Data Guard 則提供跨區域災害復原保護。
如果您的應用程式執行下列任一動作,請使用此架構:
- 需要實行訊息佇列,並且需要如交易寄件匣等語意
- 不需要對資料庫和訊息子字串進行獨立調整
此架構使用下列服務與技術:
- 交易事件佇列 (TEQ) 和進階佇列 (AQ)
交易事件佇列 (TEQ) 和進階佇列 (AQ) 是與 Oracle Database 整合且功能豐富的訊息佇列系統。交易事件佇列 (TEQ) 是高效能分割的記憶體內實行,每個佇列有多個事件串流。「進階佇列 (AQ)」適用於較簡單的工作流程使用案例。這些功能運用 Oracle Database 來保存訊息,並提供高傳輸量和擴展性。
- 函數
Oracle Cloud Infrastructure Functions 是一個完全託管、多租用戶、可高度擴展、隨選、Functions-as-a-Service (FaaS) 平台。它由 Fn 專案開放原始碼引擎提供技術支援。函數可讓您部署程式碼,然後直接呼叫程式碼或觸發程式以回應事件。Oracle Functions 使用 Oracle Cloud Infrastructure Registry 中代管的 Docker 容器。
非建議的架構
-
單石訊息與服務匯流排應用程式
訊息傳遞解決方案 (例如 RabbitMQ) 可透過開放標準和 API 支援與其他元件的整合。但是,這些解決方案需要大量的 SME 管理工作,因此在沒有自我管理的複雜拓樸時,可能不提供分散式冗餘和高可用性。
-
自助式雲端或內部部署環境中的 Kafka 叢集
雖然此解決方案提供擴展性和高可用性,但需要重要的特殊開發人員知識和廣泛的 SME 營運管理負荷。選取此選項之前,請先仔細考量,因為生產前置時間與高總持有成本 (TCO) 的風險。
注意事項
實行「訊息」設計樣式時,請考量這些實行選項。
根據您的應用程式需求選擇正確的訊息傳遞平台
基礎平台與服務可能類似,並共用通用功能。不過,每個平台都有獨特的功能和優點,這可能會與應用系統需求相符。例如:
- 如果您的應用程式需要即時的高傳輸量訊息傳遞平台,提供訊息重新執行和發布子功能,請使用 OCI 串流或交易事件佇列。
- 如果您需要可擴展且可靠的點對點緩衝區進行非同步移動資料,請使用交易事件佇列。
- 使用服務連線器中心 (SCH) 啟用與基礎架構資源的整合。
- 設計新的微服務與 Oracle Autonomous Database 整合的訊息傳遞時,請在資料庫中使用交易事件佇列 (TEQ)。
公共個案研究
Oracle Streaming Based Architecture
Tango Eye 將監視影片轉換為零售業的可作用洞察力。
- Oracle Cloud Infrastructure (OCI) 串流是針對各種微服務提供低強度的發布/訂閱訊息傳遞系統。
- Oracle Cloud Infrastructure Functions 會執行無伺服器工作,而不會進行任何工程監督。
- Oracle Cloud Infrastructure Object Storage 的生命週期原則可自動歸檔和永久刪除資料,既可降低成本,又不會縮減 Tango Eye AI 型分析的價值。
Oracle TEQ 架構
FedEx 針對每天提供 1550 萬個包裹的應收帳款,使用 Oracle E-Business Suite 和 Oracle TEQ 所建立的業務事件管理程式。
- FedEx 使用 Exadata Cloud Service 將 E-Business Suite 搬移至 Oracle Cloud Infrastructure Object Storage。E-Business Suite 工作流程和商業事件系統完全建立在 Oracle Advanced Queuing (AQ) 訊息上。
- Oracle AQ 易於使用,且適合工作流程協調。對於高傳輸量事件,Oracle TEQ 是以每個佇列有多個事件串流取代的高效能下拉式清單,可與 apache Kafka 互通。
部署
- 前往 GitHub 。
- 複製或下載儲存區域到您的本機電腦。
- 遵循
README
文件中的說明。