書摘《高品質微服務》

更新於 2024/04/24閱讀時間約 11 分鐘

第一章 微服務

採用微服務的公司的組織架構必須大幅的改變以配合微服務架構,而團隊架構也會有計列的變化。但微服務架構最大的挑戰是服務架構與每個微服務的可信賴和可用性需求的標準化。 p. 1

微服務是小元件,容易替換、可獨立開發、可獨立部署。但微服務無法單獨生存 — 微服務不是孤島 — 它是大型系統中與其它微服務協同工作已完成以前通常有單獨一個應用程式完成的工作。 p. 5

儘管可能有許多正確的方式將一整塊分解成服務組件,但是錯誤的方法更多。 p. 6

拆分一整塊成微服務時,負責提供穩定平台供開發與執行微服務的基礎建設組織會變得更重要。基礎建設團隊必須提供穩定的基礎建設給微服務團隊以降低微服間的互動的複雜性。 p. 7

成功轉移的關鍵是完整、仔細、不厭其煩的計劃與執行文件,加上對大型一整塊的轉移需要需要好幾年功夫的認識p. 7

處於早期階段的公司對找出需要維服務的關鍵領域與元件特別困難:新公司的應用程式不會有很多的功能,也不會有適合拆分成微服務的功能。 p. 7

微服務的 API 端點應該要標準化。 p. 8

API 端點的版本話同樣應該避免。 p. 8

基本上就是盡可能維持向下相容,使用你的微服務的人不一定有閒工夫配合你升版。

在設計良好、可持續的微服務生態系中,微服務與所有基礎建設是抽象分離的。微服務與硬體、網路、建構與部署管道、服務查詢與負載平衡是抽象分離的。 p. 9

基礎建設必須支持微服務生態系。基礎建設工程師與架構的目標必須將低階運維考量從微服務開發中排除並建構出可擴充的穩定基礎建設,讓開發者可以在上面輕鬆的建構與執行微服務。 p. 9

相較於嘗試教導每個開發者生態系中所有工具與服務的細節,應該要為生態系的每個部份建構容易使用的使用者介面然後訓練他們如何使用。將所有東西變成黑箱並以文件說明如何運作與使用。 p. 14

所有微服務都應該具有微服務層日誌記錄所有對微服務的請求與回應。 p. 15

微服務架構有四個特別大的缺點。第一個是跨團隊溝通不良的組織結構的改變——康威定律的反述。第二個是大幅的增加技術性浪費,浪費不只增加整個組織的成本,也增加工程師的成本。第三個缺點是提高系統故障的可能。第四個是工程與基礎建設資源的競爭p. 17

康威定律的反述表示使用微服務架構的公司的組織結構會由大量較小、隔離、獨立的團隊組成。這種團隊結構不可避免地會造成封閉與浪費,微服務生態系越複雜、並行、與高效率時問題會更惡化。 p. 17

很少有工程組織能夠承擔起其所謂的專用工程資源。選擇支援較少的語言並確保所有函式庫和工具與這些語言相容更為務實,而不是常識支持各種語言。 p. 18

第二章 高品質

雖然很好用,但可用性不是微服務的標準,而是目標。它並非標準是因為它無法指示如何設計、建構或執行微服務:告訴開發者微服務的可用性要更高但沒有說明如何進行 (或原因) 是無用的。 p. 22

真的。無用的。

穩定、可靠、可擴充、容錯、高效能、受控、文件良好,且能夠應對災難。這些基本原則的目的是推動微服務的可用性。 p. 24

為確保可用性,我們必須克服高速開發節奏與微服務生態系變化產生的不穩定性。 p. 24

成功的微服務 (與微服務生態系) 的標誌是穩定增長的處理量p. 25

定期與用戶以及相依服務溝通服務的擴充需求、狀態,與瓶頸以確保相互依賴的服務均準備好面對成長與可能出現的問題。 p. 26

故障狀況的解決方案的組織層級標準化表示個別微服務、基礎建設元件,或整個生態系的意外與停機應該要有仔細規劃、容易理解的處理步驟。 p. 27

誠心建議:千萬別在步驟裡加「找出 root cause」。能先重開機就先重開,任何可舒緩狀況的動作都應該先做。你絕對不會希望機師在引擎起火時,找出為什麼起火,而是想辦法在墜機前先讓飛機穩下來。

