目錄
1.微服務架構是什麼樣子的?
通常傳統的專案體積龐大,需求、設計、開發、測試、部署流程固定。新功能需要在原專案上做修改。
但是微服務可以看做是對大專案的拆分,是在快速迭代更新上線的需求下產生的。新的功能模組會發布成新的服務元件,與其他已釋出的服務元件一同協作。 服務內部有多個生產者和消費者,通常以http rest的方式呼叫,服務總體以一個(或幾個)服務的形式呈現給客戶使用。
微服務架構是一種思想對微服務架構我們沒有一個明確的定義,但簡單來說微服務架構是:
採用一組服務的方式來構建一個應用,服務獨立部署在不同的程式中,不同服務通過一些輕量級互動機制來通訊,例如 RPC、HTTP 等,服務可獨立擴充套件伸縮,每個服務定義了明確的邊界,不同的服務甚至可以採用不同的程式語言來實現,由獨立的團隊來維護。
2.微服務,服務治理是怎麼樣的
服務治理:在微服務架構下,出現了新的服務問題,從而需要對微服務進行服務治理。那微服務又有哪些問題需要治理?
1、服務註冊與發現(閘道器層)
2、可觀測性(監控,日誌,呼叫追蹤)
3、流量管理(閘道器流量轉移20%至新版本介面)
4、安全(訪問其他服務需要授權,閘道器層)
5、控制(服務流量分發,閘道器層)
6、服務配置(閘道器層,k8s的congfig配置中心)
7、服務熔斷(一個服務的錯誤,引起整個服務的崩潰。當出現錯誤時,執行我們自定義的方法。避免崩潰。但是微服務已經隔離了,應該不會出現整個系統服務崩潰這種問題,最多單個服務不可用)
8、服務彈性伸縮(hpa自動擴容)
9、負載均衡(k8s,ingress->nginx自動均衡)
10.服務監控(Promethues,rancher)
3.grpc遵循什麼協議?
grpc遵循HTTP/2協議,是一個二進位制協議
grpc與http一樣,底層都是tcp連線,遵循socket套接字
4.grpc內部原理是什麼?
rpc客戶端:發協議請求,接收響應
rpc服務端:接收協議請求,傳送響應
5.http與rpc的區別
http本質上也是rpc,協議不同
http:是rpc實現的一種方式,基於http協議
rpc:可以基於tcp協議,也可以基於http協議
6.熔斷與降級
熔斷原理:
在微服務架構中,當呼叫鏈路中的某個微服務長時間不可用或者有延遲,響應過慢,系統就會熔斷對該節點微服務的呼叫,快速返回錯誤資訊。當監控到該微服務正常工作後,再次恢復該呼叫鏈路。
熔斷和降級:
相似性:
1.目的一致,保護系統,防止整個系統崩潰
2.讓使用者體驗到某些服務暫時不可用,預設的資料返回給使用者
3.粒度一致,都是服務級別的
不相似性:
1.觸發條件不同:
熔斷一般是某個服務故障引起的,一般下游服務。
降級一般是整體負荷考慮
2.管理目標的層次不同:
熔斷是針對框架級的處理,每一個服務都需要熔斷措施。
降級一般是針對業務流量的,一般從最外圍的服務開始降級。比如閘道器擋住流量
7.限流器
服務限流是指在一定時間段內限制服務的請求量以保護系統,主要用於防止突發流量而導致的服務崩潰,比如秒殺、搶購、雙十一等場景,也可以用於安全目的,比如應對外部暴力攻擊。
常用的限流演算法有以下幾種:
1.計數器演算法
實現方法:
在閘道器服務設定一個全域性計數器,內部維護一個計數器,對一段時間的服務請求進行累計判斷計數器是否達到預先設定的閾值。如果沒有達到閾值,就允許請求通過,並且計數器加1;如果達到閾值,則拒絕服務,拋棄請求。進入下一個計時週期後,計數器清零,重新計數。
2.漏桶演算法
原理:漏桶演算法的原理可以這樣理解,將服務請求想象成流入漏桶的水,漏桶中的水以恆定的速率從桶底流出,當流入漏桶的水速度過快,超過了漏桶容量時,則直接溢位。所以,漏桶演算法能夠控制服務請求按照固定速率均勻輸出,平滑突發流量,實現流量整形,為後續處理提供一個穩定的流量。但是,漏桶演算法無法控制請求按照一定的速率均勻輸入。
實現方法1:
redis裡放一個分散式鎖,數量100,進來一個請求數量-1,請求完了+1.當數量為0時,拒絕請求
3.令牌桶演算法
原理:令牌桶演算法是速率限制(Rate Limiting)和流量整形(Traffic Shaping)中最常使用的一種演算法。典型情況下,令牌桶演算法用來控制傳送到網路上的資料的數目,並允許突發資料的傳送
實現方法:
redis裡放一個分散式鎖,數量初始100,每秒+1,如果大於100則令牌益處,不+。來一個請求取一個令牌,數量-1.當令牌數=0時,拒絕請求。
所以,令牌桶演算法既可以控制請求均勻輸入的速度,又可以控制請求的均勻輸出速率。
8.斷路器
斷路器就是服務熔斷和服務降級
9.微服務雪崩效應
微服務雪崩效應:某一個服務單點故障,很多介面都依賴於此服務。那麼就會產生一系列服務被進一步拖垮稱為雪崩。
解決方法:做熔斷
10.服務發現/服務註冊
通過zookeeper
服務端:服務端啟動時,在zookeeper中建立臨時有序節點,服務關閉時,臨時節點自動刪除了(zookeeper臨時節點機制)
客戶端:監聽節點的變化