Dubbo+zookeeper面試題補充


  1. 什么是分布式?什么是集群?主要區別

分布式是將一個服務分個部分,然后通過遠程調用方式進行。遠程調用框架RPC框架,spring cloud,dubbo。集群是將同一個服務的多個副本部署在不同的集群上,通過負載均衡的方式提供復試。場景:廚師。

  1. 服務治理包括哪些內容?

服務治理需要服務治理框架,dubbo。即對服務進行管理,例如服務的接口名稱,權重等信息。

  1. 注冊中心的作用?你怎么理解注冊中心的?

如果沒有注冊中心,需要在本地維護一個provider的地址列表。注冊中心角色,它是集中式數據管理,消費者通過注冊中心來訪問數據。通過注冊中心,使得provider和consumer之間是透明。

  1. 什么是RPC?

遠程調用框架。

  1. 什么是冪等性?

是系統開發中非常重要的原則,一個動作多次執行的結果跟一次執行的結果是一致的。

  1. 以支付為例,說明非冪等引發的影響?如何解決?

為什么會返回支付失敗的提示?網絡原因或者其他原因。

1)在支付之前先檢查訂單有沒有支付

2)如果已經支付就返回支付狀態

3)如果沒有支付就進行支付

  1. 在基於dubbo的分布式環境中,一般將超時timeout設置在provider還是consumer?

應該設置在provider端。為什么?因為provider端更熟知自己方法執行需要的時間。

  1. 你是如何理解接口調用超時的?默認情況下,超時后將如何處理?

發出請求執行timeout規定的時間內沒有返回值(consumer沒有拿到返回值),但是該方法不一定死了。默認情況下,如果超時的話,將發起重試,默認發起2次重試(總共執行3次),可能會引起重復執行,很多情況,寫操作的重復執行是我們不想看到的。

  1. dubbo中負載均衡的策略有哪些?

Provider: 集群,集群只需要重啟幾個實例即可。

Zookeeper:集群

Consumer:集群

負載:Loadbalence輪詢,隨機

10. dubbo中容錯策略有哪些?

cluster屬性。

Failover:失敗轉移,不會重試,而是將請求轉給其他的provider

Failfaste:快速失敗,不會重試,而是直接返回失敗異常

11. 負載均衡的結果只跟策略有關,對嗎?

不對,還跟權重有關。

權重默認100.

12. 為什么不推薦使用kill -9 來關閉provider服務?

因為kill -9不能優雅關機。不僅 provder不能-9其他的所有服務都不要-9.例如kill -9 redis會導致無法生成rdb持久化文件。

13. 解釋一下優雅關機?優雅關機的超時時間跟timeout有關系嗎?

1)provider來說

2)consumer來說

沒有關系,dubbo.service.shutdown.wait=15000

14. 談一下接口的異步調用?如何設置?運行效果?

通過asyanc屬性設置異步.

如果設置異步,則不需要等待該方法返回值,程序即可往下進行。

Object o = Methoda();

Sysout(o);

Methodb();

1) 打印結果為null.

2) Timeout不會超時。

15. 如果一個方法執行完畢需要2秒,在timeout中設置的超時時間為1秒,請問如果是異步調用該方法,會不會重試?

結合14題,得出不再重試,因為不會超時。

16. 描述一下令牌的發出、獲取和驗證過程?

provider發出令牌。

consumer獲取令牌,consumer必須連接zk才能獲取令牌,換句話說,直連的話就無法獲取令牌。

17. 談談基於dubbo的系統中consumer集群的解決方案?

nginx反代多個tomcat即可。

18. 談談dubbo的多協議、多注冊中心、多版本支持?

多協議:同一個服務,可以通過不同的協議去發布,例如dubbo ,http,rmi....

多注冊中心:同一個服務,可以注冊到不同的注冊中心上。

registry="zk2181,zk2182,zk2183"

19. 談談zookeeper集群和redis集群在架構設計上的不同?

Zk集群中,每一個節點實例上的數據,都是同步的,即都是一致的。如果master宕機,根據選舉機制,選擇一個新的master,這個新的master數據跟之前的數據都是一楊的。

redis集群是基於槽的,總共16384個槽,這些槽只分給了master,各個master節點之間的數據不進行同步,即redis集群的數據是分布式存儲。

redis最少需要3個節點,但是他們之間還有一個不一樣的地方:

Redis集群不管有幾個幾點,只有該master節點沒有slave,那就集群就不可用了,因為它的槽不連續了。

20. 如何將dubbo和springboot集成?

1)導入依賴

2)配置全局文件

3)用阿里的service注解暴露服務。

4)controller中使用reference注解去引用該服務。

5)在入口類啟動dubbo服務注解

eg:

package com.pinyougou.manager.controller;

@Reference

private BrandService brandService; //調用  Dubbo暴露的接口   @Reference是alibaba的

會有包掃描     <dubbo:annotation package="com.pinyougou.manager.controller" /> 
 <dubbo:annotation package="com.pinyougou.sellergoods.service.impl" />  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM