一年一度台灣社群最大的 .NET 相關活動又來了
和前幾年一樣,也是協力主辦和講師的身份參與到活動
在這篇分兩個部分,一個部分是這次分享的主題,另外一個則是協助的一些小插曲
為什麼要講這個主題
就像一個鄉鎮要富裕起來,第一件事一定是修路。修路這件事隱含的是把通訊這個渠道打通,只有通訊順暢了才有更多的機會和可能
同樣道理,當我們要把架構從 Monolithic 改成 Microservice 的時候,遇到的第一個問題也是通訊
以前,全部都放在一起當然沒有什麼通訊問題,但是當每個領域切開之後,怎麼有效的互相溝通就變得非常重要
通訊廣義一點來說有可以區分為:
- Synchronous (同步) - 例如透過 API 溝通
- Asynchronous (非同步)- 例如透過 Event 或者 Message
我這邊主題是 Event,那 Event 的第一步是什麼?
很剛好,我前面的兩場分別有兩位大大在介紹 API 和讓呼叫 API 變得簡單的 SDK 大家可以參考。
很多人會想說,就是開始研究要用什麼 Event 服務,或者要用什麼架構把它們組合在一起
這些都對,也都很重要,不過我認為最重要的是你的服務要有哪些 Event?
這件事沒有想象中的簡單,訂太大包會導致 Event 傳輸不利,訂太小包會導致後續的人要用不好用
這個和開 Database 的 Table Schema 是一樣的道理,怎麼開出一個合理,然後符合業界標準的規格很重要
所以,就延伸出,那我的 Event 規格應該長成什麼樣子的問題
什麼是業界標準?CloudEvents
業界標準的目的是當不知道應該長什麼樣子的時候,有個基底可以讓我們遵循。這樣至少當需要和外界溝通的時候,會比較容易
就像是 Design Pattern 一樣,不管實作的是什麼,只要說這個是 xxx pattern 大家就很容易理解
不管有沒有遵循某個業界標準,最重要的是一定要一致
當進入到 Microservices 的時候,理論上每個系統想怎麼做是那個團隊要負責,但是真的溝通的時候,每個團隊的 Event 都應該要有一致的風格
當思考 Event 的時候需要考慮到:
資料格式要支援什麼?
- 什麼欄位是一件事,要用 CSV、XML 還是 JSON?
通訊協議要支援什麼?
- 除了常見的 HTTP,是否需要支援 AMQP 還是 MQTT
假設真的沒什麼想法,那麼就可以考慮直接用 CNCF 提出的 CloudEvents
並且提供常見程式語言的 SDK:
如果要導入記得先做好 Migration 計劃
簡報最後面是在說明,如何從既有的格式轉換成為 CloudEvents
由於應用可能已經有在使用舊的格式,那麼可以透過 Adapter 的方式同時新舊兼容,最後慢慢把舊的格式淘汰掉
在來就是熟悉場地
一開始進去當然就是先拍照啊:
實際直播者的角度來說看到的是這樣:
郭董和 David 老師做在對面,剩下 4 位大大做在另外一邊
從現場來看其實隔得滿空,也有點像是在面試,蠻有趣的
以上就是這次活動內容的情況,我們明年在見啦