8、SpringCloud高頻面試題-版本1

1、SpringCloud組件有哪些

SpringCloud 是一系列框架的有序集合。它利用 SpringBoot 的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用 SpringBoot 的開發風格做到一鍵啟動和部署。

早期我們一般認為的Spring Cloud五大組件是

  • Eureka : 注冊中心
  • Ribbon : 負載均衡
  • Feign : 遠程調用
  • Hystrix : 服務熔斷
  • Zuul/Gateway : 網關

隨著SpringCloudAlibba在國內興起 , 我們項目中使用了一些阿里巴巴的組件

  • 注冊中心/配置中心 Nacos

  • 負載均衡 Ribbon

  • 服務調用 Feign

  • 服務保護 sentinel

  • 服務網關 Gateway

2、Feign工作原理

Feign是SpringCloud技術棧中用于遠程調用的一個HTTP客戶端,主要作用是將遠程服務調用格式本地方法調用格式統一成一致的

Feign的工作步驟如下:

  1. 首先需要在SpringBoot的啟動類上添加@EnableFeignClients 注解開啟對Feign的支持

  2. 當程序啟動時,會掃描所有標有@FeignClient的注解的類,并且將這些信息注入Spring IOC 容器中

  3. 當定義的 Feign 接口中的方法被調用時,通過JDK的代理方式,來生成具體的 RequestTemplate

  4. RequestTemplate對象封裝了 HTTP 請求需要的全部信息,如請求參數名,請求方法等信息

  5. 然后RequestTemplate生成 Request,并將Request交給Client去處理,這里的 Client 可以是 JDK 原生的 URLConnection、Apache 的 HttpClient等

  6. 最后Client被封裝到LoadBalanceClient類,這個類結合Ribbon負載均衡發起服務之間的調用

3、什么是Hystrix

在微服務架構中,我們會拆分出很多的服務,服務之間存在復雜的調用關系,那么這些服務一旦會出現失敗的情況,就會導致服務雪崩

Hystrix就是來防止服務雪崩的工具,它具有服務降級,服務熔斷,服務隔離,監控等一些防止雪崩的技術。 它有四種防雪崩手段:

  • 服務隔離:隔離服務之間相互影響
  • 服務監控:在服務發生調用時,會將每秒請求數、成功請求數等運行指標記錄下來
  • 服務熔斷:接口調用失敗就會進入調用接口提前定義好的一個熔斷的方法,返回錯誤信息
  • 服務降級:接口調用失敗就調用本地的方法返回一個空

4、Hystrix斷路器狀態有哪些

斷路器狀態機包括三個狀態:

  • closed:關閉狀態,斷路器放行所有請求,并開始統計異常比例、慢請求比例。超過閾值則切換到open狀態
  • open:打開狀態,服務調用被熔斷,訪問被熔斷服務的請求會被拒絕,快速失敗,直接走降級邏輯。Open狀態5秒后(默認值)會進入half-open狀態
  • half-open:半開狀態,放行一次請求,根據執行結果來判斷接下來的操作
    • 請求成功:則切換到closed狀態
    • 請求失敗:則切換到open狀態
      在這里插入圖片描述

5、Ribbon的工作原理

我們項目中使用的是Feign來進行遠程微服務的調用,Feign的底層是集成了Ribbon的,大體使用流程如下:

  1. 當請求發出的時候,會被Ribbon的負載均衡攔截器所有攔截
  2. Ribbon會提取請求路徑中微服務的名稱,然后去服務治理中心中查找微服務的對應的服務地址
  3. Ribbon會使用配置的負載均衡策略從眾多地址中選擇一個,進行調用

6、Ribbon的負載均衡策略有哪些

Ribbon官方提供了7種負載均衡策略

  1. 輪詢策略:按照一定的順序依次調用服務實例
  2. 權重策略:根據每個服務提供者的響應時間分配一個權重,響應時間越長,權重越小,被選中的可能性也就越低。它的實現原理是,剛開始使用輪詢策略并開啟一個計時器,每一段時間收集一次所有服務提供者的平均響應時間,然后再給每個服務提供者附上一個權重,權重越高被選中的概率也越大。
  3. 隨機策略:從服務提供者的列表中隨機選擇一個服務實例
  4. 最小連接數策略:遍歷服務提供者列表,選取連接數最小的一個服務實例。如果有相同的最小連接數,那么會調用輪詢策略進行選取。
  5. 重試策略:按照輪詢策略來獲取服務,如果獲取的服務實例為 null 或已經失效,則在指定的時間之內不斷地進行重試來獲取服務,如果超過指定時間依然沒獲取到服務實例則返回 null。
  6. 可用性敏感策略:先過濾掉非健康的服務實例,然后再選擇連接數較小的服務實例
  7. 區域敏感策略:根據服務所在區域(zone)的性能和服務的可用性來選擇服務實例,在沒有區域的環境下,該策略和輪詢策略類似。

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

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

相關文章

java對象不會被改變_Java 并發編程(二)對象的不變性和安全的公布對象

二、安全公布到眼下為止,我們重點討論的是怎樣確保對象不被公布,比如讓對象封閉在線程或還有一個對象的內部。當然,在某些情況下我們希望在多個線程間共享對象,此時必須確保安全地進行共享。然而,假設僅僅是像以下程序…

nginx 上php不可寫解決方法

