面試-微服務篇

springcloud組件有哪些?

eureka、ribbon負載均衡、feign、hystrix、zuul/gateway網關

nacos、ribbon、feign、sentinel、gateway

服務注冊和發現是什么意思?springcloud如何實現服務注冊發現?

微服務中必須要使用的組件,考察我們使用微服務的程度

注冊中心的核心作用是:服務注冊和發現

常見的注冊中心:eureka、nacos、zookeeper

參考回答:

我們當時項目采用的eureka作為注冊中心,這個是Spring cloud體系中的一個核心組件。

服務注冊:服務提供者需要把自己的信息注冊到eureka,由eureka來保存這些信息,比如服務名稱、IP、端口等等

服務發現:消費者向eureka拉取服務列表信息,如果服務提供者有集群,則消費者會利用負載均衡算法,選擇一個發起調用

服務監控:服務提供者會每隔30秒向eureka發送心跳,報告健康狀態,如果eureka服務90秒沒接收到心跳,從eureka中剔除

nacos和eureka區別

Nacos與eureka的共同點(注冊中心)

  1. 都支持服務注冊和服務拉取
  2. 都支持服務提供者心跳方式做健康檢測

Nacos與Eureka的區別(注冊中心)

  1. Nacos支持服務端主動檢測提供者狀態:臨時實例采用心跳模式,非臨時實例采用主動檢測模式
  2. 臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除
  3. Nacos支持服務列表變更的消息推送模式,服務列表更新更及時
  4. Nacos集群默認采用AP方式,當集群中存在非臨時實例時,采用CP模式;Eureka采用AP方式

Nacos還支持了配置中心,eureka則只有注冊中心,也是選擇使用nacos的一個重要原因

你們項目負載均衡如何實現的?

負載均衡ribbon,發起遠程調用feign就會使用ribbon

回答:微服務的負載均衡主要使用了一個組件ribbon,比如,我們在使用feign遠程調用的過程中,底層的負載均衡就是使用了ribbon

ribbon負載均衡策略有哪些?

1.roundRobinRule:簡單輪詢服務列表來選擇服務器

2.weightedResponseTimeRule:按照權重來選擇服務器,響應時間越長,權重越小

3. RandomRule:隨機選擇一個可用的服務器

4.BestAvailableRule:忽略那些短路的服務器,并選擇并發數較低的服務器

5.RetryRule:重試機制的選擇邏輯

6.AvailabilityFilteringRule:可用性敏感策略,先過濾非健康的,再選擇連接數較小的實例

7.ZoneAvoidanceRule:以區域可用的服務器為基礎進行服務器的選擇。使用Zone對服務器進行分類,這個Zone可以理解為一個機房、一個機架等。而后再對Zone內的多個服務做輪詢(默認)

如果想自定義負載均衡策略如何實現?

可以自己創建類實現IRule接口 , 然后再通過配置類或者配置文件配置即可 ,通過定義IRule實現可以修改負載均衡規則,提供了兩種方式:

  1. 創建類實現rule接口,可以指定負載均衡策略(全局)
  2. 在客戶端的配置文件中,可以配置某一個服務調用的負載均衡策略(局部)

解決過哪些復雜的問題?什么是服務雪崩?怎么解決這個問題的?

什么是服務雪崩?熔斷降級(解決)限流(預防)

服務雪崩:一個服務失敗,導致整條鏈路的服務都失敗的情況

服務降級:服務自我保護的一種方式,或者保護下游服務的一種方式,用于確保服務不會受請求突增影響變得不可用,確保服務不會崩潰。

服務熔斷:hystrix熔斷機制,用于監控微服務調用情況,默認是關閉的,如果需要開啟需要在引導類上添加注解@EnableCircuitBreaker

如果檢測到 10 秒內請求的失敗率超過 50%,就觸發熔斷機制。之后每隔 5 秒重新嘗試請求微服務,如果微服務不能響應,繼續走熔斷機制。如果微服務可達,則關閉熔斷機制,恢復正常請求

參考回答:

服務雪崩:一個服務失敗,導致整條鏈路的服務都失敗的情形

服務降級:服務自我保護的一種方式,或者保護下游服務的一種方式,用于確保服務不會受請求突增影響變得不可用,確保服務不會崩潰,一般在實際開發中與feign接口整合,編寫降級邏輯

