了解什么是微服務,微服務的應用場景


了解什么是微服務

參考:https://www.cnblogs.com/skabyy/p/11396571.html

一)、原有單體服務的弊端

場景演示:

需求:小明和小皮一起創業做網上超市 的故事

功能:

網站

  • 用戶注冊、登錄功能
  • 商品展示
  • 下單

管理后台

  • 用戶管理
  • 商品管理
  • 訂單管理

二)、業務拓展:

  1. 網站系統增加促銷活動功能
  2. 增加移動設備:微信小程序,移動App(移動設備的功能和網站的功能相同),
  3. 在后台系統添加促銷管理和數據分析
  4. 四個系統共用一個數據庫

業務擴展后架構出現的弊端;

1.網站和移動端應用有很多相同業務邏輯的重復代碼

2.數據有時候通過數據庫共享,有時候通過接口調用傳輸。接口調用關系雜亂

3.數據庫表結構被多個應用依賴,無法重構和優化

4.所有應用都在一個數據庫上操作,數據庫性能急劇下降

5.開發、測試、部署、維護愈發困難, 即使只改動一個小功能,也需要整個應用一起發布 ,

三)、微服務的特點:

抽象:抽象出公用的業務能力,做成幾個公共服務

解決了各應用間數據庫的共用問題:一個服務對應一個數據庫

數據庫拆分產生的問題和挑戰 :跨庫級聯的需求

四)、日志排查

原有單體系統的日志排查:查看日志,研究錯誤信息和調用堆棧

在微服務架構中,一個服務故障可能會產生雪崩效用,導致整個系統故障

五)、微服務的弊端

1.微服務架構整個應用分散成多個服務,定位故障點非常困難

2.穩定性下降,一個服務出現故障 ,可能導致整個系統掛掉

3.服務數量非常多,部署、管理的工作量很大

4.如何保證各個服務在持續開發的情況下仍然保持協同合作

5.原本單個程序的測試變為服務間調用的測試。測試變得更加復雜

六)、如何進行故障處理:

減少錯誤:事前監控,事后分析

降低影響:容錯,服務降級

建立完善的監控體系

微服務架構中組件繁多 ,各個組件所需要監控的指標不同 ,做一個大而全的監控系統來監控各個組件是不大現實的

例如:Redis緩存監控的指標有占用內存值 ,網絡流量 ,數據庫監控連接數 ,磁盤空間 ,業務服務監控並發數,響應延遲、錯誤率等

如何實現監控:

1.各個組件提供報告自己當前狀態的接口(metrics接口)

2.接口輸出的數據格式一致

3.部署一個指標采集器組件,定時從這些接口獲取並保持組件狀態,提供查詢服務

4.需要一個UI ,從指標采集器查詢各項指標 ,繪制監控界面 或 根據閾值發出告警。

例如:Redis緩存和MySQL數據庫的指標接口:RedisExporter和MySQLExporter (網上有開源組件)

使用采用Prometheus作為指標采集器

六)、鏈路跟蹤

什么叫鏈路跟蹤?

一個用戶的請求往往涉及多個內部服務調用

鏈路跟蹤 :記錄每個用戶請求 ,記錄微服務內部產生了多少服務調用,及其調用關系

實現鏈路跟蹤:

1)、服務調用要在HTTP的HEADERS中記錄至少四項數據

1.traceId :標識一個用戶請求的調用鏈路,具有相同traceId的調用屬於同一條鏈路

2.spanId :標識一次服務調用的id

3.parentId : 父節點的spanId

4.requestTime & responseTime : 請求時間和響應時間

2)、調用日志收集與存儲的組件,以及展示鏈路調用的UI組件

鏈路跟蹤的實現過程:

使用HTTP請求的攔截器,在每次HTTP請求時生成這些數據注入到HEADERS,同時異步發送調用日志到Zipkin的日志收集器中

鏈路跟蹤只能定位到哪個服務出現問題 ,查找具體的錯誤信息的能力則需要由日志分析組件來提供

日志分析

ELK(Elasticsearch、Logstash和Kibana )日志分析組件:

Elasticsearch:搜索引擎,同時也是日志的存儲

Logstash:日志采集器,它接收日志輸入,對日志進行一些預處理,然后輸出到Elasticsearch

Kibana:UI組件,通過Elasticsearch的API查找數據並展示給用戶

日志分析過程:

日志輸出到文件------》每個服務里再部署個Agent,掃描日志文件 -------》輸出給logstash


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM