內容導向網頁應用程式後端的後端架構

後端架構是指網頁應用程式後端的結構。後端架構會決定應用程式的各部分如何相互通訊,以處理傳入要求並建立回應。建構網頁應用程式時,請依據您的特定需求和因素選取後端架構,包括持續和大規模的費用、應用程式的複雜程度、資源調度目標以及團隊的專業知識。

特別是以內容導向網頁應用程式 (例如電子商務、報紙或網誌) 而言,重要需求包括資料和效能的一致性,尤其是當應用程式發展到全球規模及分散各地時,更是如此。對於內容導向網頁應用程式,應用程式使用的資料儲存做法也是一大重點,詳情請參閱資料儲存指南。在最佳化應用程式效能時,關鍵在於超越一般的應用程式架構、代管內容,以及讓使用者易於存取。如要進一步瞭解如何選擇正確的託管策略,以及如何改進應用程式,請參閱代管指南

如果您的網頁應用程式已有後端,請考慮目前架構的限制。例如,隨著應用程式擴充,並要求其效能和可靠性提升,請考慮應用程式的某些部分是否應該重構,或移動至更適合規模擴大的其他架構。舉例來說,混合雲 (或多雲端) 架構可讓您在完成完整轉換之前,將部分工作負載轉移至雲端。請務必考量這類遷移作業所需的費用、時間和風險。

單體架構

單體架構有統一的結構,將應用程式的所有元件與單一程式碼集緊密整合。整個應用程式是以單一的獨立單元打造而成。單體架構是多層級架構,可讓應用程式的不同層完成特定工作。

結構層

  • 使用者介面 (UI) 包含呈現應用程式功能的元件,通常是與使用者互動的網頁式或電腦應用程式。
  • 應用程式邏輯是核心功能所在的位置。程式碼集的這個部分包含定義應用程式運作方式的規則、計算和作業。
  • 資料存取層包含用於讀取和寫入資料,以及在應用程式資料結構與資料庫結構定義之間轉譯的函式。此層負責與應用程式的資料庫或資料儲存空間互動。
  • 資料庫是應用程式儲存資料的位置。通常有單一資料庫儲存應用程式的所有資料,包括使用者資料、設定和其他資訊。
  • 中介軟體元件負責處理驗證、要求轉送和資料驗證等工作。這些元件有助於管理資料與要求流。
  • 部分單體式應用程式具備與外部服務或 API 的整合點。這些點可讓應用程式與第三方服務、資料來源或其他系統互動。

結構層通常屬於單一程式碼集。這個程式碼集包含整個應用程式,通常分為目錄、模組和類別。開發人員負責建構及維護應用程式程式碼集的各個部分。不過,整個應用程式通常會部署為一個單位。更新或變更時,系統會重新部署整個應用程式。

潛在挑戰

  • 隨著單體式應用程式的發展,程式碼集往往會變得複雜且難以維護。這可能會導致開發週期較長,且難以理解整個程式碼集。
  • 將變更部署至單體式應用程式可能會有風險,因為對程式碼的某個部分進行變更,可能會在不經意間影響應用程式的其他部分。這可能會建立冗長且容易出錯的部署程序。
  • 單體式應用程式以單一單位部署,因此可能很難擴充。即使只有一個元件體驗需求增加,您還是必須對整個應用程式進行資源調度。
  • 單體式應用程式通常依賴單一技術堆疊或程式設計語言,您可能無法在應用程式中使用最佳工具處理特定工作。
  • 即使在低需求期間,單體式應用程式也需要大量資源才能運作。隨著應用程式存在,維護成本也會增加,因為在不造成迴歸的情況下,更新及修補應用程式會變得更困難。
  • 採用單體式應用程式的開發團隊通常是針對整個應用程式進行規劃,因此導致更大型的團隊,以及讓團隊成員進行更複雜的協調。

建議使用方式

如果應用程式有少量的需求,且開發團隊規模較小,則適合採用單體架構。當應用程式的複雜度和規模增加,或是應用程式的不同部分需要不同的技術或部署策略時,單體架構會變得較缺乏彈性,且在維護方面也更具挑戰性。

您可以建立並管理能在 Compute Engine 上執行單體式應用程式的虛擬機器。您可以完全掌控這些虛擬機器的作業系統、軟體和管理機制,以便執行單體式應用程式。

您可以運用 App Engine 等平台式服務 (PaaS) 服務建構應用程式,並在可依要求自動調度資源的全代管基礎架構上執行應用程式。

如果您的單體式應用程式已經容器化,就能使用 Google Kubernetes Engine (GKE) 或 Cloud Run 執行。Cloud SQLCloud Spanner 等服務可用來儲存單體式應用程式的資料。請根據應用程式的特定需求,結合使用服務和系統。

無伺服器架構

採用無伺服器架構,即可建構及執行應用程式,而不必管理實體或虛擬伺服器。雲端服務供應商會自動管理基礎架構、資源調度和資源分配機制,讓開發人員專心編寫應用程式的程式碼。無伺服器架構可透過省去維護伺服器的需求,進而簡化開發、降低營運負擔,並發揮最佳成本效益。這些 API 非常適合用於微服務、即時資料處理、工作負載變數不同的網頁應用程式,以及事件處理。

以事件為基礎的無伺服器架構

事件型無伺服器架構是特定類型的無伺服器運算架構,需要仰賴事件或觸發條件來啟動函式或微服務的執行作業。系統元件會透過事件進行通訊,並叫用函式來回應事件。由於函式由事件觸發,然後獨立處理,並可能會產生會觸發後續動作的事件,因此通常仰賴非同步通訊。這種無伺服器架構非常適合用來建構可擴充、回應且鬆耦合系統。

