將 OCI 佇列與 OCI 函數整合以最佳化非同步工作流程

「Oracle Cloud Infrastructure (OCI) 佇列」服務可讓您以非同步方式在系統之間傳送訊息,讓您能夠分解系統並提升效能。其設計目的是處理大量交易資料,並確保處理訊息時不會遺失或重複。

OCI 佇列服務完全受管理,可依據產生器和用戶的傳輸量自動調整規模,使用開放標準支援與任何從屬端或產生器進行通訊,而且只需最少的努力。無伺服器應用程式通常依賴各種服務 (API 閘道、Functions 等) 的組合來正常運作。不過,為了讓這些分散式元件彼此通訊,「佇列」服務十分重要。它也可讓您的應用程式將通訊延伸至其他 OCI 元件,甚至在 OCI 之外。

架構

此參照架構會將範例 Python 應用程式部署到 Oracle Container Engine for Kubernetes (OKE),此架構會定期輪詢已設定的佇列以擷取新訊息、使用擷取的訊息呼叫已設定的函數,以及在成功執行時,從佇列中移除訊息。

當應用程式與 OCI 服務互動時,會以 instance_principal 的身分進行驗證。佇列和函數可位於任何區域,堆疊建立期間必須指定佇列和函數 OCID。如果必須在 Terraform 部署之後更新佇列和函數 OCID,您可以編輯 Kubernetes 部署使用者自建物件 (屬於建立的 OCI DevOps 專案的一部分)。

Terraform 部署包含建立 OCI DevOps 服務所需的管線和儲存區域,可自動執行將應用程式原始程式碼帶到生產環境所需的步驟。應用程式原始碼由 DevOps 程式碼儲存區域代管。使用者接著可以將程式碼確認至會觸發組建管線的啟動儲存區域。

下圖說明此參照架構。



queue-fn-automation-arch-oracle.zip

架構具有下列元件:

  • 區域

    Oracle Cloud Infrastructure 區域是一個本地化的地理區域,包含一或多個資料中心 (稱為可用性網域)。區域與其他區域無關,因此廣大的距離可加以區隔 (跨國家或甚至洲)。

  • DevOps 專案

    實行 CI/CD 工作流程所需之 DevOps 資源的邏輯群組。DevOps 資源可以是使用者自建物件、組建管線、部署管線、外部連線、觸發程式以及環境。DevOps 專案可讓您輕鬆地為所有 DevOps 資源啟用記錄、監控和通知。

  • 建置管線

    組建管線會從您的原始程式碼儲存區域取得確認 ID,並使用該原始程式碼執行您的組建指示。組建管線會定義組建處理作業的階段:建立、測試及編譯軟體使用者自建物件、將使用者自建物件傳遞至 OCI 儲存區域,以及選擇性地觸發部署。您可以在組建規格檔案中定義組建執行的流程和指示。

  • 代碼儲存庫

    由 DevOps 服務代管的專用 Git 儲存區域。您可以使用 OCI DevOps 程式碼儲存區域來儲存、管理及開發原始程式碼。

  • 部署管線

    提供一組使用者自建物件並將其部署至目標環境的一系列步驟。您可以透過定義可序列或平行執行的階段來控制軟體版本的流程和邏輯。

  • 部署階段
    階段是在管線執行期間發生的個別動作。DevOps 部署管線包含下列預先定義的階段類型,供您用於您的發行程序:
    • 累計部署:OKE、Functions 或執行處理群組的增量版次。
    • 等待:等待 N 秒。
    • 手動核准:若已指定核准則繼續;若核准遭拒則停止。
    • 呼叫函數:呼叫函數並傳送要求參數的使用者自建物件,以執行自訂作業或整合。
  • DevOps 使用者自建物件

    DevOps 使用者自建物件是構成您應用程式之任何檔案、二進位、套裝程式、資訊清單或影像的參照或指標。建立使用者自建物件時,請通知 Oracle DevOps 實際使用者自建物件的來源位置。DevOps 支援 OCI 容器映像檔登錄和 OCI 使用者自建物件登錄儲存區域。

  • OCI 日誌記錄與通知服務

    OCI 日誌記錄服務會儲存與部署有關的日誌。部署執行時期輸出與部署的最終結果會顯示為日誌項目。OCI 通知服務可讓您檢視部署專案及其資源的最新狀態,並採取任何必要動作。例如,當發生重要事件時 (例如部署管線中等待核准的階段) 會通知您。當您收到通知訊息時,可以前往 DevOps 部署管線並核准階段。

  • 部署環境

    環境是部署使用者自建物件之客戶運算資源的集合。環境可以是函數、運算虛擬機器 (VM) 或裸機執行處理,也可以是 OKE 叢集。

    • OKE 叢集:OCI Container Engine for Kubernetes 是一個完全託管、可擴展且高可用性的服務,可用來將容器化應用程式部署至雲端。
    • 運算執行處理:OCI 運算服務可讓您在雲端中佈建及管理運算主機。您可以使用符合 CPU、記憶體、網路頻寬及儲存資源需求的資源配置部署運算執行處理。
    • 函數:Oracle Functions 是一個完全託管、多租用戶、高度可擴展、隨選、函數即服務平台。此服務是以企業級 Oracle Cloud Infrastructure 為基礎,並由 Fn 專案開源引擎提供技術支援。

    環境可以位於與部署管線區域不同的 OCI 區域。分離方式可讓開發者使用相同的部署管線在多個 OCI 區域進行部署。

  • IAM 動態群組和原則

    動態群組是一種特殊類型的群組,其中包含符合您所定義規則的資源 (例如運算執行處理),因此成員身分可能會在建立或刪除相符的資源時動態變更。這些執行處理扮演「主要」動作者,可根據您為動態群組撰寫的原則,對服務進行 API 呼叫。

    原則是指定誰可以存取哪些資源及存取方式的文件。您會在群組和區間層次授予存取權,這表示您可以撰寫一個原則,讓群組在特定區間或租用戶本身具有特定類型的存取權。

建議

使用下列建議作為起點。您的需求可能與此處所述的架構不同。
  • 部署

    透過「資源管理程式」部署架構時,如果不需要明確的變更,請儘可能保留預設值。

考量

部署解決方案並使用應用程式時,請考量下列層面:

  • 部署解決方案

    設定必要的動態群組和關聯的原則需要管理權限。OCI 使用者名稱和認證權杖必須是授權給 OCI DevOps Git 儲存區域,並且需要在 OKE 中設定加密密碼。

  • 使用應用程式

    您可以透過修改 queue_automation.py 程式開頭的變數並在 OKE 中設定 OCIR 密碼,在建立的 DevOps 專案中處理 Python 應用程式參數的調整。

部署

您可以在 GitHub 上取得此部署的 Terraform 程式碼以及 Python 應用程式原始碼。

  1. 按一下 部署到 Oracle Cloud

    如果您尚未登入,請輸入租用戶和使用者證明資料。

  2. 選取要部署堆疊的區域。
  3. 請依照螢幕上的提示與指示建立堆疊。
  4. 建立堆疊之後,按一下 Terraform 動作,然後選取計畫 (Plan)
  5. 等待工作完成,並複查計畫。

    若要進行任何變更,請返回「堆疊詳細資訊」頁面,按一下編輯堆疊,然後進行必要的變更。接著,再次執行計畫 (Plan) 動作。

  6. 如果不需要進一步的變更,請返回「堆疊詳細資訊 (Stack Details)」頁面,按一下 Terraform 動作,然後選取套用 (Apply)

確認

  • Author: Andrei Ilas