前言
在程式設計師的世界裡,新概念、新技術層出不窮,誠如莊子所言:“吾生也有涯,而知也無涯,以有涯隨無涯,殆已!”把學習新技術當作一種樂趣,掌握其精髓,並應用到日常的開發工作中,提高開發效率,構建出更酷、更符合使用者需求的產品,是一件很快樂的事。
高階軟體架構師多年實戰經驗的結晶,多位專家聯袂推薦!
手把手帶你體會從微服務的設計、實現到運維的全過程。涵蓋了微服務度量的概念、設計,實現、聚合分析、展示和報警,以及如何透過度量來推動服務的改進和完善
本文從一開始接觸微服務到熟練應用度量驅動開發方法,由淺入深,按照微服務開發的全過程逐步展開!我們將從目錄、主要內容和評價三部分做介紹!
目錄主要內容在本文主線上,我們從微服務的特點入手,引出了度量驅動開發的基本概念、內容、方法與策略,然後從度量的設計和實現開始詳細講述如何設計與實現微服務的度量,並介紹如何用度量驅動的方法和技術來改進微服務。接下來,詳細闡述了度量資料的聚合與展示、分析與報警的各種方案,最後結合例項介紹了度量驅動運維和微服務的全程度量。下面簡要介紹一下本文各章節的主要內容。
第1章微服務入門;對比了單體服務與微服務的特點,講解了我們心中的微服務之道,並介紹了一個貫穿始終的微服務例項——土豆微服務,將我們熟悉的待辦事項Todo List應用拆分為土豆管理微服務、土豆提醒微服務和土豆網頁微服務,並分別簡述了它們的功能與設計。在技術實現上,使用Java語言基於Spring Boot進行開發,這個案例為後續的度量做了最基本的鋪墊。
1.1單體服務的特點1.2拆分服務1.3微服務的特點1.4微服務之道1.5十豆微服務案例快速上手第2章微服務度量的基本概念;本章簡要介紹了微服務的侷限及度量在解決微服務侷限中的重要作用。然後分別從內容、層次、方案選擇等各個方面介紹了度量的一些基本概念和方法,為後文如何使用度量來驅動設計、開發等鋪墊初步的理論知識。微服務自身的特點和侷限,使得它相比傳統單體服務更加需要重視度量,每個微服務都應該在開發功能之前先定義度量指標。關於度量的基本知識還有很多,讀者可以透過下面的超連結獲取到更多、更深入的知識。
第3章微服務度量的設計;本章主要介紹了微服務協議和儲存系統的選擇,並以3種常用的微服務協議為例,分析了它們的特點及度量方法,以及對應的資料儲存系統,還介紹了用度量實現高可用性的3個重要手段:分流、限流和斷流。我們提倡度量驅動設計,就是讓大家在做微服務設計時根據度量指標做出技術選型決策,並對度量什麼、如何度量等在設計階段就胸有成竹。我們為土豆微服務設計了一個度量驅動方案供大家參考。
第4章度量驅動的微服務實現;軟體核心都是由程式碼構成的,所以對程式碼的度量不僅僅展示程式碼的質量,同時也能反過來透過不斷反饋、修改,促進程式碼質量的改善。本章首先介紹如何度量程式碼的質量,然後在度量程式碼的實現上,介紹了度量實現依賴的關鍵技術,最後重點介紹瞭如何利用這些技術實現土豆微服務的度量。度量驅動實現的要點就在於我們在實現服務時要有的放矢,根據設計在適當的地方進行埋點。透過上述常用的軟體庫和技術可產生各種各樣的度量資訊,下一章我們將介紹如何收集和展示這些度量資料。
第5章度量資料的聚合與展示;本章主要介紹了度量資料產生後,怎麼把這些資料聚合、儲存起來,並以案例的方式介紹了度量資料清洗與處理的方法,然後介紹了資料展示中經常用到的圖表型別及選擇標準。最後重點介紹了兩種常用的開源的聚合與展示方案,即TIG和ELK,並基於這兩個方案展示了土豆微服務的各種度量資料的展示效果。這些技術都是為了從大量的度量指標資料中提煉、挖掘出有用的資訊,圍繞著微服務和其所支撐的業務的關鍵業績指標,利用這些強大的資料統計和圖表工具,我們就可以做有針對性的分析。下一章我們就開始介紹度量的分析與報警相關的技術與實踐。
第6章度量資料的分析與報警;本章以例項出發,介紹瞭如何對度量資料進行分析與報警設計,並列舉了一些常見問題。重點在於圍繞資料分析的目標,透過觀察、比較和分析,透過現象看本質。我們基於Python和Elasticsearch API從零開始為土豆微服務打造了一個迷你的報警系統,麻雀雖小,功能卻不弱。利用度量檢查、報警和報告三大功能,能使你的系統時刻有雙“慧眼”護航,開發人員和運維人員再也不用擔心產品線問題沒能及時發現了。以這個系統為雛形,我們在實際工作中開發了一個更強大的報警系統,並與PagerDuty和即時通訊(IM)系統做了深度整合,可預先或及時發現產品線上的很多問題。
第7章度量驅動的運維;微服務的運維是件很麻煩的事,涉及部署升級、監控報警、故障恢復等繁雜的事項,其目的就是保證持續地向用戶提供可靠高效的服務。傳統的監控系統主要關注系統級的指標,而只有針對微服務自身和業務KPI的全方位度量才能做好運維工作。度量驅動的運維是我們在事前、事中和事後對產品線上的服務做好運維工作的有效手段和關鍵技術。我們的微服務能夠達到3個9(99.9%)以上的高可用,度量功不可沒。
第8章全鏈路度量;本章是全文的最後一章,我們首先討論了微服務的全鏈路度量,從前端的各個客戶端(瀏覽器、本地應用和手機應用App)到後臺的眾多伺服器進行全鏈路全方位的度量資料採集,這樣才能透過度量來驅動我們從各個方面持續改進。之後我們對微服務度量驅動開發這套方法論做了回顧和展望。技術發展日新月異,隨著雲平臺、大資料、流計算、機器學習的浪潮襲來,度量驅動開發的方法與之結合將如虎添翼。由於篇幅所限,不再展開闡述,希望在以後能有機會與大家一起討論和學習。
大牛對本文評價