英文原文出自:https://www.nginx.com/blog/introduction-to-microservices/
筆記首發於個人語雀,有空來幫我點個稻穀呀。html
一般有兩種調用方式java
API網關不能夠由於下游的失敗而block住,它要根據場景來決定如何處理錯誤。node
若是你按照一直等待去設計,那麼頗有可能會消耗掉你全部的線程,致使產品詳情服務完全掛掉linux
下面有4條由Netflix推薦的部分失敗錯誤處理策略。nginx
異步、基於消息的IPC機制git
用消息機制的優勢:github
用消息機制的缺點:web
同步、請求/響應型的IPCdocker
基於HTTP方式的協議(Rest)的好處:數據庫
基於HTTP方式的協議(Rest)的壞處:
Thrift
消息格式
優勢:
概念詳解
其餘的服務註冊中心們還有
自注冊模式
三方註冊模式
ACID原則
你可使用事件來實現跨越多個服務的事務,這樣的一個事務,包括的許多步驟,每一個步驟包括一個微服務更新本身的業務邏輯entity,而且發出一個事件通知下一些微服務。來看下面這個流程:
- 這裏面須要假設 - 每一個服務自動地更新數據庫,而且發佈事件 - 消息代理必須保證事件至少都被交付了一次
【解決查詢問題】你還可使用事件來維護一個額外"物料化視圖",這個視圖包含的預先join好的,來自多個微服務的數據。例如能夠專門有一個「客戶訂單視圖」服務,來專門訂閱相關事件(客戶服務產生的事件、訂單服務產生的事件等),而後更新這個視圖。
事件驅動架構的優勢
事件驅動架構的缺點
【背景】在事件驅動架構裏,你還會遇到一個原子性問題
使用本地事務完成發送事件
藉助本地事務,其實就是你要一個本服務的事件表,它的做用相似消息隊列:
挖掘數據庫事務日誌
使用數據溯源
優點:
這種模式還有不少變種,例如
每個服務實例是一個或一組進程
在同一個進程或進程組運行多個服務實例
優點
劣勢
每一個虛擬機一個服務實例
優點
劣勢
每一個容器一個服務實例模式
優點
劣勢
你有這麼些方法能夠調用一個函數
劣勢
這個策略主要思路是,幫你分離展現層和業務邏輯層以及數據訪問(DAO)層,從而作到讓原來的monolithic應用縮小一些。一般一個典型的企業級應用有這些組件層:
有一種常見的作法,你能夠把你的應用按照下圖,拆分紅兩個子應用:
策略優點
轉換成微服務的優先級
如何抽取一個模塊
在上面的例子中,模塊Z是要被抽象出來的模塊。它的組件被模塊X和模塊Y使用了,因此