服務熔斷:默認關閉,需要手動打開,如果檢測到 10 秒內請求的失敗率超過 50%,就觸發熔斷機制。之后每隔 5 秒重新嘗試請求微服務,如果微服務不能響應,繼續走熔斷機制。如果微服務可達,則關閉熔斷機制,恢復正常請求

你們微服務是怎么監控的?

你們項目中有沒有做過限流?怎么做的?

為什么要限流?

并發量大(突發流量)

防止用戶惡意刷接口

限流的實現方式:

tomcat:可以設置最大連接數

nginx:漏桶算法

網關:令牌桶算法

自定義攔截器

nginx限流

控制速率(突發流量)

語法:limit_req_zone key zone rate

key:定義限流對象,binary_remote_addr就是一種key,基于客戶端ip限流

Zone:定義共享存儲區來存儲訪問信息,10m可以存儲16wip地址訪問信息

Rate:最大訪問速率,rate=10r/s? 表示每秒最多請求10個請求

burst=20:相當于桶的大小

Nodelay:快速處理

控制并發連接數

limit_conn perip 20:對應的key是 $binary_remote_addr,表示限制單個IP同時最多能持有20個連接。

limit_conn perserver 100:對應的key是 $server_name,表示虛擬主機(server) 同時能處理并發連接的總數。

網關限流

yml配置文件中,微服務路由設置添加局部過濾器RequestRateLimiter

key-resolver :定義限流對象( ip 、路徑、參數),需代碼實現,使用spel表達式獲取

replenishRate :令牌桶每秒填充平均速率。

urstCapacity :令牌桶總容量。

參考回答:

1,先來介紹業務,什么情況下去做限流,需要說明QPS具體多少

我們當時有一個活動,到了假期就會搶購優惠券,QPS最高可以達到2000,平時10-50之間,為了應對突發流量,需要做限流

常規限流,為了防止惡意攻擊,保護系統正常運行,我們當時系統能夠承受最大的QPS是多少(壓測結果)

2,nginx限流

控制速率(突發流量),使用的漏桶算法來實現過濾,讓請求以固定的速率處理請求,可以應對突發流量

控制并發數,限制單個ip的鏈接數和并發鏈接的總數

3,網關限流

在spring cloud gateway中支持局部過濾器RequestRateLimiter來做限流,使用的是令牌桶算法

可以根據ip或路徑進行限流,可以設置每秒填充平均速率,和令牌桶總容量

限流常見的算法有哪些?

解釋一下CAP和BASE

CAP定理

1998年,加州大學的計算機科學家 Eric Brewer 提出,分布式系統有三個指標:

Consistency(一致性)

Availability(可用性)

Partition tolerance (分區容錯性)

Eric Brewer 說,分布式系統無法同時滿足這三個指標。

這個結論就叫做 CAP 定理。

Consistency(一致性):用戶訪問分布式系統中的任意節點,得到的數據必須一致

Availability(可用性):用戶訪問集群中的任意健康節點,得到的數據必須一致

Partition(分區):因為網絡故障或其它原因導致分布式系統中的部分節點與其它節點失去連接,形成獨立分區。

Tolerance(容錯):在集群出現分區時,整個系統也要持續對外提供服務

結論:

  • 分布式系統節點之間肯定是需要網絡連接的,分區(P)是必然存在的
  • 如果保證訪問的高可用性(A),可以持續對外提供服務,但不能保證數據的強一致性-->? AP
  • 如果保證訪問的數據強一致性(C),就要放棄高可用性?? --> CP

BASE理論

BASE理論是對CAP的一種解決思路,包含三個思想:

Basically Available (基本可用):分布式系統在出現故障時,允許損失部分可用性,即保證核心可用。

Soft State(軟狀態):在一定時間內,允許出現中間狀態,比如臨時的不一致狀態。

Eventually Consistent(最終一致性):雖然無法保證強一致性,但是在軟狀態結束后,最終達到數據一致。

參考回答:

CAP定理(一致性、可用性、分區容錯性)

1、分布式系統節點通過網絡連接,一定會出現分區問題(P)

2、當分區出現時,系統的一致性(C)和可用性(A)就無法同時滿足

