1.什么是微服務
微服務其實就是一種架構風格,他提倡我們在開發的時候,一個應用應該是一組小型服務而組成的,每一個服務都運行在自己的進程中,每一個小服務都通過HTTP的方式進行互通。他更加強調服務的徹底拆分。他并不是僅局限于用java來實現,可以由不同的編程用語言進行實現,當然也可以用不同的數據庫。
它的優點顯而易見,
? 1.服務原子化拆分,獨立打包,部署和升級,保證每個微服務清晰的任務劃分,利于擴展。
? 2.微服務之間采用Restful架構風格規范接口設計,基于HTTP協議進行相互調用,發揮HTTP協議在網絡傳輸中的輕量優勢。
下面補充一下什么叫做Restful架構風格
它是基于http協議,核心概念圍繞資源,表現層,狀態轉移。
其中資源用url標識,這里的資源就是網上一切可被操作的事務,如一篇文章,一個用戶信息都可被抽象為資源。
表現層就是資源可具有多種表現形式,如xml,json等。
狀態轉移就是客戶端借助HTTP協議的標準方法(GET,POST,PUT,DELETE等)對服務端資源進行操作,實現資源狀態改變。像GET獲取資源狀態,POST創建新資源改變狀態等。
2.微服務架構遇到的問題
一旦采用微服務系統架構,就勢必會遇到這樣幾個問題:
1.這么多小服務,如何管理它們?(服務治理? 注冊中心[服務注冊 發現 剔除])
2.這么多小服務,它們之間如何通訊?(restful rpc)
3.這么多小服務,客戶端怎么訪問他們?(網關)
4.這么多小服務,一旦出現問題了,應該如何自處理?(容錯)
5.這么多小服務,一旦出現問題了,應該如何排錯?(鏈路追蹤)
所以后面對于微服務的學習,大部分就是學習各個組件來解決各種問題。
3.微服務架構的常見概念
3.1服務治理
服務治理就是進行服務的自動化管理,其核心是服務的自動注冊于發現。
服務注冊:服務實例將自身服務信息注冊到注冊中心
服務發現:服務實例通過注冊中心,獲取到注冊到其中的服務實例的信息,通過這些信息去請求他們提供的服務。
服務剔除:服務注冊中心將出問題的服務自動剔除到可用列表之外,使其不會被調用到
3.2服務調用
在微服務架構中,通常存在多個服務之間的遠程調用的需求。目前主流的遠程調用技術有基于HTTP的 RESTfu接口以及基于TCP的RPC協議。
RPC是?一種進程間通信方式。允許像調用本地服務一樣調用遠程服務。RPC框架的主要目標就是讓遠程服務調 用更簡單、透明。RPC框架負責屏蔽底層的傳輸方式、序列化方式和通信細節。開發人員在使用的時候 只需要了解誰在什么位置提供了什么樣的遠程服務接口即可,并不需要關心底層通信細節和調用過程。
Restful前面講了,這里就不重復了。
3.3服務網關
隨著微服務的不斷增多,不同的微服務一般會有不同的網絡地址,而外部客戶端可能需要調用多個服務的 接口才能完成一個業務需求,如果讓客戶端直接與各個微服務通信可能出現:
? 1.客戶端需要調用不同的ur地址,增加難度
? 2.在一定的場景下,存在跨域請求的問題
? 3.每個微服務都需要進行單獨的身份認證
針對這些問題,API網關順勢而生。
API網關字面意思是將所有API調用統一接入到API網關層,由網關層統一接入和輸出。一個網關的 基本 功能有:統一接入、安全防護、協議適配、流量管控、長短鏈接支持、容錯能力。有了網關之后,各個 API服務提供團隊可以專注于自己的的業務邏輯處理,而API網關更專注于安全、流量、路由等問題
3.4服務容錯
在微服務當中,一個請求經常會涉及到調用幾個服務,如果其中某個服務不可用,沒有做服務容錯的話, 極有可能會造成一連串的服務不可用,這就是雪崩效應。我們沒法預防雪崩效應的發生,只能盡可能去做 好容錯。服務容錯的三個核心思想是:
? 1.不被外界環境影響
? 2.不被上游請求壓垮
? 3.不被下游響應拖垮