Java崗面試問到SpringCloud還無從開口?這些常見問題你會嗎?

問題一:什麼是Spring Cloud?java

Spring cloud流應用程序啓動器是基於Spring Boot的Spring集成應用程序,提供與外部系統的集成。Spring cloud Task,一個生命週期短暫的微服務框架,用於快速構建執行有限數據處理的應用程序。編程

問題二:使用Spring Cloud有什麼優點?api

使用Spring Boot開發分佈式微服務時,咱們面臨如下問題
一、與分佈式系統相關的複雜性-這種開銷包括網絡問題,延遲開銷,帶寬問題,安全問題。
二、服務發現-服務發現工具管理羣集中的流程和服務如何查找和互相交談。它涉及一個服務目錄,在該目錄中註冊服務,而後可以查找並鏈接到該目錄中的服務。
三、冗餘-分佈式系統中的冗餘問題。
四、負載平衡 --負載平衡改善跨多個計算資源的工做負荷,諸如計算機,計算機集羣,網絡鏈路,中央處理單元,或磁盤驅動器的分佈。
五、性能-問題 因爲各類運營開銷致使的性能問題。
六、部署複雜性-Devops技能的要求。安全

問題三:服務註冊和發現是什麼意思?Spring Cloud如何實現?服務器

當咱們開始一個項目時,咱們一般在屬性文件中進行全部的配置。隨着愈來愈多的服務開發和部署,添加和修改這些屬性變得更加複雜。有些服務可能會降低,而某些位置可能會發生變化。手動更改屬性可能會產生問題。 Eureka服務註冊和發現能夠在這種狀況下提供幫助。因爲全部服務都在Eureka服務器上註冊並經過調用Eureka服務器完成查找,所以無需處理服務地點的任何更改和處理。網絡

問題四:負載平衡的意義什麼?架構

在計算中,負載平衡能夠改善跨計算機,計算機集羣,網絡連接,中央處理單元或磁盤驅動器等多種計算資源的工做負載分佈。負載平衡旨在優化資源使用,最大化吞吐量,最小化響應時間並避免任何單一資源的過載。使用多個組件進行負載平衡而不是單個組件可能會經過冗餘來提升可靠性和可用性。負載平衡一般涉及專用軟件或硬件,例如多層交換機或域名系統服務器進程。框架

**問題五:什麼是Hystrix?它如何實現容錯? **分佈式

Hystrix是一個延遲和容錯庫,旨在隔離遠程系統,服務和第三方庫的訪問點,當出現故障是不可避免的故障時,中止級聯故障並在複雜的分佈式系統中實現彈性。
一般對於使用微服務架構開發的系統,涉及到許多微服務。這些微服務彼此協做。
思考如下微服務微服務



假設若是上圖中的微服務9失敗了,那麼使用傳統方法咱們將傳播一個異常。但這仍然會致使整個系統崩潰。
隨着微服務數量的增長,這個問題變得更加複雜。微服務的數量能夠高達1000.這是hystrix出現的地方 咱們將使用Hystrix在這種狀況下的Fallback方法功能。咱們有兩個服務employee-consumer使用由employee-consumer公開的服務。
**簡化圖以下所示 **



如今假設因爲某種緣由,employee-producer公開的服務會拋出異常。咱們在這種狀況下使用Hystrix定義了一個回退方法。這種後備方法應該具備與公開服務相同的返回類型。若是暴露服務中出現異常,則回退方法將返回一些值。

問題六:什麼是Hystrix斷路器?咱們須要它嗎?

因爲某些緣由,employee-consumer公開服務會引起異常。在這種狀況下使用Hystrix咱們定義了一個回退方法。若是在公開服務中發生異常,則回退方法返回一些默認值。



若是firstPage method() 中的異常繼續發生,則Hystrix電路將中斷,而且員工使用者將一塊兒跳過firtsPage方法,並直接調用回退方法。 斷路器的目的是給第一頁方法或第一頁方法可能調用的其餘方法留出時間,並致使異常恢復。可能發生的狀況是,在負載較小的狀況下,致使異常的問題有更好的恢復機會 。


問題七:什麼是Netflix Feign?它的優勢是什麼?

Feign是受到Retrofit,JAXRS-2.0和WebSocket啓發的java客戶端聯編程序。Feign的第一個目標是將約束分母的複雜性統一到http apis,而不考慮其穩定性。在employee-consumer的例子中,咱們使用了employee-producer使用REST模板公開的REST服務。
可是咱們必須編寫大量代碼才能執行如下步驟
一、使用功能區進行負載平衡。
二、獲取服務實例,而後獲取基本URL。
三、利用REST模板來使用服務。

前面的代碼以下

@Controller
public class ConsumerControllerClient {

@Autowired
private LoadBalancerClient loadBalancer;

public void getEmployee() throws RestClientException, IOException {

    ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");

    System.out.println(serviceInstance.getUri());

    String baseUrl=serviceInstance.getUri().toString();

    baseUrl=baseUrl+"/employee";

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<String> response=null;
    try{
    response=restTemplate.exchange(baseUrl,
            HttpMethod.GET, getHeaders(),String.class);
    }catch (Exception ex)
    {
        System.out.println(ex);
    }
    System.out.println(response.getBody());
}
複製代碼

以前的代碼,有像NullPointer這樣的例外的機會,並非最優的。咱們將看到如何使用Netflix Feign使呼叫變得更加輕鬆和清潔。若是Netflix Ribbon依賴關係也在類路徑中,那麼Feign默認也會負責負載平衡。

問題八:什麼是Spring Cloud Bus?咱們須要它嗎?

考慮如下狀況:咱們有多個應用程序使用Spring Cloud Config讀取屬性,而Spring Cloud Config從GIT讀取這些屬性。
下面的例子中多個員工生產者模塊從Employee Config Module獲取Eureka註冊的財產。



若是假設GIT中的Eureka註冊屬性更改成指向另外一臺Eureka服務器,會發生什麼狀況。在這種狀況下,咱們將不得不從新啓動服務以獲取更新的屬性。
還有另外一種使用執行器端點/刷新的方式。可是咱們將不得不爲每一個模塊單獨調用這個url。例如,若是Employee Producer1部署在端口8080上,則調用 http:// localhost:8080 / refresh。一樣對於Employee Producer2 http:// localhost:8081 / refresh等等。這又很麻煩。這就是Spring Cloud Bus發揮做用的地方。


Spring Cloud Bus提供了跨多個實例刷新配置的功能。所以,在上面的示例中,若是咱們刷新Employee Producer1,則會自動刷新全部其餘必需的模塊。若是咱們有多個微服務啓動並運行,這特別有用。這是經過將全部微服務鏈接到單個消息代理來實現的。不管什麼時候刷新實例,此事件都會訂閱到偵聽此代理的全部微服務,而且它們也會刷新。能夠經過使用端點/總線/刷新來實現對任何單個實例的刷新。
相關文章
相關標籤/搜索