在php.ini中設置的session.save_path會被php-fpm.conf中覆蓋 打開php-fpm.conf文件找到php_value[session.save_apth] 這里的/var/lib/php/session 為實際的session保存目錄,設置為777,必須讓其他用戶有rw權限,因為php在Linux里面以其他用戶身份運行(匿名…

JavaOne 2012:Java策略主題演講和IBM主題演講

與 JavaOne 2010 相似,我對JavaOne 2012的開始也很艱難。由于“計算機和打印機技術上的困難”,辦理登機手續的人花了70分鐘為我提供JavaOne徽章。 盡管我不是世界上最有耐心的人,但比等待更令人失望的是,我錯過了參加“社區會議&a…

java citymap_Java實現Map集合二級聯動

Map集合可以保存鍵值映射關系,這非常適合本實例所需要的數據結構,所有省份信息可以保存為Map集合的鍵,而每個鍵可以保存對應的城市信息,本實例就是利用Map集合實現了省市級聯選擇框,當選擇省份信息時,將改變…

【NIO】之IO和NIO的區別

在Java1.4之前的版本,Java對I/O的支持并不完善,開發人員在開發高性能I/O程序的時候,會面臨以下幾個問題: 1、沒有數據緩存區,I/O性能存在問題 2、沒有C/C通道的概念,輸入和輸出流是相互獨立的不能復用 3、同…

Mono環境下訪問SSL

由于MONO沒有CA證書,所以訪問SSL鏈接(HTTPS)就會出錯,這時候只要強制訪問就可以。 using System.Net.Security;using System.Security.Authentication;using System.Security.Cryptography.X509Certificates; private static bool…

JavaOne 2012:使用HTML5和Java構建移動應用程序

我返回了Parc 55 (任務會議室),觀看Max Katz的( Exadel開發人員關系)“用HTML5和Java構建移動應用程序” Bird-of-Feather(BoF)演示。 具體來說,Katz在Tiggzi (基于云的應…

HDU 2602.Bone Collector-動態規劃0-1背包

Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 85530 Accepted Submission(s): 35381 Problem DescriptionMany years ago , in Teddy’s hometown there was a man who was called “Bone Col…

java線程實現排序_【多線程實現快速排序】

快速排序算法實現文件QuickSort.javapackage quick.sort;import java.util.concurrent.Callable;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class QuickSort implements Callable{private int[] array;private final in…

使用Gitolite搭建Gitserver

Gitolite是一款Perl語言開發的Git服務管理工具。通過公鑰對用戶進行認證。并可以通過配置文件對些操作進行基于分支和路徑的精細控制。Gitolite採用的是SSH協議而且使用SSH公鑰認證。因此不管是管理員還是普通用戶。都須要對SSH有所了解。Gitolite的官網是:https://…

java任務分支和合并_合并/分支戰略

我會給出與Adarsh Shah相同的建議,因為在大多數情況下,2個分支(MAIN,RELEASE)就足夠了,并且使用feature branches用于你不想立即提交到MAIN的東西,因為它需要一段時間才能完全準備好測試 . 通過RELEASE,我指…

Spring安全:防止暴力攻擊

Spring Security可以為您做很多事情。 帳戶被封鎖,密碼鹽。 但是蠻力阻斷劑呢? 那是你必須自己做的。 幸運的是,Spring是一個非常靈活的框架,因此對其進行配置并不是什么大問題。 讓我向您展示一些如何針對Grails應用程序執行…

NopCommerce計劃任務

NopCommerce計劃任務轉載于:https://www.cnblogs.com/chenjz/p/6293210.html

簡單談談js中的MVC

MVC是什么? MVC是一種架構模式,它將應用抽象為3個部分:模型(數據)、視圖、控制器(分發器)。 本文將用一個經典的例子todoList來展開(代碼在最后)。 一個事件發生的過程&a…

BTrace:Java開發人員工具箱中的隱藏寶石

這篇文章是關于BTrace的 ,我正在考慮將其作為Java開發人員的隱藏寶藏。 BTrace是用于Java平臺的安全,動態跟蹤工具。 BTrace可用于動態跟蹤正在運行的Java程序(類似于DTrace,適用于OpenSolaris應用程序和OS)。 不久&am…

python 圖片轉視頻ffmpeg_python圖片轉視頻(opencv),ffmpeg壓縮視頻

要注意:1. 圖片傳視頻要自己設置幀率和分辨率2.讀取圖片后分辨率要resize為和視頻分辨率一樣才可以3.寫完.avi視頻后視頻比較大,用ffmpeg將avi視頻壓縮為mp4import cv2from cv2 import VideoWriter, VideoWriter_fourcc, imread, resizeimport osfrom su…

門面模式

門面模式的定義 門面模式(Facade Pattern)也叫做外觀模式,是一種比較常用的封裝模式,其定義如 下: Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface tha…

Mysql數據庫申請

前段時間大部門下新成立了一個推廣百度OCR、文字識別、圖像識別等科技能力在金融領域應用的子部門。因為部門剛成立,基礎設施和人力都是欠缺的。當時分到我們部門的任務是抽調一個人做新部門主站前端開發工作。本來說的是只負責頁面的開發工作。當我參加過需求品審會…

Spring–添加SpringMVC –第2部分

在上一部分中,我們為經理和員工實現了控制器。 既然我們知道了解決方法,我們將做很少(但僅做很少)更復雜的事情–任務和時間表的控制器。 因此,讓我們從org.timesheet.web開始。 TaskController 。 首先創建一個類&…

php 正則分隔_探討PHP函數split()如何使用正則表達式切割字符串

對于初學者來說,掌握PHP中常用函數的用法,是其繼續學習的基礎。今天我們就為大家詳細介紹有關PHP函數split()的一些使用方法,希望大家能通過這篇文章介紹的內容增加自己的知識庫。說明array split ( string $pattern, string $string [, int …