天天看點

淺談對微服務的了解

簡介

微服務興起已經多年了,這幾年已到大發展階段。公司内部做了很多和微服務相關的事情,自己也看了一些微服務相關的内容。現在再來認識”微服務“三個字,終于有點懂了的感覺。

學習期間看過的内容有

  1. 微服務設計
  2. 雲原生分布式存儲基石:etcd深入解析
  3. Docker技術入門與實戰
  4. 每天5分鐘玩轉Kubernetes
  5. 左耳聽風
  6. 從0開始學微服務

出現原因

微服務為什麼會出現?我覺得這是網際網路發展的必然結果。

如同以前沒有IOS七層模型的時候,當時的程式員做程式設計,他們需要自己做七層模型做的事情,這個事情每一個程式員都需要做,造成了大量的資源浪費,而且每個人做出的效果也很難說完美。然後IOS七層模型出現了,統一的規範幫程式員完成重複性工作,大大提升了開發效率。

這麼看來的話,微服務做的是相同的事情。

網際網路曆經幾十年的發展,頭部公司規模巨大,碰到大量問題,而這些問題每一個企業都可能遇到。在很多事情上大家都在重複造輪子,而且很多時候做的也未必很好。高人們在吸收優秀實踐的基礎上,結合自己廣博的學識,推動了微服務的發展。

目前看微服務形成統一标準還比較困難,一是從整個發展階段來看,現在還是處于初期,相關的微服務人才并沒有大量出現,二是各個公司自身業務情況不一樣,很難完全統一。但是,微服務其實已經成燎原之勢,在不久的将來,可能開一家網際網路公司會變得更加簡單,微服務會像TCP/IP一樣,對開發人員來說是完全透明的,開發人員隻需要關注開發業務邏輯即可,當然,前提是發展到這個階段,還需要程式員的話。

開發這種通用性的微服務平台,倒也是很不錯的一個創業方向。

是以作為當代程式員,學習微服務還是必須的,這是必然的趨勢,也能增加自己的競争力。假如真有一天,微服務和TCP/IP一樣透明了,懂微服務核心原理的人仍然更有價值,畢竟到時候隻有這些人才能解決某些神奇的問題。

體系

微服務的水挺深的,準确的說,不僅深還特别廣。微服務涉及的内容特别多,而且每一塊都可以深入研究,成為這方面的專家。

在《微服務設計》這本書裡,給微服務下的定義為:微服務就是一些協同工作的小而自治的服務。

這個定義不是特别好,總感覺是把微服務的範圍縮小了。

另外閱曆不同對這句話的了解上差距還是蠻大的。記得以前我有一個評論系統,評論服務、評論背景、DB、緩存等都是獨立部署的,我當時覺得這個評論系統就是微服務。這麼說不能算百分之百的錯,但肯定也不是正确的。

因為微服務闡述的是一整套體系,單單一個獨立的服務,隻占微服務很小的一部分。

