樣式簡介

將您的 Web 或行動應用程式建置為一組微服務,可獨立測試、部署及由不同的應用程式團隊擁有。將服務公開為 REST API,並使用 API 與其他微服務進行通訊。

Web 或行動應用程式最重要的需求是:

  • 它必須支援一系列的用戶端,例如瀏覽器和行動裝置
  • 必須安全
  • 它必須提供 24/7/365 可用性
  • 必須擴展以因應需求激增
  • 它必須處理低網路延遲
  • 更新或修改時必須為零停機時間

Oracle Cloud Infrastructure (OCI) 為最嚴苛的 Web 和行動應用程式提供可擴展、安全、可靠且高效能的基礎架構。本文件提供建構 Web 或行動應用程式的設計原則,以及根據這些原則參照架構。

設計原則

使用輕量的開放原始碼架構及成熟的程式設計語言

使用 Graal Development Kit for Micronaut 或 Helidon 來建置您的應用程式。這兩者都提供記錄日誌、遙測、安全性及組態等功能,以及建立 REST API 等通用模式。

使用 Java:一個不受平台限制的可攜式語言,其中包含一組豐富的程式庫,可供數百萬名開發人員用來建置可擴展、有彈性且安全的應用程式。

將 App 建置為使用 API 進行通訊的服務

將您的應用程式建置為一組微服務,可由不同的 App 團隊獨立測試、部署及擁有。公開服務和定義的 REST API,並使用這些 API 與其他服務進行通訊。使用 OCI API 閘道作為所有用戶端的單一進入點,然後將 API 要求遞送至適當的服務。

使用 OCI Service Mesh 簡化和保護您 Oracle Container Engine for Kubernetes (OKE) 叢集中代管服務之間的通訊。OCI Service Mesh 也可讓您透過代理主機元件 (在應用程式 Pod 上以 Sidecar 形式執行) 所發出的指標和日誌,觀察服務之間的所有網路流量。

自動化建置、測試及部署

頻繁提供程式碼,然後以將停機時間降到最低的方式部署應用程式。使用 OCI DevOps 建立一致且自動化的方式來開發、建置、封裝、測試及部署應用程式。使用 Oracle Cloud Infrastructure Resource Manager 能夠可靠地佈建基礎架構元素,例如 API 閘道、負載平衡器、資料庫、Kubernetes 叢集和其他服務。

使用完全託管的服務來消除應用程式開發、程式實際執行和資料管理的複雜性

使用完全託管的服務,例如 Oracle Container Engine for Kubernetes (OKE)、Oracle Cloud Infrastructure Object StorageOracle Autonomous Database :這些服務可最大化可用性和擴展性,以因應不斷變化的應用程式需求。完全託管的服務可確保您的應用程式可用性,並在代管您應用程式基礎架構的資料中心發生故障時加以保護。

讓應用程式層保持無狀態

如果可能,請將應用程式的中間層元件保持為無狀態。如有必要,請使用 Oracle Autonomous Database 來儲存應用程式狀態,以維持一致性、持久性及快速復原。

使用融合式資料庫搭配所有資料的完整功能支援

您的應用程式可能會以各種格式使用資料,例如表格式 (關聯式)、非結構化、XML、JSON、空間或圖表。傳統上,每個資料格式都需要不同的資料庫類型,例如關聯式資料的關聯式資料庫、非結構化資料的文件存放區,或階層式連結資料的圖表資料庫。不過,使用多個資料庫通常會導致額外的作業複雜性和資料不一致。請改用單一多重模型 Oracle Autonomous Database 來儲存、編製索引及搜尋多種類型和格式的資料。

工具端對端監控與追蹤

開發團隊必須開發自己的可觀察性工具,才能瞭解他們所擁有的服務和應用程式。您的應用程式可能包含數百項服務,由不同的應用程式和業務團隊擁有。使用 Oracle Cloud Observability and Management Platform 將解決方案集中至每個團隊,而不是建立自己的工具:它會監控整個堆疊的所有層,以找出並修正應用程式中的問題。

