微服務之旅的經驗分享

2021-09-16 19:17:20 字數 2171 閱讀 4879

多年來,我們一直努力展示眾多微服務實踐者在採用微服務的過程中獲得的經驗和教訓。piotr gankiewicz是一名軟體工程師。他踏上了微服務之旅,現在決定分享一些過程當中的經驗和教訓。當然,就像所有的經驗一樣,它不是全都與你的實踐相關,但是這些經驗和教訓還是值得了解的。正如piotr說的:

\\

\

不久前,我終於決定深入到微服務的世界了。我確實花了相當長的時間尋找使用這種架構模式的機會,並最終找到了。在經過三個月的嘗試和學習,其中大部分都是自學(困難的方式),我相信是時候分享一些經驗了。

\

\\

他從講述一些核心的系統設計方面開始,其中包括api管理(gateway)。他引入了「服務匯流排」的概念,而沒有真的定義它。他還討論了儲存服務的新增:

\\

\

[...] 為了在唯讀資料庫(這裡就是cqrs一類的東西)中儲存物件,你很可能需要訂閱所有型別的事件,像usercreated和invoicepaid等等。然後你需要與特定的(微)服務通訊獲取資料,然後將它存入資料庫中。在這種場景下,你的api需要負責訂閱事件、對映資料和儲存資料到資料庫。這有問題嗎? 多數情況下當然沒有。但是,我更傾向於下述解決方案。它將api和微服務完全分離。這樣,就出現了所謂的儲存服務,由它來訂閱事件,從(微)服務獲取資料等等。儲存服務知道怎樣扁平化資料。api只需要給儲存服務傳送http請求來獲取資料。它並不需要關心資料是從**來的,是內部的資料庫,還是快取,還是處於天涯海角的某個服務。

\

\\

最後在給出他的經驗和教訓(他稱為「小貼士和竅門」)之前, 他用對服務的定義總結了設計方面。服務的部分定義包括:

\\

\

每個(微)服務處理自己的領域模型、倉庫、業務邏輯等等。整個基礎服務唯一共有的是服務匯流排和一套命令和事件集合。

\

\\

那麼回到小貼士和竅門。我們這裡只包含其中一部分。對那些認為微服務的大小重要的人,首先是「讓服務盡量小」。

\\

\

建立多個小型的專注於單一領域的微服務比建立少量臃腫的執行完全不同任務、在相同的範圍內管理不相干職責的微服務要好。最常見的例子有:建立/驗證使用者賬戶、 傳送訊息、管理產品、處理支付等等。每個領域納入到單獨的有獨特實體的服務中。

\

\\

從別人對微服務、事件溯源和cqrs的說法展開,piotr認為cqrs至關重要:

\\

\

遵循cqrs,你需要做的全部事情是傳送無返回值的命令和執行冪等的查詢。如果你遵循這一模式,你會很快發現擴充套件應用程式簡單多了,只需要分離讀寫操作。

\

\\

接下來回到資料。為服務選擇資料庫的方式至關重要。這再次和其他人討論的相似:

\\

\

每個服務(不是單個服務例項,因為你可能有許多同一服務的例項執行在不同的節點上)都應該有自己的資料庫。這樣你不僅能消除單點故障(整個系統使用單一的龐大資料庫) ,最重要的是還能自由選擇最適合特定任務的資料庫。你可能想使用sql執行嚴重依賴事務的金融操作,或者使用nosql資料庫儲存數十億json文件。

\

\\

piotr提到了其它一些事情,如請求追蹤(他舉例說明了在他的學習之旅中的實現方法 )、使用非同步訊息方法(使用http)、確保新服務易於部署(可能隱晦地引用到持續整合和持續部署)以及編寫端到端測試。最後提到的是「包含故障恢復、服務發現和其它一些有用的機制\"。

\\

\

任何時候出錯了,你可能希望保證整個系統不會崩潰或者至少其中一部分不會崩潰。確保你引入了重試機制(比如polly)、服務發現工具,如consul以及集中儲存證書,比如使用vault、azure key vault或者我的開源專案lockbox。

\

\\

piotr討論的大部分和過去這些年別人說的非常相似,所以在使用微服務開發時我們很可能正趨向乙個關於方法有效還是無效的共識。但是需要注意的是,儘管piotr討論了他的一些經驗和教訓,但是沒有任何關於他開發的應用程式表現如何的說明(負載下擴充套件、恢復能力等等)。可能後期會有,我們拭目以待。

\\檢視英文原文:sharing experiences from a microservices journey

\\ 感謝冬雨對本文的審校。

\

微服務之旅的經驗分享

多年來,我們一直努力展示眾多微服務實踐者在採用微服務的過程中獲得的經驗和教訓。piotr gankiewicz是一名軟體工程師。他踏上了微服務之旅,現在決定分享一些過程當中的經驗和教訓。當然,就像所有的經驗一樣,它不是全都與你的實踐相關,但是這些經驗和教訓還是值得了解的。正如piotr說的 不久前,...

微服務之旅的經驗分享

多年來,我們一直努力展示眾多微服務實踐者在採用微服務的過程中獲得的經驗和教訓。piotr gankiewicz是一名軟體工程師。他踏上了微服務之旅,現在決定分享一些過程當中的經驗和教訓。當然,就像所有的經驗一樣,它不是全都與你的實踐相關,但是這些經驗和教訓還是值得了解的。正如piotr說的 不久前,...

微服務之旅的經驗分享

多年來,我們一直努力展示眾多微服務實踐者在採用微服務的過程中獲得的經驗和教訓。piotr gankiewicz是一名軟體工程師。他踏上了微服務之旅,現在決定分享一些過程當中的經驗和教訓。當然,就像所有的經驗一樣,它不是全都與你的實踐相關,但是這些經驗和教訓還是值得了解的。正如piotr說的 不久前,...