好的監控有三要素:重要資訊的日誌紀錄;正確反映服務健康狀態且容易理解的圖形顯示 (儀表板);可供採取行動的重要數據警示。 p. 28

警戒線應該要:夠高以避免噪音,但又夠低以捕捉所有確切的問題。 p. 29

第三章 穩定性與可靠性

創新、提升開發者衝勁與生產力、快述技術演進,與不停變化的微服務生態系在某個部分不穩定或不可靠時將會中止。在某些情況下,一個關鍵微服務的錯誤會導致整個業務停擺。 p. 33

最後,微服務與其端點必須能夠在不影響其他維服務下除役。 p. 33

大部分的停機與微服務故障來自程式開發過程、測試,或部署程序中沒有捕捉到的錯誤。問題通常靠回復上一個穩定建置、取消有問題的提交,與重新部署 (沒問題) 版本程式來緩和與解決。 p. 34

可靠的開發環境 —— 精確複製上線環境 —— 是關鍵,特別是受測服務需要與其他微服務互動或存取資料庫時。 p. 35

由於相依性的複雜性,在微服務生態系中設置階段環境不容易。如果你的微服務依靠其他九個微服務,則發出請求或存取時需要相依服務或相關資料庫做出精確的回應。由於這些複雜性,階段環境需要階段部署的標準化。 p. 37

我是不知道標準的翻譯應該是什麼?但大家真的能猜到階段環境是 staging 嗎?我一直覺得翻譯不用全部都翻成中文...

逐步絕對需要自動回復:若發生錯誤,部署系統必須自動回復到上一個穩定版本。要記得逐步處理的是真實工作,任何問題會影響真實世界。 p. 41

canary 翻譯成逐步我是真的傻眼了...

讓開發者直接部署上線應該只用於發生重大問題時。若不嚴格執行,就有可能會忽略程序並直接上線:大部分開發者都會認為每個修改與部署很重大而略過階段與逐步,進而影響整個微服務生態系的穩定性與可靠性。 p. 42

作為多年的 release manager,看到這句話很感動,我常是那個阻止直接上線的人...

認識微服務的相依性與故障計畫是建構穩定又可靠的微服務的最重要角度之一。 p. 43

微服務的相依性必須被辨識、紀錄,與追蹤。任何會影響微服務的 SLA 的相依性必須包含在微服務的架構圖與文件與服務的儀表板中。 p. 43

我沒打錯字喔,但讀起來很怪吧!

第四章 擴充性與效能

在工作由數百 (或數千) 個微服務合作處理工作的大型微服務生態系中評估與提升效率是非常的困難。它也受限於電腦架構與分散式系統的法則:系統越分散且微服務越多,個別微服務的效率對整個系統的影響越小。 p. 47

我們必須有效率的使用硬體資源、知道資源的瓶頸與需求、並進行合適的容量計畫。 p. 47

各方面都完美的微服務在相依服務不能跟著擴充時還是有擴充性的問題。就算只有一個重要相依服務無法跟著擴充,則整個相依鏈都會受影響。確保所有相依服務會跟著微服務擴充是高品質服務的基礎。 p. 53

找出工作量模式後,修改、計畫中的停機,與部署都可以避開尖峰時刻以減少尖峰時刻出問題時的停機。 p. 54

開發團隊應該要能回答與微服務有關的三個問題:微服務如何處理工作、微服務的工作處理效率,與請求數量增加時微服務的效能。 p. 55

微服務必須以可擴充與高效能的方式處理資料。微服務儲存與處理資料的方式很容易會是擴充性與效能最重要的限制:選擇不對的資料庫、錯誤的結構設計,或資料庫不支援借測會影響微服務的可用性。 p. 56

第五章 容錯與災難預防

緩和災難與避免整個系統的可用性的受影響的唯一方是要求生態系中的每一個微服務容錯並準備好應對災難。 p. 61

為預防與擴充相關的意外與故障並完全準備好應對未來增加的工作量,我們可以用負載試驗檢查服務的擴充性。 p. 72

知道工作量,通知負責待命的相關團隊,從階段環境跑過測試之後,你絕對需要在線上執行負載測試。 p. 73

這真的很考驗心臟,但我也聽過另一種說法,千萬別在正式環境執行負載測試。

故障發生時,故障檢測與補救的目標必須是:減少對使用者的影響p. 76