透過自動化資料複製和故障復原,消除單一故障點

您的應用程式必須具備彈性、從失敗中復原,並且將停機時間和資料遺失降到最低。透過以下方式實作冗餘,消除單一失敗點:

  • 在 OKE 中,請設定至少三個節點的節點集區,每個節點都位於多個可用性網域區域的個別可用性網域中。
  • 在單一可用性網域區域中,請在 OKE 中至少設定三個節點的節點集區,每個節點都位於個別的容錯域。
  • 使用單一公用負載平衡器和多個專用負載平衡器搭配多個傳入控制器,在 OKE 中使用備援功能。
  • 設計試驗災害復原拓樸,以重新啟動應用程式,並在待命區域快速回復工作負載 (如果災害導致代管您應用程式的主要區域)。
  • 設定您的 CI/CD 管線,將您的應用程式部署到待命區域,以便從區域失敗復原。
  • 使用區塊儲存磁碟區複寫和物件儲存複寫,跨區域複寫區塊儲存磁碟區。
  • 如果主要區域失敗,請使用 Oracle Cloud Infrastructure Resource Manager 佈建待命區域中的必要基礎架構。
  • 使用 Autonomous Data Guard 設定您的 Oracle Autonomous Database 以獲得最大可用性,將營運停機時間和資料遺失降到最低。

此外,測試復原能力以瞭解應用程式在發生間歇性異常情況時的行為。例如,您可以採用 Chaos Monkey 架構進行混沌測試。也可使用節流、斷路器和重試機制來實作彈性應用程式。

導入深度防禦方法以保護應用程式生命週期

您應該設計具有足夠安全性的應用程式,以防範惡意實體的攻擊。查閱您的應用程式、用戶端程式碼與第三方程式碼,以檢查可疑的行為。使用篩選規則及使用 Web 應用程式防火牆 (WAF) 設定 DDoS 保護,讓您的應用程式免於遭受不想要的流量侵害。

將機密資訊 (例如密碼和認證 / 授權記號) 儲存在 Oracle Cloud Infrastructure Vault 中。設定 etcd 中 Kubernetes 加密密碼的加密。在應用程式用來讓攻擊者更難模擬信任的個體使用的憑證上輪換並設定短壽命。

請遵循最低權限的原則,確保使用者與服務帳號僅具備執行工作所需的最低權限。使用 Oracle Cloud Infrastructure Identity and Access Management (IAM) 控制誰可以存取您的應用程式及其元件。在 IAM 中使用多重因素認證強制執行強式認證,讓管理員限制對應用程式及其元件的存取。

架構

對於 Web 或行動應用程式,建議使用此架構模式,此架構模式是由部署為 OKE 上 Kubernetes 叢集中容器的微服務所組成。使用 Oracle Autonomous Database 實現資料持續性。應用程式的媒體和映像檔都儲存在物件儲存中。

下列圖表說明此架構。



architecture-maf-web-mobile-oracle.zip

此架構具有下列元件:

  • Web Application Firewall (WAF)

    WAF 可保護應用程式免於惡意和非必要網際網路流量的危害。它可以保護任何對網際網路公開的端點,為您的所有應用程式實施一致的規則。

  • Oracle Cloud Infrastructure API 閘道

    OCI API Gateway 是一項完全受管理的區域 API 閘道服務,可為 OKE 及在 Oracle Cloud Infrastructure 上執行的任何其他服務或端點提供受保護的 RESTful API 端點。在此架構中,要求會遞送至專用負載平衡器,以將要求轉送至 OKE 中執行的服務。

  • Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)

    OCI IAM 提供健全的多重因素認證、社群登入、一般使用者的自行註冊、身分識別管理、單一登入及 App 識別治理。

  • Load balancer

    負載平衡服務可將單一進入點的流量自動分配到可從虛擬雲端網路連線的多部伺服器,例如架構中容器化微服務的 OKE 節點

  • Oracle Autonomous Database

    Oracle Autonomous Database 是一個完全受管理的資料庫環境,可彈性調整規模、提供快速查詢效能,且無需任何資料庫管理。您不需要設定或管理任何硬體,也不需要安裝任何軟體。

  • Object storage

    物件儲存可讓您快速存取各種內容類型的大量結構化和非結構化資料,包括資料庫備份、分析資料,以及豐富的內容 (例如影像和影片)。針對快速、立即且經常存取的熱儲存,使用標準儲存。將封存儲存用於長期保留或極少存取的冷儲存。

    在此架構中,應用程式的媒體資產會儲存在標準儲存類別的儲存桶中。

  • Kubernetes 的容器引擎 (OKE)

    OKE 是一項完全受管理、可擴充且高可用性的服務,可將您的容器化 App 部署到雲端。您可以指定應用程式所需的運算資源,OKE 則會在現有租用戶的 OCI 上佈建這些運算資源。容器引擎使用 Kubernetes 將跨主機叢集的容器化 App 部署、調整規模及管理自動化。

  • Service mesh

    Oracle Cloud Infrastructure (OCI) Service Mesh 是由 OCI 管理的應用程式基礎架構層,用於服務對服務通訊。它透過定義可觀察性、安全性和流量管理的標準,簡化雲端原生應用程式的開發和部署。Service Mesh 是將客戶 Pod 與應用程式程式碼一起部署的輕量型代理主機陣列,不需要讓應用程式知道它們。

替代方式

使用微服務不是建立行動 App 或 Web App 的唯一方法。此替代架構模式顯示三層拓樸,由負載平衡器、自動調整 Web/ 應用程式層及高可用性資料庫組成。

所有資源都部署在 OCI 區域的單一可用性網域中。層級會隔離在單一虛擬雲端網路 (VCN) 中的個別子網路中。「安全清單」可作為防火牆,用來調節每一層資源之間的網路流量。連附至每個子網路的路由表包含將流量導向 VCN 外部目的地的規則。

其他替代架構 (例如單頁架構、漸進式 Web 應用程式 (PWA) 或 JAMStack) 可列入考量,但不在此處顯示。

下圖說明此替代架構。



architecture-maf-web-mobile-alternative-oracle.zip

使用案例範例

此使用案例描述線上銷售 GPU 之商店的客戶訂購系統。

下圖顯示此使用案例的架構。



architecture-maf-web-mobile-example-oracle.zip

公用網際網路的流量是由 DNS 服務透過 Web 應用程式防火牆 (WAF) 遞送至網際網路閘道,此服務會透過負載平衡器將內送要求轉送至傳入 (Nginx) 微服務。此應用程式由前端服務、訂單服務、訊息傳遞服務及庫存服務所組成。所有這些服務均已容器化,且位於 OKE 叢集中。這些服務會使用 REST API 公開其介面。資料儲存在自治式資料庫中。

客戶使用 Web 應用程式或行動裝置上的應用程式前端服務訂購 GPU。「訂單」服務與「庫存服務」使用 NATS 開放原始碼訊息傳遞服務彼此通訊。「訂單」服務會讀取及寫入「訂單」可插式資料庫 (PDB) 中的訂單資料。「產品目錄」服務會讀取及寫入「產品目錄 PDB」中的產品目錄資料。「訂單」服務會使用「通知」服務傳送通知,以便客戶能夠透過電子郵件或 Slack 通知訂單狀態。客戶可以從前端擷取訂單狀態,使用訂單服務的 REST API 來查詢訂單。

部署

Universal Health Organization (UHO) 是符合 Modern App Development Framework 原則的範例應用程式。具體而言,它會實行 Web 或行動裝置、訊息以及事件導向架構樣式的元素,並可從 GitHub 取得。
  1. 前往 GitHub
  2. 複製或下載儲存庫至您的本機電腦。
  3. 遵循 README 文件中的指示。

探索更多

進一步瞭解相關資源。

變更日誌

此日誌列出重大變更:

認可

  • 作者:Raghavendra Prasad、Sajan Parihar
  • 貢獻者:Hassan Ajan、Matthias Brantner、James Emerson、Harshad Kasture、Parvez Syed Mohamed、Jeff Schering、Joshua Stanley