微服務主要由6部分構成

  1. 服務描述

    類似服務的說明文檔,簡單但不可或缺。比如,服務調用首先要解決的問題就是服務如何對外描述。比如,你對外提供了一個服務,那麼這個服務的服務名叫什麼?調用這個服務需要提供哪些資訊?調用這個服務傳回的結果是什麼格式的?該如何解析?這些就是服務描述要解決的問題。

  2. 注冊中心

    有了服務的接口描述,下一步要解決的問題就是服務的釋出和訂閱,就是說你提供了一個服務(Provider),如何讓外部(Consumer)想調用你的服務的人知道。這個時候就需要一個類似注冊中心(Registry)的角色,服務提供者将自己提供的服務以及位址登記到注冊中心,服務消費者則從注冊中心查詢所需要調用的服務的位址,然後發起請求。

  3. 服務架構

    通過注冊中心,服務消費者就可以擷取到服務提供者的位址,有了位址後就可以發起調用。但在發起調用之前你還需要解決以下幾個問題。服務通信采用什麼協定?是RESTful API還是gRPC?資料傳輸采用什麼方式資料壓縮采用什麼格式?這些活通常內建到了我們的服務架構裡面,市面上有很多這樣的開源架構,相對都比較成熟,接下來考驗你的是快速上手的能力。

  4. 服務監控

    一旦服務消費者與服務提供者之間能夠正常發起服務調用,你就需要對調用情況進行監控,以了解服務是否正常。通常來講,服務監控主要包括三個流程,名額收集,資料處理,資料展示。監控是為了發現問題和異常,如果要進一步跟蹤和定位問題,則需要進一步了解服務追蹤。

  5. 服務追蹤

    除了需要對服務調用情況進行監控之外,你還需要記錄服務調用經過的每一層鍊路,以便進行問題追蹤和故障定位,最後達到接近問題的目的。服務監控和追蹤可以合并起來,但是要明确各自的職責是不一樣的。

  6. 服務治理

    服務監控能夠發現問題,服務追蹤能夠定位問題所在,而解決問題就得靠服務治理了。服務治理就是通過一系列的手段來保證在各種意外情況下,服務調用仍然能夠正常進行。就目前開源的服務架構,大部分都不包括服務治理的内容,是以有可能這塊是需要你和你的團隊進行定制化開發,就看你做到什麼程度了,就好比你有資料庫但是你沒有ER圖描述,并不影響你用微服務,當然如果有就是錦上添花的東西了。

這6部分組合起來才稱之為微服務。下面的連結是我做的一個思維導圖,導圖裡面的有些内容我還沒有完全學會,後期會做進一步的整理,如果大家喜歡的話,可以先記一下這個連結。

https://www.processon.com/view/link/5f3952a17d9c0806d41a90a9

淺談對微服務的了解

學習路線

微服務算是集現代網際網路技術大成者。我是初學者,需要給自己建立一條學習路線,這樣能夠幫助自己更好的掌握内容。

對于學習路線,我認為有幾個原則:

  1. 找出必學内容并做筆記
    • 以前看過很多文章或者書籍,但是沒有把内容寫下來,總覺得學得比較淺,将内容消化後寫出來,能夠加深印象
    • 必學的内容應該是核心内容,像k8s、docker、分布式等是百分之百需要學習的
  2. 不必學
    • 同一個方案有多個技術選型,隻學一個就行。如服務編排隻要看k8s,因為這個已經算是行業标準。服務追蹤可以從zipkin和skywalking中選擇一個
    • 有些内容特别偏向于運維層面,可以了解淺一點或者完全不去了解
  3. 不斷更新和豐富腦圖
  4. 學習過程中,需要進行實踐,最終搭建出基礎款微服務。

目前計劃學習以及重新學習的内容有

  1. k8s
  2. docker
  3. Etcd
  4. GRPC
  5. Netty
  6. Dubbo
  7. ELK
  8. Grafana
  9. Kafka
  10. Skywalking
  11. Apollo
  12. Istio

其實除了這些,微服務還有很多其他的内容需要學習,這些内容可以在今後慢慢補齊。

資料

  1. 微服務學習架構路線圖(初稿)
  2. 微服務學習導航
  3. 【幹貨分享】可能是東半球最全的.NET Core跨平台微服務學習資源

最後

大家如果喜歡我的文章,可以關注我的公衆号(程式員麻辣燙)

淺談對微服務的了解

往期文章回顧:

技術

  1. 淺談微服務
  2. TCP性能優化
  3. 限流實作1
  4. Redis實作分布式鎖
  5. Golang源碼BUG追查
  6. 事務原子性、一緻性、持久性的實作原理
  7. CDN請求過程詳解
  8. 記部落格服務被壓垮的曆程
  9. 常用緩存技巧
  10. 如何高效對接第三方支付
  11. Gin架構簡潔版
  12. InnoDB鎖與事務簡析

讀書筆記

  1. 如何鍛煉自己的記憶力
  2. 簡單的邏輯學-讀後感
  3. 熱風-讀後感
  4. 論語-讀後感

思考

  1. 對項目管理的一些看法
  2. 對産品經理的一些思考
  3. 關于程式員職業發展的思考
  4. 關于代碼review的思考
  5. Markdown編輯器推薦-typora

繼續閱讀