1. 程式人生 > >java面試題整理-微服務、SpringBoot、SpringCloud

java面試題整理-微服務、SpringBoot、SpringCloud

什麼是微服務?
微服務架構是一種架構模式或者說是一種架構風格,它提倡將單一應用程式劃分為一組小的服務,每個服務執行在其獨立的自己的程序中,服務之間相互協調、互相配合,為使用者提供最終價值。服務之間採用輕量級的通訊機制互相溝通(通常是基於HTTP的RESTful API),每個服務都圍繞著具體的業務進行構建,並且能夠被獨立的構建在生產環境、類生產環境等。另外,應避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建,可以有一個非常輕量級的集中式管理來協調這些服務,可以使用不同的語言來編寫服務,也可以使用不同的資料儲存。

什麼是服務熔斷?什麼是服務降級?


熔斷機制是應對雪崩效應的一種微服務鏈路保護機制。當某個微服務不可用或者響應時間太長時,會進行服務降級,進而熔斷該節點微服務的呼叫,快速返回“錯誤”的響應資訊。當檢測到該節點微服務呼叫響應正常後恢復呼叫鏈路。在SpringCloud框架裡熔斷機制通過Hystrix實現,Hystrix會監控微服務間呼叫的狀況,當失敗的呼叫到一定閾值,預設是5秒內呼叫20次,如果失敗,就會啟動熔斷機制。

服務降級,一般是從整體負荷考慮。就是當某個服務熔斷之後,伺服器將不再被呼叫,此時客戶端可以自己準備一個本地的fallback回撥,返回一個預設值。這樣做,雖然水平下降,但好歹可用,比直接掛掉強。

Hystrix相關注解


@EnableHystrix:開啟熔斷
@HystrixCommand(fallbackMethod=”XXX”):宣告一個失敗回滾處理函式XXX,當被註解的方法執行超時(預設是1000毫秒),就會執行fallback函式,返回錯誤提示。

微服務技術棧有哪些?

微服務條目 落地的技術 備註
服務開發 SpringBoot、Spring、SpringMVC
服務配置管理 Netfilx公司的Archaius、阿里的Diamond等
服務註冊與發現 Eureka、Consul、Zookeeper
服務呼叫 RPC、Rest、gRPC
服務熔斷器 Hystrix、Envoy等
負載均衡 Nginx、Ribbon
服務介面呼叫(客戶端呼叫服務的簡化工具) Feign
訊息佇列 Kafka、RabbitMQ、ActiveMQ等
服務配置中心配置管理 SpringCloudConfig、Chef等
服務路由(API閘道器) Zuul
服務監控 Zabbix、Naggios、Metrics、Spectator等
全鏈路追蹤 Zipkin、Brave、Dapper等
服務部署 Docker、OpenStack、Kubernetes等
資料流操作開發包 SpringCloud Stream
事件訊息匯流排 Spring Cloud Bus

Eureka和zookeeper都可以提供服務註冊與發現的功能,請說說兩個的區別?
Zookeeper保證了CP(C:一致性,P:分割槽容錯性),Eureka保證了AP(A:高可用)
1.當向註冊中心查詢服務列表時,我們可以容忍註冊中心返回的是幾分鐘以前的資訊,但不能容忍直接down掉不可用。也就是說,服務註冊功能對高可用性要求比較高,但zk會出現這樣一種情況,當master節點因為網路故障與其他節點失去聯絡時,剩餘節點會重新選leader。問題在於,選取leader時間過長,30 ~ 120s,且選取期間zk叢集都不可用,這樣就會導致選取期間註冊服務癱瘓。在雲部署的環境下,因網路問題使得zk叢集失去master節點是較大概率會發生的事,雖然服務能夠恢復,但是漫長的選取時間導致的註冊長期不可用是不能容忍的。

2.Eureka保證了可用性,Eureka各個節點是平等的,幾個節點掛掉不會影響正常節點的工作,剩餘的節點仍然可以提供註冊和查詢服務。而Eureka的客戶端向某個Eureka註冊或發現時發生連線失敗,則會自動切換到其他節點,只要有一臺Eureka還在,就能保證註冊服務可用,只是查到的資訊可能不是最新的。除此之外,Eureka還有自我保護機制,如果在15分鐘內超過85%的節點沒有正常的心跳,那麼Eureka就認為客戶端與註冊中心發生了網路故障,此時會出現以下幾種情況:
①、Eureka不在從註冊列表中移除因為長時間沒有收到心跳而應該過期的服務。
②、Eureka仍然能夠接受新服務的註冊和查詢請求,但是不會被同步到其他節點上(即保證當前節點仍然可用)
③、當網路穩定時,當前例項新的註冊資訊會被同步到其他節點。
因此,Eureka可以很好的應對因網路故障導致部分節點失去聯絡的情況,而不會像Zookeeper那樣使整個微服務癱瘓。