部署高擴展性的 GraphQL 解決方案
此參考架構會示範如何部署可輕鬆調整規模以符合工作負載需求的 GraphQL 型解決方案。
GraphQL 是一種適用於 API 的開放原始碼資料查詢和處理語言,以及一個程式實際執行來實行現有資料查詢,這是應用系統 (明確定義必要屬性的行動應用系統) 的理想元件。它提供從屬端可能需要要求相關實體之間資料的 API,以最佳化要求和回應流程,例如將行動應用程式的行動網路流量降到最低。GraphQL 也提供一個有效的方法,說明如何透過提供涵蓋許多不同後端服務的單一綱要來實行後端解決方案,以協助 API 用戶進行摘要。
架構
此架構為靜態與動態 API 內容定義不同的路由。此方法可透過在數個層次設定快取選項 (包括使用負載平衡器中的內容傳遞網路 (CDN)、負載平衡器以及載入及提供內容的後端服務),讓靜態內容的存取更容易最佳化。
後端服務是透過此架構中的微服務實作。這些服務也可以透過開源 CMS 選項部署 CMS 解決方案 (例如 Oracle Content and Experience)。由於內容為靜態,因此安全風險也顯著降低。
API 內容是透過 API 閘道遞送,以便驗證及控制 API 要求 (例如速率受限)。接著,系統就會將流量傳送至 Oracle Kubernetes Engine 負載平衡器,這是叢集入埠時點,將流量導向至 GraphQL 伺服器。理想的,如果使用微服務來提供靜態內容,則支援 GraphQL 的服務和靜態內容會放在個別的命名空間中,以增強隔離與控制。
此實作採用開放原始碼 Apollo GraphQL 伺服器接收呼叫,並分解工作,以分隔代管解析器與更動子邏輯的微服務。您可以使用個別服務在資料模型內實行不同的子網域,以更有效率的方式調整實行。因此,使用任何記憶體內快取功能,調整解決方案變得更容易。
下圖說明此參考架構。

