微服務 (Microservices) vs 單體式 (Monolithic) 系統比較

MicroservicesMonolithic
部署 (Deployment)應用程式基於特定的業務能力界定多個微服務,每個微服務爲獨立可各別被部署應用程式只有一個單元的主體
耦合性 (Coupling)每個微服務已元件化,彼此間的溝通只透過 API 連結,因而形成良好的寬鬆耦合 (loose coupling)功能模組之間沒有良好的隔離而造成緊密耦合 (tight coupling)
延展性 (Scalability)可以視微服務的負載情形而各別擴展系統資源只能對系統整體採以複製 (clone) 的方式擴展
開發 (Development)可以依微服務的性質採不同的實現技術;每個微服務的實作團隊可以並行分工開發只能選擇一種特定的實作技術;團隊的分工大都採以模組的切割,或依據分層的技術,需要較高的專案管理 Effort
維護性 (Maintenance)每個微服務可以個別獨立建置、部署與維護由於只有單體式的系統,所以管理與維護會依系統規模度而有着等比複雜度的提昇
適用系統性質平台 (Platform)、產品 (Product)專案 (Project)
適合系統規模大型涵蓋多個業務範疇 (如 ERP) 的系統小型團隊建構規模較小的系統
適合雲端服務非常適合系統規模越大,就越難以部署至雲端平台上
系統開發難易度• 需有總體架構規劃,架構師 (Architect) 或架構團隊需有效界定微服務的邊界 (Bounded Context),以及制定微服務間的 API 協定
• 微服務平行分工的開發團隊需高度正向的密切溝通,持續整合不僅涵蓋技術,也包括人
因大都採以資料導向 (data oriented) 的開發模式,所以初期開發容易;但隨着系統規模度與變動性的議題,很容易導致複雜度的提昇,系統易淪於僵化而難以維護

微服務特點與主要特徵

微服務 (Microservices) 特點

  • 每一個微服務均視爲是一個小型的系統。
  • 微服務各自擁有自己的私有倉儲 (資料庫)。
  • 微服務之間的互動是透過 API 的介接。
  • 每一個微服務是獨立的個體,所以可以爲各自的微服務採用不同的實作技術與系統的建置、部署及維護方式。

主要特徵 (Characteristics)

  • 經由服務 (service) 的元件化 (componentization)。
  • 圍繞業務能力 (business capability) 的組織 (organized)。
  • 分權化的治理 (Decentralized Governance)。
  • 寬鬆耦合 (loose coupling) 的連結性 (connectivity)。
  • 基礎設施的自動化 (Infrastructure Automation)。

閱讀全文 »

[安裝筆記] Windows 10 WSL 2 安裝 Docker Desktop (含更改 Docker Image 路徑)

在 Windows 10 要能充分整合 Docker 應用與開發,安裝 Docker Desktop 是最理想的。

關於 Docker Desktop 可以參考官方文件的介紹

Docker Desktop is an easy-to-install application for your Mac or Windows environment that enables you to build and share containerized applications and microservices.
Docker Desktop includes Docker Engine, Docker CLI client, Docker Compose, Docker Content Trust, Kubernetes, and Credential Helper.

安裝 Docker Desktop 之前,要先確認在 Windows 10 系統上已安裝建置好 WSL 2 的 Linux 子系統,可以參考前寫的:[安裝筆記] Windows 10 安裝 Linux 子系統 (WSL2)。

安裝 Docker Desktop 只要下載官方的安裝檔並執行安裝即可。這裡有篇很詳細的安裝文件,可以參考:How to Set Up Docker in WSL [Step-by-Step]

安裝完 Docker Desktop,系統會提示登出 (logout) 再重新登入,如此 Docker 已常駐於系統 (可觀察工作列的通知區有否鯨魚圖示),點擊該圖示即可出現 Docker Desktop 操作介面。
[安裝筆記] Windows 10 WSL 2 安裝 Docker Desktop (含更改 Docker Image 路徑)

閱讀全文 »

微服務架構 – 以醫療領域為例

** 本文同步發表於 FB社群-軟體設計鮮思維 **

單體式的挫折,導致微服務的架構風格 – 將應用程序建構爲多個微服務

微服務架構 – 以醫療領域為例

  • 每一個微服務均視爲是一個小型的系統。
  • 微服務各自擁有自己的私有倉儲 (資料庫)。
  • 微服務之間的互動是透過 API 的介接。
  • 每一個微服務是獨立的個體,所以可以爲各自的微服務採用不同的實作技術與系統的建置、部署及維護方式。

爲何會使用微服務架構?!

** 本文同步發表於 FB社群-軟體設計鮮思維 **

要談及微服務,就需要回頭檢視典型單體 (Monolithic) 式的系統建構與開發方式。下圖可能是一個醫療領域的單體式系統架構。

醫療領域的單體式系統架構

這個「Monolithic」可以翻譯爲「單體」或「整體」,也就是我們一般典型的大堆頭式的開發系統,它有以下特點:

  • 應用程序被建構爲單個單元 (single unit)。
  • 多個功能模組共用同一個資料庫。
  • 使用同一種技術框架 (ex. .NET or Java/Spring Framework) 實作。
  • 對系統的任何變更都涉及建構與部署伺服端應用程序的新版本。
  • 伺服器系統的延展性主要採以運行多個複製實例 (clone instance) 以達成負載平衡的需求。

閱讀全文 »

關於微服務 (Microservices) 的定義

** 本文同步發表於 FB社群-軟體設計鮮思維 **

醫療領域的微服務界定

所以,微服務的定義是什麼呢?(What is Microservices)

它其實是一種架構設計的風格 (architecture design style) ,並沒有一種很絕對嚴謹的定義,要說較通用的說明,可以參考如下:
「用以描述將系統依據業務能力 (business capability) 分解為多個可獨立 (independent) 被建構 (built)、部署 (deployed) 與延展 (scaled) 的服務 (services)。」

微服務的表現 (represent) 可以參考如圖所繪製的醫療業務領域 (health care business domain),這是可以建構微服務系統的最佳應用。

  • 將單個應用程序開發爲一組小服務。
  • 每組小服務均有自己的進程 (Process)。
  • 每組小服務各自建構、部署與維護。
  • 每組小服務可透過輕量化的溝通機制,例如 HTTP based 的 API,與其它小服務互動。
  • 這些小服務有最低限度的集中管理,它們可以使用不同的程序語言,並使用不同的資料儲存技術。
軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal