Spring Cloud 面試突擊2

Spring Cloud 面試突擊2

高并發:是一種系統運行過程中遇到的短時間大量的請求操作

響應時間:

吞吐量:

QPS:數據庫為維度

TPS

并發用戶數

并發的維度:很多的

并發是不是達到的當前系統的瓶頸

緩存 (第一手段) 降級 限流 限制流量

5.在微服務中有幾種限流方式

sentinel hystrix 線程池 300線程

資源:被流量控制的對象

策略:限流算法以及可調節參數

基于請求限流:

基于資源限流:

限制總并發數 限制瞬間的并發數

令牌桶

令牌桶算法是網絡流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一種算法。典型情況下,令牌桶算法用來控制發送到網絡上的數據的數目,并允許突發數據的發送。

令牌桶是一個存放固定容量令牌(token)的桶,按照固定速率往桶里添加令牌; 令牌桶算法實際上由三部分組成:兩個流和一個桶,分別是令牌流、數據流和令牌桶

令牌流與令牌桶

系統會以一定的速度生成令牌,并將其放置到令牌桶中,可以將令牌桶想象成一個緩沖區(可以用隊列這種數據結構來實現),當緩沖區填滿的時候,新生成的令牌會被扔掉。這里有兩個變量很重要:

第一個是生成令牌的速度,一般稱為 rate 。比如,我們設定 rate = 2 ,即每秒鐘生成 2 個令牌,也就是每 1/2 秒生成一個令牌;

第二個是令牌桶的大小,一般稱為 burst 。比如,我們設定 burst = 10 ,即令牌桶最大只能容納 10 個令牌。

數據流

數據流是真正的進入系統的流量,對于http接口來說,如果平均每秒鐘會調用2次,則認為速率為 2次/s。

image.png

特點:1.令牌是可以累計的,意味著我們能夠去處理小于令牌桶+令牌生成速率的瞬時流量

2.允許突發的流量

漏桶

漏桶算法思路是,不斷的往桶里面注水,無論注水的速度是大還是小,水都是按固定的速率往外漏水;如果桶滿了,水會溢出;

桶本身具有一個恒定的速率往下漏水,而上方時快時慢的會有水進入桶內。當桶還未滿時,上方的水可以加入。一旦水滿,上方的水就無法加入。桶滿正是算法中的一個關鍵的觸發條件(即流量異常判斷成立的條件)。而此條件下如何處理上方流下來的水,有兩種方式

在桶滿水之后,常見的兩種處理方式為:

1)暫時攔截住上方水的向下流動,等待桶中的一部分水漏走后,再放行上方水。

2)溢出的上方水直接拋棄。

特點

漏水的速率是固定的

即使存在注水burst(突然注水量變大)的情況,漏水的速率也是固定的

image.png

計數器

這個最簡單,比如用Redis做計數器

計數器算法是使用計數器在周期內累加訪問次數,當達到設定的限流值時,觸發限流策略。下一個周期開始時,進行清零,重新計數。此算法在單機還是分布式環境下實現都非常簡單,使用redis的incr原子自增性和線程安全即可輕松實現。

image.png

滑動窗口

滑動窗口協議是傳輸層進行流控的一種措施,接收方通過通告發送方自己的窗口大小,從而控制發送方的發送速度,從而達到防止發送方發送速度過快而導致自己被淹沒的目的。

簡單解釋下,發送和接受方都會維護一個數據幀的序列,這個序列被稱作窗口。發送方的窗口大小由接受方確定,目的在于控制發送速度,以免接受方的緩存不夠大,而導致溢出,同時控制流量也可以避免網絡擁塞。下面圖中的4,5,6號數據幀已經被發送出去,但是未收到關聯的ACK,7,8,9幀則是等待發送。可以看出發送端的窗口大小為6,這是由接受端告知的。此時如果發送端收到4號ACK,則窗口的左邊緣向右收縮,窗口的右邊緣則向右擴展,此時窗口就向前“滑動了”,即數據幀10也可以被發送。

參考如下網址提供的動態效果

https://media.pearsoncmg.com/aw/ecs_kurose_compnetwork_7/cw/content/interactiveanimations/selective-repeat-protocol/index.html

6.熔斷與限流的區別

在分布式系統中,限流和熔斷是處理并發的兩大利器。關于限流和熔斷,需要記住一句話,客戶端熔斷,服務端限流。

發現為什么是限流和熔斷?而不是限流和降級?所以下面我特地講一講他們的區別。

相似處:
1.目的一致

都是為了系統的穩定性,防止因為個別微服務的不可用而拖死整個系統服務;

2.表現類似

在表現上都是讓用戶感知,該服務暫時不可用請稍后再試;

3.粒度一致

粒度上,都是服務級別的粒度,某些情況下,也有更細的粒度,如數據的持久層,只允許查詢,不允許增刪改。

主要區別:
1.觸發條件不同

服務熔斷一般是某個服務掛掉了引起的,一般是下游服務,而服務降級一般是從整體的負荷考慮,主動降級;

2.管理目標的層次不同

熔斷其實是一個框架級的處理,每個微服務都需要,沒有層次之分,而降級一般需要對業務有層級之分,一般是從最外圍服務開始。

7.斷路器的隔離方式(線程池隔離以及信號量隔離)有什么區別

在斷路器中,介紹兩種處理高并發的解決方案。

首先需要理解高并發的情況下系統會出現什么樣的問題。

當部署完一個服務后,這個服務會向外界開放多個接口, 比如 一個爛大街的商城系統可能有 訂單查詢接口, 個人中心接口 , 付款接口 ,商品查詢接口。 當服務部署好之后,沒有其他配置時, tomcat默認開啟一個線程池, 這個線程池中有200個線程供使用。 這時候, 這四個接口都有對這個線程池的使用權,也就是說這四個接口共享一個線程池。 當訪問量小的時候系統沒有問題, 但是遇到突發情況,比如一類爆款商品降價, 導致了商品查詢接口訪問量激增。 商品查詢接口占用了線程池中大量的線程, 導致其他三個接口搶不到線程從而沒有線程可用, 這時候, 由于四個接口共享一個線程池, 當一個接口訪問量激增而占用大量資源時, 導致其他三個接口搶不到資源進而導致自身功能不可用。

線程池隔離

這時候,提出一種解決方案–線程池隔離。

線程池隔離的思想是: 把tomcat中先一個線程池分成兩個線程池. 比如tomcat線程池中初始有200個線程, 分成兩個線程池A , B后, A線程池有50個線程可以用, B線程池有150個線程可以用. 將訪問量較大的接口單獨配置給一個線程池, 其他接口使用另一個線程池 , 使其訪問量激增時不要影響其他接口的調用.

然后, 將訪問量暴增的接口訪問交給A線程池, 其他接口的訪問交給B線程池. A , B兩個線程池是相互隔離的, 互不影響. 這時候, 如果商品查詢接口訪問量激增 , 被擠爆的線程池也只是A線程池, A,B線程池互不影響, 所以其他接口如: 個人中心接口, 付款接口, 訂單查詢接口依然可用.

線程池隔離主要針對C端用戶對服務的訪問. 線程池隔離起到分流的作用.

信號量隔離

還有一種是新思路是采用信號量隔離方式.

可以把信號量理解成一個計數器 , 對這個計數器規定一個計數上限, 代表一個接口被訪問的最大量.

假定設置 付款接口的信號量最大值為10,(這個接口最多占用線程池中10個線程) 初始值為0. 每調用一次接口信號量加一 , 接口處理完后信號量減一. 當信號量值達到最大時 , (10時) , 對后續的調用請求拒接處理.

信號量隔離主要是針對各個服務內部的調用處理, 起到限流的作用.

8.API網關的工作流程

客戶端向Spring Cloud Gateway發出請求。如果網關處理程序映射(Gateway Handler Mapping)確定請求與路由匹配,則將其發送到網關Web處理程序(Gateway Web Handler)。該處理程序通過特定于請求的過濾器鏈來運行請求。過濾器器由虛線分隔的原因是,過濾器可以在發送代理請求之前和之后運行邏輯。所有“前置”過濾器邏輯均被執行。然后發出代理請求。發出代理請求后,將運行“后置”過濾器邏輯。圖中虛線左邊的對應于前置過濾器,虛線右邊的對應于后置過濾器。image.png

  • 前置過濾器可以做參數校驗、權限校驗、流量監控、日志輸出、協議轉換等;
  • 后置過濾器可以做響應內容、響應頭的修改、日志的輸出、流量監控等。

SpringCloud Gateway的核心邏輯其實就是路由轉發和執行過濾器鏈

過濾器執行順序

請求進入網關會碰到三類過濾器:當前路由的過濾器、DefaultFilter、GlobalFilter

請求路由后,會將當前路由過濾器和DefaultFilter、GlobalFilter,合并到一個過濾器鏈(集合)中,排序后依次執行每個過濾器:

image.png

排序的規則是什么呢?

