- 什么是分布式?什么是集群?主要區別
分布式是將一個服務分個部分,然后通過遠程調用方式進行。遠程調用框架RPC框架,spring cloud,dubbo。集群是將同一個服務的多個副本部署在不同的集群上,通過負載均衡的方式提供復試。場景:廚師。
- 服務治理包括哪些內容?
服務治理需要服務治理框架,dubbo。即對服務進行管理,例如服務的接口名稱,權重等信息。
- 注冊中心的作用?你怎么理解注冊中心的?
如果沒有注冊中心,需要在本地維護一個provider的地址列表。注冊中心角色,它是集中式數據管理,消費者通過注冊中心來訪問數據。通過注冊中心,使得provider和consumer之間是透明。
- 什么是RPC?
遠程調用框架。
- 什么是冪等性?
是系統開發中非常重要的原則,一個動作多次執行的結果跟一次執行的結果是一致的。
- 以支付為例,說明非冪等引發的影響?如何解決?
為什么會返回支付失敗的提示?網絡原因或者其他原因。
1)在支付之前先檢查訂單有沒有支付
2)如果已經支付就返回支付狀態
3)如果沒有支付就進行支付
- 在基於dubbo的分布式環境中,一般將超時timeout設置在provider還是consumer?
應該設置在provider端。為什么?因為provider端更熟知自己方法執行需要的時間。
- 你是如何理解接口調用超時的?默認情況下,超時后將如何處理?
發出請求執行timeout規定的時間內沒有返回值(consumer沒有拿到返回值),但是該方法不一定死了。默認情況下,如果超時的話,將發起重試,默認發起2次重試(總共執行3次),可能會引起重復執行,很多情況,寫操作的重復執行是我們不想看到的。
- 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:
@Reference
private BrandService brandService; //調用 Dubbo暴露的接口 @Reference是alibaba的