deployment-hs-graphql.png 圖解說明
您可以在相關的 GitHub repository 中找到用來實作架構的程式碼與文件 (請參閱下面的「部署」主題)。API 路由為每個子網域使用 Apollo GraphQL 伺服器和 Python 服務。如需詳細資訊,請參閱提供的 GitHub 文件。
- 租用戶
租用戶涵蓋目前使用的所有區域。為了獲得最佳效能和抗逆力,您希望在全球多個不同區域複製部署並結合公用 DNS 路由,以便從屬端可移至最接近的區域,將延遲降到最低。這需要在區域之間複製後端資料。
- 區域
Oracle Cloud Infrastructure 區域是一個包含一或多個資料中心的本地化地理區域,稱為可用性網域。區域與其他區域無關,而且遠距離也能分隔它們 (跨國家或甚至大陸)。
- 區間
區間是 Oracle Cloud Infrastructure 租用戶內的跨區域邏輯分割區。使用區間組織您的 Oracle Cloud 資源、控制資源的存取,以及設定使用狀況配額。若要控制對指定區間中資源的存取,您需要定義可指定誰存取資源的原則,以及可執行哪些動作。此架構的區間控制可新增至個別的公用存取層和後端,以大幅降低對安全層產生直接路徑的風險。
- 可用性網域
可用性網域是區域內的獨立資料中心。每個可用性網域中的實體資源會與其他可用性網域中的資源隔離,以提供容錯能力。可用性網域並不共用基礎架構,例如電源或冷卻系統,或內部可用性網域網路。因此,一個可用性網域發生故障並不會影響區域中的其他可用性網域。在此參照架構中,Kubernetes 工作節點會分配到容錯域和可用性網域,以確保抗逆力上限。
- 容錯域
容錯網域是可用性網域內的硬體和基礎架構群組。每個可用性網域都具備三個具有獨立電源和硬體的容錯域。當您分散多個容錯域的資源時,您的應用系統可以忍受容錯域內的實體伺服器故障、系統維護及電源故障。
- 虛擬雲端網路 (VCN) 和子網路
VCN 是您在 Oracle Cloud Infrastructure 區域中設定可客製化的軟體定義網路。與傳統資料中心網路一樣,VCN 可讓您完整控制您的網路環境。VCN 可以有多個非重疊的 CIDR 區塊,您可以在建立 VCN 之後變更這些區塊。您可以將 VCN 區段成子網路,可以將範圍擴展到區域或可用性網域。每個子網路都包含一個連續的位址範圍,這些位址不會與 VCN 中的其他子網路重疊。您可以在建立子網路後變更其大小。子網路可以是公用或專用。
- 負載平衡器
Oracle Cloud Infrastructure Load Balancing 服務可將單一進入點到後端多部伺服器的流量自動分配。在此參照架構中,負載平衡器會包括路由原則,將動態資料和靜態內容的流量導向 API 閘道 (例如映像檔、網頁等)。您可以接著利用負載平衡器的 Web 應用程式加速 (WAA) 功能。
- 安全清單
針對每個子網路,您可以建立指定來源、目的地以及必須允許進出子網路之流量類型的安全規則。
- NAT 閘道
NAT 閘道可讓 VCN 中的專用資源存取網際網路上的主機,而不會向內送網際網路連線暴露這些資源。
- 服務閘道
服務閘道可讓您從 VCN 存取其他服務,例如 Oracle Cloud Infrastructure Object Storage。從 VCN 到 Oracle 服務的流量透過 Oracle 網路架構旅行,而一律不透過網際網路。
- 雲端保全
您可以使用 Oracle Cloud Guard 來監控及維護您 Oracle Cloud Infrastructure 中資源的安全。「雲端保全」使用偵測器處方,您可以加以定義以檢查資源是否有安全弱點,以及監控操作員和使用者的危險活動。偵測到任何組態錯誤或不安全活動時,雲端保全會建議更正動作,並根據您可以定義的回應器處方協助採取這些動作。
- 安全區域
安全區域透過強制實行原則 (例如加密資料) 並防止整個區間的網路公用存取,確保 Oracle 的安全性最佳做法。安全區域會與相同名稱的區間關聯,並且包含適用於區間及其子區間的安全區域原則或處方。您不能新增或移動標準區間到安全區域區間。
- 自治式資料庫
Oracle Cloud Infrastructure 自治式資料庫完全受管理且預先設定的資料庫環境,可供交易處理和資料倉儲工作負載使用。您不需要設定或管理任何硬體,也不會安裝任何軟體。Oracle Cloud Infrastructure 可處理建立資料庫及備份、打補丁、升級及調整資料庫。
- Container Engine for Kubernetes
Oracle Cloud Infrastructure Container Engine for Kubernetes 是一項完全受管理、可擴展且高可用性的服務,可用來將容器化應用系統部署到雲端。您可以指定應用系統所需的運算資源,而 Container Engine for Kubernetes 可在現有的租用戶的 Oracle Cloud Infrastructure 上佈建這些資源。Container Engine for Kubernetes 使用 Kubernetes 可將整個主機叢集的容器化應用系統部署、調整及管理自動化。Kubernetes 叢集的節點會配置給不同的保存庫區域和可用性區域,以最大限度的抗逆力和可用性。Kubernetes 叢集具備 Istio 或其他服務網狀組織功能,可管理及監控微服務。GraphQL 服務將存在於自己的 Pod 中,隨附將各種解析器和更動器部署至 Kubernetes 叢集作為自己的微服務。
- 登錄
Oracle Cloud Infrastructure Registry 是一個 Oracle 管理的登錄,可讓您簡化開發到生產的工作流程。登錄可讓您輕鬆儲存、共用及管理開發使用者自建物件,例如 Docker 映像檔。Oracle Cloud Infrastructure 的高可用性擴充架構可確保您可以可靠地部署及管理應用系統。
建議
- VCN
建立 VCN 時,請根據計畫要在 VCN 中連附至子網路的資源數目,決定所需的 CIDR 區塊數目與每個區塊的大小。使用標準專用 IP 位址空間內的 CIDR 區塊。
選取未與任何其他網路重疊的 CIDR 區塊 (在 Oracle Cloud Infrastructure 中、企業內部部署資料中心或其他雲端提供者),以設定專用連線。
建立 VCN 之後,您可以變更、新增以及移除其 CIDR 區塊。
設計子網路時,請考量您的流量和安全需求。將特定層或角色中的所有資源連附至相同的子網路,作為安全界限。
- 安全
透過 Oracle Cloud Guard 主動監控及維護您 Oracle Cloud Infrastructure 中資源的安全。「雲端保全」使用偵測器處方,您可以加以定義以檢查資源是否有安全弱點,以及監控操作員和使用者的危險活動。偵測到任何組態錯誤或不安全活動時,雲端保全會建議更正動作,並根據您可以定義的回應器處方協助採取這些動作。對於需要最高安全性的資源,Oracle 建議您使用安全區域。安全區域是與基於最佳做法之 Oracle 定義安全原則處方關聯的區間。例如,安全區域中的資源不能從公用網際網路存取,因此必須使用客戶管理的金鑰加密。您在安全區域中建立及更新資源時,Oracle Cloud Infrastructure 會根據安全區域處方中的原則驗證作業,並拒絕違反任何原則的作業。
- 雲端保全
複製並自訂 Oracle 提供的預設處方,以建立自訂偵測器和回應器處方。這些方法可讓您指定哪些類型的安全違規會產生警告,以及允許對這些違規執行的動作。例如,您可以偵測設為公用的物件儲存的儲存桶。在租用戶層級套用雲端保全,以涵蓋最廣泛的範圍並降低維護多個組態的管理負擔。您也可以使用「受管理清單」功能,將特定組態套用至偵測器。
- 網路安全群組 (NSG)
您可以使用 NSG 定義一組套用至特定 VNIC 的輸入和輸出規則。我們建議您使用 NSG 而非安全清單,因為 NSG 可讓您將 VCN 的子網路架構與應用系統的安全需求分開。
您可以使用 NSG 定義一組套用至特定 VNIC 的輸入和輸出規則。我們建議您使用 NSG 而非安全清單,因為 NSG 可讓您將 VCN 的子網路架構與應用系統的安全需求分開。
- 負載平衡器頻寬
建立負載平衡器時,您可以選取預先定義的資源配置以提供固定頻寬,或指定自訂 (彈性) 資源配置供您設定頻寬範圍,並讓服務根據流量模式自動調整頻寬。有了其中一種方法,您便可以在建立負載平衡器之後,隨時變更資源配置。
- API 閘道
API 閘道可以用來提供初步的篩選和使用狀況控制層次,例如:
- 服務認證和授權
- 服務控制,例如費率限制
- 擷取服務使用分析
注意事項
部署此參考架構時,請考量下列各點。
- 效能
此架構將以垂直和水平方式提供橫向擴展效能的方法。即使是具有最最佳化的微服務,新節點也有些延遲時間,因此處理手動或動態調整時必須允許這種情況。這對任何解決方案的持續性層來說特別有效。
- 安全
您應該在 API 閘道處理應用程式層級的安全性。不過,您可以使用 GraphQL 指令 (例如
@auth) 來處理精細的 GraphQL 特定安全性 (例如屬性層次存取)。 - 使用狀態
- Kubernetes
容錯域提供可用性網域內的抗逆力。您可以設定讓 Kubernetes 工作節點跨不同的可用性區域進行部署。
- API 閘道、負載平衡器等
受管理的服務 (例如 API 閘道) 在一個區域內有其可用性。您可以設定負載平衡器,以確保可用區域之間的協調。
- Kubernetes
- 成本
所需的可用性和彈性越高,營運成本就越高。這是因為必要的備援運算資源量會成長。請考量您將使用的 GraphQL 實行,以及授權限制條件 (若有的話) 是否被提供者支援實行。