每一個過濾器都必須指定一個int類型的order值,order值越小,優先級越高,執行順序越靠前。

GlobalFilter通過實現Ordered接口,或者添加@Order注解來指定order值,由我們自己指定

路由過濾器和defaultFilter的order由Spring指定,默認是按照聲明順序從1遞增。

當過濾器的order值一樣時,會按照 defaultFilter > 路由過濾器 > GlobalFilter的順序執行。

路由規則:

1.localhost:8080/order/all oder/**

2.http://localhost:80/list?token=abc123

image.png

Fegin的核心原理是什么?

image.png

@FeginClient通過動態代理調用RequsetMapping注解上的URL

鏈路追蹤

skywalking CAT pingpoint zipkin

Client Sent簡稱cs,客戶端發起調用請求到服務端。
Server Received簡稱sr,指服務端接收到了客戶端的調用請求。
Server Sent簡稱ss,指服務端完成了處理,準備將信息返給客戶端。
Client Received簡稱cr,指客戶端接收到了服務端的返回信息。

Ribbon

負載均衡策略:

1.輪詢

2.隨機

3.最小并發

4.加權輪詢

5.先過濾,再線性輪詢

6.最優最佳

7.失敗重試

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

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

相關文章

計算機網絡—IP

這里寫目錄標題 IP的基本認識網絡層與數據鏈路層有什么關系IP地址基礎知識IP 地址的分類什么是A、B、C類地址廣播地址用來做什么什么是D、E類廣播多播地址用于什么IP分類的優點IP分類的缺點 無分類地址CIDR如何劃分網絡號和主機號怎么進性子網劃分 公有 IP 地址與私有 IP 地址公…

【Spring源碼】Java里面的jdk代理與Cglib動態代理

Springboot默認使用的是Cglib動態代理 案例一:TransactionAutoConfiguration配置類 org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration Configuration(proxyBeanMethods false)ConditionalOnBean(TransactionManager.class)Cond…

指針---進階篇(二)

指針---進階篇(二) 前言一、函數指針1.拋磚引玉2.如何判斷函數指針?(方法總結) 二、函數指針數組1.什么是函數指針數組?2.講解函數指針數組3.模擬計算器:講解函數指針數組 三、指向函數指針數組…

Maven基礎之倉庫、命令、插件機制

文章目錄 Maven 倉庫中央倉庫和本地倉庫中央倉庫本地倉庫 Maven 命令generate 命令compile 命令clean 命令test 命令package 命令install 命令 Maven 插件機制官方插件:Compile 插件Tomcat 7 插件 Maven 倉庫 中央倉庫和本地倉庫 [?] 簡單一點說 中央倉庫是一個網…

Redis復制

在Redis中,用戶可以通過執行SLAVEOF命令或者設置slaveof選項,讓一個服務器去復制(replicate) 另一個服務器,我們稱呼被復制的服務器為主服務器(master),而對主服務器進行復制的服務器則被稱為從服務器(slave),如下圖所…

Vue修飾符

事件修飾符 在Vue 2.0中,事件修飾符允許我們在處理事件時對其進行修改或增強。以下是一些常用的事件修飾符: .stop:阻止事件冒泡。使用此修飾符后,父元素的相同事件不會再觸發。.prevent:阻止事件的默認行為。比如&…

mybatis 中的<![CDATA[ ]]>用法及說明

<![CDATA[ ]]>作用 <![CDATA[ ]]> 在mybatis、ibatis等書寫SQL的xml中比較常見&#xff0c;是一種XML語法&#xff0c;他的作用是 可以忽略xml的轉義&#xff08;在該標簽中的語句和字符原本是什么樣的&#xff0c;在拼接成SQL后還是什么樣的&#xff09; 使用&a…

代碼生成模型任務設計

背景&#xff1a; 模型應該具備&#xff0c;理解代碼的能力、知道代碼規則的能力、知道關鍵詞和變量的能力、知道代碼邏輯的能力、文本到代碼翻譯能力、代碼關聯能力、代碼續寫能力。 代碼理解能力&#xff1a;pretrain讓模型讀足夠多代碼、記住代碼一些規則、代碼問答、基于…

PHP codeigniter4 搭配Nginx

> 主要是為了用Nginx運行PHP環境 1. Nginx 官方文檔的配置 default.conf? This configuration enables URLs without “index.php” in them and using CodeIgniter’s “404 - File Not Found” for URLs ending with “.php”. server {listen 80;listen [::]:80;se…

springboot 基礎

鞏固基礎&#xff0c;砥礪前行 。 只有不斷重復&#xff0c;才能做到超越自己。 能堅持把簡單的事情做到極致&#xff0c;也是不容易的。 SpringBoot JavaEE 簡介 JavaEE的局限性&#xff1a; 1、過于復雜&#xff0c;JavaEE正對的是復雜的分布式企業應用&#xff0c;然而現實…

MySQL表的基礎的增刪改查

增(insert into) 插入所有列的數據 不寫具體列名要確保字段都對應正確 -- 假設你有一個名為 "employees" 的表&#xff0c;有多個列 INSERT INTO employees VALUES (101, Alice, Manager, 50000);插入指定列的數據 -- 假設你有一個名為 "students" 的表&…

爬蟲如何應對網站的反爬機制?如何查找user-agent對應的值

import requestsurl https://movie.douban.com/top250 response requests.get(url) # 查看結果 print(response)在requests使用一文中我們有講到&#xff0c;當狀態碼不是200時表示爬蟲不可用&#xff0c;也就是說我們獲取不到網頁源代碼。但是我們還是可以掙扎一下&#xff…

一文秒懂HTTP協議到底是什么?原理?

目錄 1.什么是http協議&#xff1f; 2.http協議的版本&#xff1f; 3.http文本框架 4.http請求報文 5.http報文格式 6.http響應報文 7.HTTP的狀態碼 8.HTTP首部介紹 9.什么是URL和URI&#xff1f; 10.CGI是什么&#xff1f; 1.什么是http協議&#xff1f; http&#…

測試架構師如何落地性能測試方案(一)

背景描述&#xff1a; 最近剛接手一個新項目&#xff0c;在最開始的時候要求對這個項目做性能測試&#xff0c;產品經理也給不出性能需求&#xff0c;只因為這個項目是電商項目&#xff0c;可能會有高并發&#xff0c;秒殺的場景&#xff0c;所以產品經理要求我們對這個項目必…

vue3父子組件傳值;vue3子組件傳值給父組件;vue3子組件監聽父組件接口傳值;父子組件事件調用

代碼在文末&#xff0c;均可直接復制使用 本文主要描述&#xff0c;父子組件傳值、調用等問題 文章目錄 問題1&#xff1a;子組件接收不到父組件傳值問題2&#xff1a;子組件接受的值&#xff0c;修改后&#xff0c;發現父組件值也改變了問題3&#xff1a;子組件接受值&#xf…

07-HDFS入門及shell命令

1 文件系統 是一種存儲和組織數據的方法&#xff0c;它使得文件訪問和查詢變得容易使得文件和樹形目錄的抽象邏輯概念代替了磁盤等物理設備使用數據塊的概念&#xff0c;用戶使用文件系統來保存數據不必關心數據底層存在硬盤哪里&#xff0c;只需記住這個文件的所屬目錄和文件…

STM32基于CubeIDE和HAL庫 基礎入門學習筆記:物聯網項目開發流程和思路

文章目錄&#xff1a; 第一部分&#xff1a;項目開始前的計劃與準備 1.項目策劃和開發規范 1.1 項目要求文檔 1.2 技術實現文檔 1.3 開發規范 2.創建項目工程與日志 第二部分&#xff1a;調通硬件電路與驅動程序 第三部分&#xff1a;編寫最基礎的應用程序 第四部分&…

opencv帶GStreamer之Windows編譯

目錄 1、下載GStreamer和安裝2. GSTReamer CMake配置3. 驗證是否配置成功 1、下載GStreamer和安裝 下載地址如下&#xff1a; gstreamer-1.0-msvc-x86_64-1.18.2.msi gstreamer-1.0-devel-msvc-x86_64-1.18.2.msi 安裝目錄無要求&#xff0c;主要是安裝完設置環境變量 xxx\1…

【css】漸變

漸變是設置一種顏色或者多種顏色之間的過度變化。 兩種漸變類型&#xff1a; 線性漸變&#xff08;向下/向上/向左/向右/對角線&#xff09; 徑向漸變&#xff08;由其中心定義&#xff09; 1、線性漸變 語法&#xff1a;background-image: linear-gradient(direction, co…

一圖搞懂二層交換機、三層交換機和路由器的區別

二層交換機、三層交換機、路由器的區別 二層交換機、三層交換機、路由器對比二層交換機三層交換機路由器工作在第幾層數據鏈路層&#xff08;第二層&#xff09;網絡層&#xff08;第三層&#xff09;網絡層&#xff08;第三層&#xff09;功能學習和轉發幀根據IP地址轉發數據…