這些處理意外的步驟加起來共有五個階段:評估、協調、緩和、解決,與跟進。 p. 78

我再加一個:把不按這步驟處裡的人趕出去。感覺我對這件事怨念很深...

緩和和解決不同:它並非完全改正問題的根源,只是減少影響。 p. 79

意外或停機緩和後,工程師可以開始解決問題的根源。 p. 79

跟進階段有三件事:撰寫檢討報告來分析與認識意外或停機、嚴重意外或停機必須公布並審核、列出讓開發團隊採取行的清單以讓受影響的微服務回復到高品質狀態。 p. 79

第六章 監控

若不知道微服務的狀態、沒有追蹤關鍵數據、則累積的不明故障會引發停機。 p. 81

可採取行動的重要數據警示讓開發者可以在停機前緩和與解決問題。最後一個要素是實作可持續的待命輪班以應對警示。 p. 81

監控服務的可用性、服務層級協議 (SLA)、延遲 (整個服務與其 API 端點)、API 端點成功、API 端點回應與平均回應時間、服務 (用戶) 的 API 請求來源 (與發送請求的端點)、錯誤與例外 (有處理與未處理),以及相依性的健康狀態。 p. 83

有些東西絕對不應該紀錄。日誌不應該有身分資料,例如客戶的姓名、身分證字號,與其它隱私。大部分情況下,使用者 ID 與使用者名稱等看起來沒關係的資料在沒加密下不應該被記錄。 p. 85

有時候某些資料在處理客服來的問題時是有用的,但確實要小心處理。

所有警示都必須可採取行動。不能採取行動的警示由待命開發者解決 (或忽略),因此不重要、不相關、沒什麼錯,或不能由開發者解決,任何不能立即由待命開發者採取行動的警示應該拿掉、重新非配給相關的待命工作,或 (若能) 轉換成可採取行動的警示。 p. 87

建構逐步指令描述如何補救、緩和,與解決警示。這些逐步指令應該放在集中的操作手冊中以讓待命者方便查詢。 p. 87

識別警示的反模式。若微服務的待命者背景是煩死但微服務又沒有問題,則超過一次以上且容易緩和或解決的警示應該要自動化排除。 p. 88

待命輪班應該要簡單且平均分擔:同一時間不少於兩個開發者。且待命期應該不超過一週且每月不超過一次。 p. 88

說是這麼說,但如果考慮大家的感受,排班其實蠻複雜的。

第七章 文件與教育訓練

重點是更新微服務的文件。問微服務生態系中的開發者主要的憂慮,... (略) ... 通常會有相同的答案:它是黑盒子,不知道它如何運作,且文件是廢物。 p. 91

最好的辦法是將文件更新放在開發流程中。若文件與開發工作分開 (次要),則不會被完成並變成微服務的技術負債的一部分。要減少技術負債,開發者應該 (或被要求) 修改程式時要更新文件。 p. 93

閱讀程式是不可能知道微服務如何運作,而好的架構圖示是容易理解的微服務視覺描述與摘要。這些圖示還透過將微服務的內部運作抽象化以幫助新功能的開發者知道新功能如何 (或不能) 運作。最重要的是它描繪出只有視覺表現才看得出來的架構問題:很難從閱讀程式看出服務的故障點,但在精確的架構圖示下就很明顯。 p. 94

不確定原文是什麼,但這是我第一次看到「架構圖示」的說法...

在上千個不同微服務與開發團隊間推動這些高品質標準讓我知道微服務的教育訓練最有效的方式是為每個微服務排定架構審核p. 98


內容十分精實,一百多頁很薄的一本書,但含了很多有用的資訊,就算不是開發微服務,書中的內容也可以用在很多雲端服務的開發與維運上。中文版唯一可惜的地方,翻譯非常不通順,很多不像中文的句子,會看到好幾個「與」連在一起用,標點符號的用法也有點怪,閱讀的痛苦指數有點高...

