---
# System prepended metadata

title: 微服務 (Microservices)
tags: [微服務, WebAPI]

---

# 微服務 (Microservices)
現今軟體的複雜度越來越高，越大型的軟體維護的成本是呈指數型上升的，因此若是能拆成多個獨立的小服務，那維護的成本就只會是線性的。

微服務架構是一種開發應用程式的方法，將單一應用程式(單體系統 Monolitch)劃分成多個小型服務，每個服務獨立執行單一功能，並利用 API 將彼此串聯起來。

<!-- more -->

![Microservice](https://docs.microsoft.com/zh-tw/azure/architecture/includes/images/microservices-logical.png)

各服務功能都是以企業業務邏輯為基礎發展、開發，必須具備自動化、獨立部署的特性。

因此微服務具有獨立部署、開發彈性大、可以混用多種開發工具、資料隔離、錯誤隔離等等的優點。

然而分散式系統會造成複雜度提升，也導致了以下幾個問題 : 
1. 遠端呼叫慢而且存在失敗的風險
2. 系統更新有許多來源，必須謹慎處理系統一致性的問題
3. 若沒有導入 CI、CD 的自動化建置和部署以及系統監控，則會很難去管理和維護這麼多的微服務

## 導入方式
新系統可以直接導入不受限於舊有程式的影響，但是舊系統建議以現有系統上疊加微服務，適應一段時間後再將核心任務改用微服務提供，一次到位很容易造成失敗。

若要導入則需具備以下條件 :
* 高度自動化
應用程式必須具備快速建置及快速部署的能力
* 監控機制
微服務是靠著許多鬆散耦合的服務組成，系統運作時必會故障且不容易發現問題，基本必須監控系統出錯的次數及服務可用性

## API v.s 套件
以 API 的形式取代套件可以免去版號升級不相容的問題，而 API 的版本只在於顯示的 Json 格式不同，內部運算邏輯仍相同。

然而每次呼叫 API 需要撰寫較多程式，所以可以利用套件將呼叫 API 的部分包起來，而套件的更新版本就是在 API 有新增版本的時候才更新，也就是套件更新只是支援 API 的其他版本

## 參考
[1][導入微服務前一定要知道的事](https://www.ithome.com.tw/news/116053)
[2][微服務架構樣式](https://docs.microsoft.com/zh-tw/azure/architecture/guide/architecture-styles/microservices)

###### tags: `WebAPI` `微服務`