意外在Udemy上買了微服務課程,剛好工作上的專案就是用微服務架構,就趁這個機會好好的學習與研究一波,也做個對照跟思考如何優化現行的架構。
學習教材
學習心得
Section 1 Fundamental Idesa Around Microservices
簡單紀錄: 每個功能都是獨立的一個服務,擁有自己的資料庫 不能直接去存取自己以外的資料庫 優點:功能各自獨立,不互相依賴 缺點:不同資料庫管理與如何資料同步 如何做資料管理 方案一:同步資料,同時向每個服務讀取資料 方案二:非同步資料,逐步向每個服務讀取資料 方案三:將需要共用資料庫的新功能再開一個資料庫
Section 2 10–16
簡單的專案設置,總共有三個服務,兩個後端服務(Post/Comment),一個前端畫面(React) 兩個後端服務建立然後用Postman測試 在route那邊突然想到response很困惑後面可以用哪些方法?平常都沒有認真查,剛剛特別看了express的官方文件,快速瀏覽一下res可以接哪些propertity&method。
https://expressjs.com/zh-tw/api.html#res
剛好看到res.status狀態碼,平常也沒認真查,特地再次看一下常用的狀態碼。
https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Status
200 OK 201資料成功建立 401未授權 403拒絕訪問 404找不到請求資源 500伺服器錯誤
經過幾次的前後端專案,好像越來越熟悉了,再加上公司的專案,現在看課程比較能夠看得懂,聽力也能跟得上他的敘述。
Section 2 17–26
兩個後端服務跟前端功能接起來後,出現一個問題,要取的CommemtList的時候,需要不斷地去call Post Service去拿資料 原先在monolish不會有的資料處理問題,可以在同個服務裡做資料的逐層篩選 現在拆分成微服務後,就會有資料需要同步處理還是非同步處理的做法。 剛好這個範例是用bootstarp,剛好工作專案也是用bootstrap,更熟悉一下bootstrap的用法。 關於資料的處理,正在跟專案上對照中,之前理解的時候也沒有想太多,有點像是記下來,但不是很清楚為何這樣設計。
Section 2 26–29
今天聽了兩遍解釋同步處理跟非同步處理的做法,同步就是一個服務(Post)接著一個服務(Comment)處理,但非同步的做法會透過Event Bus來處理,這部分沒有聽得很了解,還在持續研究中。 常見的Event Bus 的工具像是RabbitMQ\Kafka\NATS,之後會練習用exprex建立簡單的Event Bus,做法上是建立一個Event物件,作為Event Bus與服務間傳遞的資料格式,當某個服務向Event Bus 傳遞Event時,Event Bus 會同時將Event發送給每一個服務。
Section 2 30–35
建立一個服務Event Bus,服務(Post\Comment)完成一個新的post之後都會向Event Bus 發送post,並使用event物件傳送,因此最後在Query服務上,可以持續接受到Event物件,來達到非同步更新資料,並能夠接著處理這些資料,達到想完成的目標。透過簡單的實際案例更能了解訂閱的概念,以及工作上用到的RabbitMQ是如何運作。
Section 2 35–52
後續新增了Moderation服務,用來控制comment的狀態,以及透過Event Bus Store來儲存資料,避免某一個服務掛掉之後,資料傳遞消失。 簡單心得: section2今日完結,有點資訊量過大,好多細節其實不是很清楚,明天再來看一次。
Section 2不懂的地方
Section2主要透過express來實作microservices 在不同的服務間,如何做到非同步資料的處理,但又不會讓因為服務中斷而讓資料無法讀取,讓整個服務掛掉。 在實作中透過event bus 傳遞event物件,使用event store來儲存event物件,並且可以在event物件中做資料的狀態管理,方便實現審核的功能。