BASE理論

1、基本可用

2、軟狀態

3、最終一致

解決分布式事務的思想和模型:

1、最終一致思想:各分支事務分別執行并提交,如果有不一致的情況,再想辦法恢復數據(AP)

2、強一致思想:各分支事務執行完業務不要提交,等待彼此結果。而后統一提交或回滾(CP)

你們采用哪種分布式事務解決方案?

Seata事務管理中有三個重要的角色:

  • TC (Transaction Coordinator) - 事務協調者:維護全局和分支事務的狀態,協調全局事務提交或回滾。
  • TM (Transaction Manager) - 事務管理器:定義全局事務的范圍、開始全局事務、提交或回滾全局事務。
  • RM (Resource Manager) - 資源管理器:管理分支事務處理的資源,與TC交談以注冊分支事務和報告分支事務的狀態,并驅動分支事務提交或回滾。

分布式服務的接口冪等性如何設計?

冪等: 多次調用方法或者接口不會改變業務狀態,可以保證重復調用的結果和單次調用的結果一致。

需要冪等場景

用戶重復點擊(網絡波動)

mq消息重復

應用使用失敗或超時重試機制

接口冪等

基于RESTful API的角度對部分常見類型請求的冪等性特點進行分析

請求方式

說明

GET

查詢操作,天然冪等

POST

新增操作,請求一次與請求多次造成的結果不同,不是冪等的

PUT

更新操作,如果是以絕對值更新,則是冪等的。如果是通過增量的方式更新,則不是冪等的

DELETE

刪除操作,根據唯一值刪除,是冪等的

解決冪等:數據庫唯一索引(新增)、token+redis(新增、修改)、分布式鎖(新增、修改)

Token+redis方式

創建商品、提交訂單、轉賬、支付等操作

分布式鎖

參考回答:

  1. 冪等: 多次調用方法或者接口不會改變業務狀態,可以保證重復調用的結果和單次調用的結果一致
  2. 如果是新增數據,可以使用數據庫的唯一索引
  3. 如果是新增或修改數據
    • 分布式鎖,性能較低
    • 使用token+redis來實現,性能較好

第一次請求,生成一個唯一token存入redis,返回給前端

第二次請求,業務處理,攜帶之前的token,到redis進行驗證,如果存在,可以執行業務,刪除token;如果不存在,則直接返回,不處理業務

你們項目中使用了什么分布式任務調度

Xxl-job解決的問題

解決集群任務的重復執行問題

cron表達式定義靈活

定時任務失敗了,重試和統計

任務重大,分片執行

Xxl-job路由策略有哪些?

FIRST(第一個):固定選擇第一個機器;

LAST(最后一個):固定選擇最后一個機器;

ROUND(輪詢)

RANDOM(隨機):隨機選擇在線的機器;

CONSISTENT_HASH(一致性HASH):每個任務按照Hash算法固定選擇某一臺機器,且所有任務均勻散列在不同機器上。

LEAST_FREQUENTLY_USED(最不經常使用):使用頻率最低的機器優先被選舉;

LEAST_RECENTLY_USED(最近最久未使用):最久未使用的機器優先被選舉;

FAILOVER(故障轉移):按照順序依次進行心跳檢測,第一個心跳檢測成功的機器選定為目標執行器并發起調度;

BUSYOVER(忙碌轉移):按照順序依次進行空閑檢測,第一個空閑檢測成功的機器選定為目標執行器并發起調度;

SHARDING_BROADCAST(分片廣播):廣播觸發對應集群中所有機器執行一次任務,同時系統自動傳遞分片參數;可根據分片參數開發分片任務;

回答:xxl-job提供了很多的路由策略,我們平時用的較多就是:輪詢、故障轉移、分片廣播…

Xxl-job任務執行失敗怎么解決?

故障轉移+失敗重試次數,查看日志分析---->郵件告警

回答:

路由策略選擇故障轉移,使用健康的實例來執行任務

設置重試次數

查看日志+郵件告警來通知相關負責人解決

如果有大數據量的任務同時都需要執行,怎么解決?

執行器集群部署時,任務路由策略選擇分片廣播情況下,一次任務調度將會廣播觸發對應集群中所有執行器執行一次任務

分片參數

index:當前分片序號(從0開始),執行器集群列表中當前執行器的序號;

total:總分片數,執行器集群的總機器數量;

回答:

讓多個實例一塊去執行(部署集群),路由策略分片廣播

在任務執行的代碼中可以獲取分片總數和當前分片,按照取模的方式分攤到各個實例執行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40266.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode刷題記錄:(15)三角形最小路徑和

知識點&#xff1a;倒敘的動態規劃 題目傳送 解法一&#xff1a;二維動態規劃【容易理解】 class Solution {public int minimumTotal(List<List<Integer>> triangle) {int n triangle.size();if (n 1) {return triangle.get(0).get(0);}// dp[i][j]:走到第i層第…

[240705] 美光或將助力英偉達 RTX 50系列領先 AMD | 中國領跑生成式人工智能專利競賽

目錄 美光或將助力英偉達 RTX 50系列領先 AMD中國領跑生成式人工智能專利競賽 美光或將助力英偉達 RTX 50系列領先 AMD &#x1f4e2; 美光近日公布了其下一代顯存 GDDR7 的性能數據&#xff0c;顯示出在游戲性能方面高達30%的提升&#xff0c;這對于即將推出的顯卡來說無疑是…

白騎士的C語言教學基礎篇 1.2 C語言基礎語法

系列目錄 上一篇&#xff1a;白騎士的C語言教學基礎篇 1.1 C語言介紹 在這一篇內容中&#xff0c;我們將介紹C語言的基礎語法&#xff0c;包括C語言的程序結構、數據類型與變量、常量與運算符。 C語言程序結構 C語言程序的基本結構包括頭文件、主函數和語句。一個簡單的C語言…

Java+前后端分離架構+ MySQL8.0.36產科信息管理系統 產科電子病歷系統源碼

Java前后端分離架構 MySQL8.0.36產科信息管理系統 產科電子病歷系統源碼 產科信息管理系統—住院管理 數字化產科住院管理是現代醫院管理中的重要組成部分&#xff0c;它利用數字化技術優化住院流程&#xff0c;提升醫療服務質量和效率。以下是對數字化產科住院管理的詳細闡述…

【Spring Boot】統一異常處理

目錄 統一異常處理一. 概念二. 全局異常處理三. 處理特定異常 統一異常處理 一. 概念 其實統一異常是運用了AOP&#xff08;對某一類事情的集中處理&#xff09;的思維&#xff0c;簡單概括就是在我們進行前后端數據交互的時候&#xff0c;拋出的任何的異常都能夠自動捕獲然后…

uniapp微信接口回調 response.sendRedirect nginx 報404錯誤

如題 參考 uniapp打包H5時,訪問index.html頁面白屏報錯net::ERR_ABORTED 404 - 簡書 nginx中修改 配置文件 location / { try_files $uri $uri/ /index.html; root html; index index.html index.htm; } uniapp里配置 重新載入

JavaScript常用包管理工具

NPM、Yarn、CNPM 和 PNPM 是 JavaScript 生態系統中常用的包管理工具。它們各自有不同的特點和優勢。以下是對它們的詳細解釋&#xff1a; 1. NPM (Node Package Manager) 簡介&#xff1a; NPM 是 Node.js 的默認包管理工具&#xff0c;也是最早出現的 JavaScript 包管理工具…

ingress-nginx控制器證書不會自動更新問題

好久沒更新了&#xff0c;正好今天遇到了一個很有意思的問題&#xff0c;在這里給大家分享下&#xff0c;同時也做下記錄。 背景 最近想做個實驗&#xff0c;當k8s集群中secret更新后&#xff0c;ingress-nginx控制器會不會自動加載新的證書。我用通義千問搜了下&#xff0c;…

什么是FPGA的基本組成單元?

FPGA&#xff08;Field-Programmable Gate Array&#xff09;的基本組成單元是其內部結構的關鍵組件&#xff0c;這些單元可以被編程來執行各種數字邏輯功能。FPGA的基本組成單元主要包括以下幾個部分&#xff1a; 可編程邏輯塊 (CLB, Configurable Logic Block) CLB是FPGA中最…

Airflow: 大數據調度工具詳解

歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;歡迎訂閱相關專欄&#xff1a; 歡迎關注微信公眾號&#xff1a;野老雜談 ?? 全網最全IT互聯網公司面試寶典&#xff1a;收集整理全網各大IT互聯網公司技術、項目、HR面試真題. ?? AIGC時代的創新與未來&a…

【CH32V305FBP6】移植 RT-Thread

文章目錄 前言實現修改鏈接文件移植 RTT 代碼修改啟動文件修改中斷文件修改主文件 前言 移植 RT-Thread 到 CH32V305FBP6。 實現 修改鏈接文件 .text :{. ALIGN(4);*(.text)*(.text.*)*(.rodata)*(.rodata*)*(.gnu.linkonce.t.*)/* section information for finsh shell */…

Go單元測試

Go 語言中&#xff0c;單元測試是通過標準庫中的 testing 包來實現的&#xff0c;該包提供了一組功能&#xff0c;使得編寫、運行和管理單元測試變得簡單和高效。 一、規則 測試文件的命名規則 Go 中的測試文件命名規則是在被測試的源文件名后面加上 _test.go。例如&#xff0…

matplotlib下載安裝

matplotlib下載安裝過程同之前寫的pygame很類似。 Pygame下載安裝 python官網 1.搜索matplotlib 直接點進去 查看歷史版本&#xff0c;因為新版本可能出現與python不匹配問題。 我選擇3.6.3版本&#xff0c;因為我安裝的python是3.8&#xff0c;可以匹配版本。同時window操…

Linux文件描述符與FILE指針互相轉換

目錄 1、文件描述符轉換為 FILE 指針 2、FILE 指針轉換為文件描述符 在Linux中&#xff0c;文件描述符&#xff08;file descriptor, fd&#xff09;和FILE指針&#xff08;也稱為文件流指針&#xff0c;FILE pointer&#xff09;是兩種常見的文件操作接口。文件描述符是一個…

Cesium與Three相機同步(3)

Cesium與Three融合的案例demo <!DOCTYPE html> <html lang"en" class"dark"><head><meta charset"UTF-8"><link rel"icon" href"/favicon.ico"><meta name"viewport" content&q…

C++ 類和對象 構造函數

一 類的6個默認成員函數&#xff1a; 如果一個類中什么成員都沒有&#xff0c;簡稱為空類。 例&#xff1a; #include <iostream> class Empty {// 空類&#xff0c;什么成員都沒有 }; 空類中真的什么都沒有嗎&#xff1f;并不是&#xff0c;任何類在什么都不寫時&a…

洛谷 P1035 [NOIP2002 普及組] 級數求和

本文由Jzwalliser原創&#xff0c;發布在CSDN平臺上&#xff0c;遵循CC 4.0 BY-SA協議。 因此&#xff0c;若需轉載/引用本文&#xff0c;請注明作者并附原文鏈接&#xff0c;且禁止刪除/修改本段文字。 違者必究&#xff0c;謝謝配合。 個人主頁&#xff1a;blog.csdn.net/jzw…

qt 讀取配置文件

在Qt中讀取配置文件&#xff0c;主要有以下幾種方法&#xff1a; 使用QFile和QTextStream類&#xff1a; 這種方法適用于讀取任意文本文件&#xff0c;包括配置文件。使用QFile的open()方法打開配置文件。使用QTextStream的readLine()方法逐行讀取配置數據。使用QXmlStreamRea…

谷粒商城學習-筆記大全

1&#xff0c;谷粒商城-01-項目介紹 2&#xff0c;谷粒商城筆記-02-項目整體效果展示 3&#xff0c;谷粒商城筆記-03-分布式基礎概念 4&#xff0c;谷粒商城筆記-04-項目微服務架構圖簡介 5&#xff0c;谷粒商城學習筆記-05-項目微服務劃分圖 6&#xff0c;谷粒商城學習-06-使用…

【LinuxC語言】手撕Http協議之accept_request函數實現(一)

文章目錄 前言accept_request函數作用accept_request實現解析方法根據不同方法進行不同操作http服務器響應格式unimplemented函數實現總結前言 在計算機網絡中,HTTP協議是一種常見的應用層協議,它定義了客戶端和服務器之間如何進行數據交換。在這篇文章中,我們將深入探討Li…