內容總結
高品質微服務
3
/5
avatar-img
53會員
104內容數
這是從 Medium 開始的一個專題,主要是想用輕鬆閒談的方式,分享這幾年軟體開發的心得,原本比較侷限於軟體架構,但這幾年的文章不僅限於架構,也聊不少流程相關的心得,所以趁換平台,順勢換成閒談軟體設計。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Spirit的沙龍 的其他內容
今天的任務是找到獨一無案的方法創造新事物,不只讓未來變得不一樣,而且要更好,所以我們要從 0 到 1。最重要的第一步是自己獨立思考。唯有重新看待世界,像古人首次見到它那樣覺得新鮮古怪,我們才能重新創造,並將更好的未來留給後世。
5/5從 0 到 1
這陣子比較有空可以去天瓏書局晃晃,正好看到這本剛上市不久的書,整體上大多數守則,也是我自己一直在遵循的,是相當不錯的一本總結書。但真的要仔細看每一節的內容,理解每個原則背後的情境與想要改善的問題是什麼。如果只是把每一節的標題拿來使用,很容易就會發現衝突的部分。
5/5程式設計守則
這本書從 docker 的角度出發,介紹很多可重複使用的 pattern,除了翻譯某些地方有點怪之外,算是很有趣的一本書,後面很多的 pattern 可以想成是 sidecar 的進階使用方式,在不改變應用程式的情況下,增加不同的功能,相當實用。
這本與《人月神話》都是軟體工程領域知名的書籍,曾從學校圖書館借來看過,但說真的,還沒進入業界,其實很難體會風險是什麼?但... 在業界打滾幾年後,再次回來看這本書時,你會發現風險... 不好說 XD 這本書不厚,就像開場說的,為進入職場前沒什麼感覺,現在卻是收穫滿滿,推薦給軟體開發相關從業人員。
在博客來意外發現到這本書,這本比較像是前傳,距離看完本傳讀後感《一人公司》已經是好幾年前的事了,說心中沒有芽是騙人的,只是就像這本書提到的,大多數人都是被內心的恐懼把芽給摘了,如果您心中的芽還在,這本書就蠻適合您的。
5/5一人公司:起步的思維與挑戰
第一次看這本書時,後面幾個章節其實比較無感,畢竟那時還是無憂無慮的學生,頂多擔心自己的資格考會不會沒過。但工作幾年後再回來看這幾個章節,真的是超級有感,點頭如搗蒜,是一本很有趣的好書,推薦給大家。
今天的任務是找到獨一無案的方法創造新事物,不只讓未來變得不一樣,而且要更好,所以我們要從 0 到 1。最重要的第一步是自己獨立思考。唯有重新看待世界,像古人首次見到它那樣覺得新鮮古怪,我們才能重新創造,並將更好的未來留給後世。
5/5從 0 到 1
這陣子比較有空可以去天瓏書局晃晃,正好看到這本剛上市不久的書,整體上大多數守則,也是我自己一直在遵循的,是相當不錯的一本總結書。但真的要仔細看每一節的內容,理解每個原則背後的情境與想要改善的問題是什麼。如果只是把每一節的標題拿來使用,很容易就會發現衝突的部分。
5/5程式設計守則
這本書從 docker 的角度出發,介紹很多可重複使用的 pattern,除了翻譯某些地方有點怪之外,算是很有趣的一本書,後面很多的 pattern 可以想成是 sidecar 的進階使用方式,在不改變應用程式的情況下,增加不同的功能,相當實用。
這本與《人月神話》都是軟體工程領域知名的書籍,曾從學校圖書館借來看過,但說真的,還沒進入業界,其實很難體會風險是什麼?但... 在業界打滾幾年後,再次回來看這本書時,你會發現風險... 不好說 XD 這本書不厚,就像開場說的,為進入職場前沒什麼感覺,現在卻是收穫滿滿,推薦給軟體開發相關從業人員。
在博客來意外發現到這本書,這本比較像是前傳,距離看完本傳讀後感《一人公司》已經是好幾年前的事了,說心中沒有芽是騙人的,只是就像這本書提到的,大多數人都是被內心的恐懼把芽給摘了,如果您心中的芽還在,這本書就蠻適合您的。
5/5一人公司:起步的思維與挑戰
第一次看這本書時,後面幾個章節其實比較無感,畢竟那時還是無憂無慮的學生,頂多擔心自己的資格考會不會沒過。但工作幾年後再回來看這幾個章節,真的是超級有感,點頭如搗蒜,是一本很有趣的好書,推薦給大家。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
自4月3日起播放的NHK晨間劇《爛漫》(らんまん),以出身高知縣佐川町的植物學家牧野富太郎為主角,由神木隆之介擔綱主演。戲劇正式播放前,紀行指南《神木高知》(かみきこうち)已搶先在3月20日發售(NHK出版)。
Thumbnail
謝謝你訂閱《紫式書齋》。紫式書齋是由我個人經營的電子報,將會分享我個人在美國從事研究工作期間的所積累的種種經驗。這些經驗可以幫助你,提高自己寫作的產量,獲得一些有共鳴的人生體悟,或者發現數據產業內的有趣觀察。
Thumbnail
亞馬遜如何變得如此龐大、賺錢及舉足輕重?他們不是去干擾不想被打擾的人,而是和大家互動。互動比打擾的效果好上一百萬倍(賽斯‧高汀(2007)。〈功能性〉,《誰說加油站不能賣鞭炮》。頁182。臺北市:天下雜誌股份有限公司)。
Thumbnail
每五個人中,就有一人具有高敏感特質!認識高敏感,強化你的溫柔通透,奔向自在的人生!
Thumbnail
《子彈思考整理術》是一本關於「如何做筆記,幫自己專注在最重要的事情上」的書。 透過這本書,我學會創造適合自己的筆記。 半年過去了,我天天都隨身帶著筆記本,紀錄生活、釐清思緒! 也因為這樣,我想用今天這篇文章,介紹這本書的基礎概念,希望能鼓勵更多人使用筆記、讓生活更好!
Thumbnail
高獲利訂價心理學各章摘要 出版日期:2020/01/07 出版社:一心文化 作者:永井孝尚 賴惠玲譯
作者莫頓・韓森曾被譽為「管理學界最具影響力的聲音」,他與團隊在這本書以4,964份有效研究問卷,指出「聰明工作」的七種重要概念:   雙重專注 (Do Less, Then Obsess): 這是七種概念中影響個人績效的最強大因素,其核心概念是先挑出幾個最重要、最有價值的項目
Thumbnail
《下重注的本事:當道投資人的高勝算法則》一書為知名價值投資者,同時也為帕波萊投資基金的創辦人-莫尼斯・帕波萊之作品。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
自4月3日起播放的NHK晨間劇《爛漫》(らんまん),以出身高知縣佐川町的植物學家牧野富太郎為主角,由神木隆之介擔綱主演。戲劇正式播放前,紀行指南《神木高知》(かみきこうち)已搶先在3月20日發售(NHK出版)。
Thumbnail
謝謝你訂閱《紫式書齋》。紫式書齋是由我個人經營的電子報,將會分享我個人在美國從事研究工作期間的所積累的種種經驗。這些經驗可以幫助你,提高自己寫作的產量,獲得一些有共鳴的人生體悟,或者發現數據產業內的有趣觀察。
Thumbnail
亞馬遜如何變得如此龐大、賺錢及舉足輕重?他們不是去干擾不想被打擾的人,而是和大家互動。互動比打擾的效果好上一百萬倍(賽斯‧高汀(2007)。〈功能性〉,《誰說加油站不能賣鞭炮》。頁182。臺北市:天下雜誌股份有限公司)。
Thumbnail
每五個人中,就有一人具有高敏感特質!認識高敏感,強化你的溫柔通透,奔向自在的人生!
Thumbnail
《子彈思考整理術》是一本關於「如何做筆記,幫自己專注在最重要的事情上」的書。 透過這本書,我學會創造適合自己的筆記。 半年過去了,我天天都隨身帶著筆記本,紀錄生活、釐清思緒! 也因為這樣,我想用今天這篇文章,介紹這本書的基礎概念,希望能鼓勵更多人使用筆記、讓生活更好!
Thumbnail
高獲利訂價心理學各章摘要 出版日期:2020/01/07 出版社:一心文化 作者:永井孝尚 賴惠玲譯
作者莫頓・韓森曾被譽為「管理學界最具影響力的聲音」,他與團隊在這本書以4,964份有效研究問卷,指出「聰明工作」的七種重要概念:   雙重專注 (Do Less, Then Obsess): 這是七種概念中影響個人績效的最強大因素,其核心概念是先挑出幾個最重要、最有價值的項目
Thumbnail
《下重注的本事:當道投資人的高勝算法則》一書為知名價值投資者,同時也為帕波萊投資基金的創辦人-莫尼斯・帕波萊之作品。