Google Cloud FunctionsCloud Functions for Firebase 可讓您在全代管和無伺服器的環境中,建構及部署事件驅動函式。可讓您依據各種事件和觸發條件執行程式碼,包括 HTTP 要求、Cloud Pub/Sub 訊息、Google Cloud Storage 變更、Firebase 即時資料庫更新,而且不需要管理基礎架構。主要功能包括多種語言支援、擴充性、精細的計費方式、第三方整合服務、強大的記錄與監控功能,以及與其他 Google 和 Firebase 服務整合。

在許多用途中,無伺服器架構皆符合成本效益,尤其對於具有不同工作負載、快速開發需求和無法預測流量的應用程式而言更是如此。可靠性取決於雲端服務供應商,並制定服務水準協議 (SLA),以確保特定的效能和可靠性目標。您必須評估自己的特定用途和需求,判斷無伺服器架構是否為最佳選擇。

容器化

容器化可讓應用程式及其依附元件封裝成輕量的可攜式容器。這些標準提供一致的應用程式環境,可支援不同系統和平台的開發及部署。有些無伺服器平台提供執行容器化工作負載的功能。如果您的複雜或有狀態工作負載無法以基本函式表示,在無伺服器環境中執行容器會很有幫助。它在語言支援和執行階段環境方面提供彈性。

Cloud Run 是無伺服器運算平台,可讓開發人員在全代管環境中部署及執行容器化應用程式。讓開發人員能夠以簡單直接的方式建構、部署及擴充應用程式,而不必管理基礎架構。適用於各種網路和微服務應用程式,尤其是工作負載經常變動的情況,而且容器化能為應用程式封裝和一致性帶來諸多好處。

微服務架構

應用程式會細分為鬆耦合的小型部分,並實作不同的功能或功能。這些服務可能會透過非同步訊息、事件管道,或藉由公開介面直接進行通訊。每項服務都會在容器中獨立開發、測試並擴充。這個容器通常透過自動化調度管理服務 (例如 Kubernetes) 管理,或透過 Cloud Run 等代管平台部署。

微服務部署通常也會利用無伺服器應用程式模式,因為不依賴集中式伺服器。

將應用程式拆分為自動駕駛服務可以簡化複雜的系統。定義明確的界線和目標可加快開發速度及提升維護成效。每項微服務都能使用最有效的架構或工具獨立開發。服務之間的通訊通常是利用事件、發布訂閱通訊、訊息管道或遠端程序呼叫 (例如 gRPC) 處理。

針對微服務架構中的工作自動化調度管理,請考慮使用支援您指定的平台的架構、足以處理您自動化調度管理的工作和工作流程類型,以及錯誤處理和遙測資料來偵錯。常見的選擇包括操作者或雲端服務供應商 (如 Google Workflows) 提供的產品。

微服務型應用程式由於分散各地的特性,以及服務內部通訊的需求,因此開發及維護可能相當複雜。因此,管理部署、監控和記錄功能比其他架構選項更為複雜。由於可靠性取決於個別服務的架構,因此分散式特性可能會提供額外的彈性,尤其是在需要部署並啟用監控和遙測的情況下,更是如此。

比較內容導向網頁應用程式後端的不同架構

下表比較架構與內容導向網頁應用程式後端的關鍵需求。

單體架構 以事件為基礎的無伺服器架構 無伺服器的微服務架構
複雜與維護
  • 可輕鬆實作小型獨立專案,但會隨規模擴大而變得複雜。
  • 需要人工維護和協調。
  • 平台也支援擴充能力。
  • 疑難排解和偵錯並不容易。
  • 無須管理基礎架構,
  • 獨立測試及部署的獨立服務,可獨立測試及部署,讓各單位的維護作業變得更加容易。
  • 服務之間必須保持謹慎的通訊。
  • 需要使用管理和自動化調度管理工具,才能大規模管理。
擴充性與效能
  • 小規模作業效率極佳,且難以擴充至特定大小。
  • 特定基礎架構需求,限制動態資源調度選項。
  • 在架構內手動調整資源配置 (或使用手動服務),例如透過負載平衡進行管理。
  • 每項服務都是根據特定需求量身打造,並能獨立擴充及最佳化。
彈性和備用策略
  • 部署作業十分複雜,有可能導致停機 (「全部或完全沒有」)。
  • 與雲端服務供應商一致。
  • 每個獨立函式都可單獨重試。
  • 每項服務都是獨立的,讓整體系統透過獨立測試和開發作業更具彈性。
完善開發體驗
  • 透過緊密結合架構 (例如執行有效率的查詢),以小規模快速開發。
  • 建構時間較長,且隨著複雜性提高,協作和測試也更加複雜。
  • 您不必維護及管理基礎架構,加快開發速度。
  • 測試運作中的應用程式並進行偵錯取決於雲端服務供應商的服務。
  • 服務是獨立的,可以獨立開發。
  • 而且必須協調及管理大量服務。
費用
  • 複雜的開發作業可能會導致成本增加。
  • 需要大量投資硬體或基礎架構,尤其是規模較大時。
  • 很難因為向上擴充或縮減而提高成本效益。
  • 無需專屬硬體費用。
  • 向上擴充及縮減資源,盡可能提高資源使用率與費用 (降至零)。
  • 無需專屬硬體費用。
  • 向上擴充及縮減資源,盡可能提高界線內資源用量與成本。
  • 這些額外成本來自監控及管理大量獨立服務。

進一步瞭解內容導向網頁應用程式的後端架構

以下資源可協助您進一步瞭解內容導向網頁應用程式的架構,包括如何將應用程式遷移至其他架構: