微服務是一種軟體開發技術- 面向服務的體系結構(SOA)架構樣式的一種變體,它提倡將單一應用程式劃分成一組小的服務,服務之間互相協調、互相配合,為使用者提供最終價值。
每個服務執行在其獨立的程序中,服務與服務間採用輕量級的通訊機制互相溝通(通常是基於HTTP的RESTful API)。
每個服務都圍繞著具體業務進行構建,並且能夠獨立地部署到生產環境、類生產環境等。
應儘量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據上下文,選擇合適的語言、工具對其進行構建。
易於開發和維護
啟動較快
區域性修改容易部署
技術棧不受限
按需伸縮
運維要求較高
分散式的複雜性
介面調整成本高
重複勞動
該技術是為了解決什麼問題?
它的呼叫流程?
以client 呼叫 server 的 add函數為例。
使用者端:gRPC Server
伺服器端:gRPC Stub
互動過程就是使用者端傳送請求到伺服器端,伺服器端處理請求並將結果傳送響應返給使用者端。
處理請求過程:
使用者端把請求的引數進行序列化,序列化是通過ProtoBuf協定【protobuf】來編碼的,編完碼向伺服器端傳送請求,請求跨網路,基於HTTP2.0協定,
此時伺服器端接收到了請求,伺服器端同樣通過ProtoBuf協定進行解碼,反序列化,發現本地有add函數,將結果序列化,用ProtoBuf協定編碼,通過網路來到使用者端,使用者端通過ProtoBuf協定協定反序列化,把響應的結果用到使用者端的程式程式碼裡。
分析完過程,gRPC不會一個人唱獨角戲,它必須結合ProtoBuf協定協定才能發揮功效。
跨平臺——方便傳輸資料
跨語言——方便解析資料,解析成自己語言的語法結構
比json,xml小而快
gRPC要實現跨平臺+跨語言+序列化、反序列化,就要用到ProtoBuf協定來實現。
從微服務入門開始,講解go-micro的transport通訊層grpc原理。以及grpc資料的傳輸序列化和反序列化protobuf的原理
以業務最簡單的使用者模組為例,串聯gorm等知識,理解如何將模組開發封裝。
介紹go-micro中的Consul元件實現註冊中心和設定中心的基本原理。利用Docker快速安裝Consul,介紹實際工作中的使用經驗,並將其接入專案。
介紹go-micro中的Jaeger元件原理和作用。為專案整合鏈路追蹤功能,完成鏈路觀測臺
熔斷,限流,負載均衡是微服務保穩三劍客,介紹hystrix-go元件原理和作用,介紹限流問題的程式碼包 uber/ratelimit的基本使用
微服務Go化,一般都是因為在意效能,所以效能監控非常重要。使用Docker快速完成promethues+grafana安裝,並接入專案中,完成效能監控臺
通過zap 工具進行紀錄檔記錄,統一收集到紀錄檔中心ELK中。再統一設定,將前面的鏈路追蹤、負載均衡、監控紀錄檔等全部整合在一起,完成服務級觀測臺
拉取micro 映象 docker pull micro/micro
生成模組專案檔案 docker run -rm -v 根目錄:根目錄 -w
.proto檔案 編寫介面
生成micro.go檔案
完成model檔案 編寫資料表struct對映體
編寫reponsitory 檔案,用gorm對資料庫操作
在service 完成對介面的實現
針對protoc暴露介面,實現介面(request引數賦值)
接入各種微服務外掛,如設定、註冊中心,鏈路追蹤,限流,ELK等等
完成main.go開發,完成微服務專案部署
Go語言的使用
Docker、Docker-compose的使用
Proto的使用、編寫、命令
微服務開發流程:
go-micro目錄生成,使用,介紹,安裝
微服務元件的認識(註冊中心和設定中心(Consul)、鏈路追蹤(jaeger)、限流(伺服器端)、負載均衡7
(使用者端)、ELk等等)
gorm資料庫開發
Prometheus監控服務
ELK介紹
kibana紀錄檔視覺化
filebeat紀錄檔上傳
logstash收集紀錄檔
elasticsearch 紀錄檔搜尋
zap紀錄檔封裝
Go 語言目前的應用趨勢 Go語言為什麼適合做微服務?
1、Go高並行等特性,更適合大型系統。
2、Go編譯速度快,無依賴環境,更適合容器化
3、Go將會成為雲端計算時代的基礎設施程式語言,特別適合微服務
對於真正微服務專案來說,服務開發只是第一步,容器化、彈性伸縮和可觀測才是真正關鍵。
微服務技術體系
入門Docker
掌握微服務必備
掌握微服務觀測
掌握微服務保穩
掌握微服務維護
掌握微服務部署
服務間通訊,包括服務治理、負載均衡、服務間呼叫;
服務容錯和異常排查,包括流量整形、降級熔斷、呼叫鏈追蹤;
分散式能力建設,包括微服務閘道器、分散式事務、訊息驅動、分散式設定中心。
從微服務元件的功能維度來講,服務間通訊是最基礎的功能特性,這個功能模組是最適合作為初學者學習微服務技術的切入點。
當我們構建起基礎的通訊能力之後,接下來就要考慮如何構建服務容錯能力,提高服務呼叫的穩定性了。
在這之後,我們就可以從全域性的角度構建一些分散式支援特性。
這樣,就有了一條難度平緩上升的學習曲線,也不會從入門到放棄了。
提示:結合自己的經歷,分享下自己的心路歷程,可以將您的答案寫在評論區,與博主和小夥伴一起交流。
處理情緒上的問題,這麼多年學到的一點是,發現了問題先不著急得出結論,先冷靜分析為什麼會這樣,先把心態和基調放平。
每個人焦慮的出發點可能都不一樣,但是一樣的是過度的焦慮會適得其反,消耗我們正常的注意力,讓原本正常的狀態受到影響。所以不要過度焦慮,也沒必要,也沒作用(自己思考下是不是)。
把焦慮轉化為你成長的動力,用好它,適當的焦慮能夠幫你不斷的成長,當你沒有目標的時候,會比過度焦慮更可怕,人往往是在發展中被淘汰的。
提示:結合自己的經歷,分享下自己的心路歷程,可以將您的答案寫在評論區,與博主和小夥伴一起交流。
提示:結合自己的經歷,分享下自己的心路歷程,可以將您的答案寫在評論區,與博主和小夥伴一起交流。
後來意識到這個問題,積极參與這個工期的製作中,讓自己即使沒有心態先放正,對要做的事情有預期,關鍵的時候還能說下自己的想法,要點自己需要的資源,逐步緩解當前現狀。
回家之後,儘量只做自己喜歡的事情,比如看電影,電視,下棋等。實踐中發現換腦袋帶來的輕鬆感,有助於創造性的工作。
山一天移不完,飯一天吃不完,凡是不要過早下結論,草草開始,自己先通盤思考下,缺什麼,要什麼,達到什麼。生活和工作儘量劃分開。
至此,go-micro微服務專案全部正式完成。
對於微服務和Go感興趣的小夥伴們,都可以與博主聊一聊,分享學習經驗,共同成長
希望大家關注博主和關注專欄,每篇部落格都乾貨滿滿。