設計微服務型應用程式

當您使用微服務架構設計應用程式時,請考慮遵循微服務最佳實務,以及開發微服務的 12 種成功模式。這些模式結合了 12 因子應用程式考量,並從微服務部署體驗與融合式資料庫建置而成。

瞭解設計微服務的最佳做法

透過在設計微服務時遵循某些最佳實務,您可以確保您的應用程式能夠輕鬆擴展、部署及維護。請注意,此處所討論的非所有最佳應用可能與您的應用有關。

每個微服務都必須實作單一的應用程式功能。開發團隊必須定義每個微服務的限制與責任。其中一個方法是為應用程式中每個經常要求的任務定義微服務。另一種方法是將功能依業務任務劃分,然後為每個區域定義微服務。

請在您的設計中考量下列需求:

  • 響應式微服務:即使服務失敗,微服務也必須傳回要求從屬端的回應。
  • 回溯相容性:當您新增或更新微服務的功能時,API 方法和參數的變更不會影響用戶端。REST API 必須保持回溯相容。
  • 彈性通訊:每個微服務都可以指定用於用戶端與 API 閘道之間通訊,以及用於微服務之間通訊的協定。
  • 等冪:如果從屬端多次呼叫微服務,就應該產生相同的結果。
  • 有效率的作業:此設計必須有助於輕鬆進行監督和疑難排解。日誌系統經常用來實行此需求。

瞭解微服務中成功的 12 種模式

微服務很難實作,而且這 12 種模式讓使用融合式資料庫平台搭配容器和 Kubernetes,從 mircoservices 架構更輕鬆地利用靈活度和簡單性優勢。

  1. 界限的相關資訊環境:事先設計,或使用資料重製建議程式將單體分割成微服務。
  2. 鬆散耦合:將綱要隔離至微服務,並使用可靠的事件網格,以解耦資料。
  3. 微服務的 CI/CD :多租用戶資料庫讓它自然適用於微服務。新增一個可插式資料庫 (PDB) ,以獨立部署和建置。應用程式 (Jenkins) 和綱要 (資料庫中的 Liquibase、Flyway 和 EBR) 也是很好的選擇。
  4. 微服務的安全性:將每個端點從 API 閘道、負載平衡器、事件網格保護至資料庫。
  5. 微服務的統一可觀察性:將測量結果、日誌和追蹤整合至單一儀表板,以進行調整和自我修復。
  6. 交易寄件匣:在單一本機交易中傳送訊息與資料處理作業。
  7. 可靠事件網格:具有高傳輸量交易訊息傳遞和發布和子事件的所有事件之事件網格,以及事件轉換和事件路由。
  8. 事件聚總:事件是臨時事件,並通知或觸發即時動作;事件之後會聚總至資料庫 - 資料庫是最終壓縮的主題。
  9. 命令查詢責任區分 (CQRS) :微服務可用資料的作業與分析複本。
  10. Sagas :跨微服務的交易,支援資料庫中的事件網格和保管暨代付款服務日誌。
  11. 多語言程式設計:支援各種語言的微服務和訊息格式,使用 JSON 作為有效負載。
  12. 後端即服務 (BaaS) :適用於任何雲端或內部部署項目的測試、開發及生產部署 (小型到中) 的微服務基礎架構;適用於 Spring Boot Apps。

從限制的相關資訊環境樣式開始

為微服務實行持續性的建議樣式,是在容器資料庫中使用單一可插式資料庫 (PDB) 。對於每個微服務,請將永久資料保持私密,然後在微服務實作中建立可插拔資料庫。

在此樣式中,專用永久資料只能透過微服務 API 存取。

下圖顯示微服務的持續性設計。

microservices_persistence.png 的描述如下
microservices_persistence.png 圖解說明
此微服務實作的下列變體適用於融合式資料庫:
  • 專用表格:每個服務都擁有一組表格或文件。
  • 綱要:每個服務都擁有專用資料庫綱要或集合。
  • 資料庫:每項服務在容器資料庫中都擁有一個可插式資料庫,如圖解所示。

微服務的持續性反樣式是跨多個微服務共用一個資料庫綱要。您可以導入單元、一致、隔離且持久的交易,以實現資料一致性。這種反樣式的優點在於它使用簡單的資料庫。缺點是微服務在存取資料庫時可能會互相干擾,而開發週期可能會因不同微服務的開發人員需要協調綱要變更而放緩,這也會增加服務間相依性。

您的微服務可以連線至在 Oracle Cloud Infrastructure 上執行的 Oracle Database 執行處理。Oracle 多用戶資料庫支援容器內的多個可插式資料庫 (PDB)。這是微服務的持續性層最佳選擇,適用於資料、安全性和高可用性的有界限相關資訊環境隔離。在許多情況下,較少的 PDB 可與綱要層次的隔離搭配使用。

瞭解在容器中部署微服務的價值

建置微服務之後,您必須將其容器化。在自己的容器中執行的微服務不會影響部署在其他容器中的微服務。

容器是標準化的軟體單元,可用來開發、運送及部署應用程式。

容器是使用容器引擎 (例如 Docker) 來管理。容器引擎提供將所有應用程式相依性組合成容器所需的工具。

您可以使用 Docker 引擎來建立、部署及執行容器中的微服務應用程式。Docker 容器中執行的微服務具有下列特性:

  • 標準:微服務可攜。他們可以在任何地方執行。
  • 輕量型:Docker 共用作業系統 (OS) 核心,每個執行處理不需要作業系統,而且會以輕量型處理作業的方式執行。
  • 安全:每個容器都以隔離程序執行。因此微服務是安全的。

容器化微服務的程序包括建立 Dockerfile、建立並建置包含其相依性和環境組態的容器映像檔、將映像檔部署到 Docker 引擎,以及將映像檔上傳到容器登錄以進行儲存和擷取。

docker_container_process.png 的描述如下
docker_container_process.png 圖解說明

瞭解如何使用 Kubernetes 協調微服務

在容器中執行的微服務必須能夠進行互動和整合,才能提供必要的應用程式功能。此整合可透過容器協調達成。

容器協調可讓您啟動、停止及分組叢集中的容器。它也實現了高可用性和擴展性。Kubernetes 是容器協調平台之一,可用來管理容器。

將微服務容器化之後,您可以將它們部署到 Oracle Cloud Infrastructure Container Engine for Kubernetes

將容器化微服務應用程式部署到雲端之前,您必須先在本機 Kubernetes 引擎中部署並測試它,如下所示:

  • 建立您的微服務應用程式。
  • 建立 Docker 映像檔,將微服務容器化。
  • 在本機 Docker 引擎中執行微服務。
  • 將您的容器映像檔推送至容器登錄。
  • 在本機 Kubernetes 引擎 (例如 Minikube) 中部署和執行微服務。

在本機 Kubernetes 引擎中測試應用程式後,將其部署至 Oracle Cloud Infrastructure Container Engine for Kubernetes ,如下所示:

  • 建立叢集。
  • 下載 kubeconfig 檔案。
  • 在本機裝置上安裝 kubectl 工具。
  • 準備 deployment.yaml 檔案。
  • 將微服務部署至叢集。
  • 測試微服務。

下圖顯示將容器化微服務應用程式部署至 Oracle Cloud Infrastructure Container Engine for Kubernetes 的程序。

oke_deployment_process.png 的描述如下
oke_deployment_process.png 圖解說明

瞭解 Oracle Backend for Spring Boot and Microservices

Spring Boot 是在 Java 中建置微服務的最熱門架構。順利部署微服務架構的 12 種成功模式之一就是後端即服務 (BaaS) 模式。OCI Marketplace 提供 Oracle BaaS,可在 30 分鐘內使用 Terraform 和 Ansible 進行部署。Oracle BaaS 提供一組部署和操作微服務所需的平台服務,並且與 Spring Boot 環境整合。下圖說明 Oracle Backend for Spring Boot and Microservices 平台的詳細資訊。