31、dubbo支援哪些負載均衡、高可用以及動態代理的策略?
1、面試題
dubbo負載均衡策略和叢集容錯策略都有哪些?動態代理策略呢?
2、面試官心裡分析
繼續深問吧,這些都是用dubbo必須知道的一些東西,你得知道基本原理,知道序列化是什麼協議,還得知道具體用dubbo的時候,如何負載均衡,如何高可用,如何動態代理。
說白了,就是看你對dubbo熟悉不熟悉:
(1)dubbo工作原理:服務註冊,註冊中心,消費者,代理通訊,負載均衡;
(2)網路通訊、序列化:dubbo協議,長連線,NIO,hessian序列化協議;
(3)負載均衡策略,叢集容錯策略,動態代理策略:dubbo跑起來的時候一些功能是如何運轉的,怎麼做負載均衡?怎麼做叢集容錯?怎麼生成動態代理?
(4)dubbo SPI機制:你瞭解不瞭解dubbo的SPI機制?如何基於SPI機制對dubbo進行擴充套件?
3、面試題剖析
(1)dubbo負載均衡策略
1)random loadbalance
預設情況下,dubbo是random load balance隨機呼叫實現負載均衡,可以對provider不同例項設定不同的權重,會按照權重來負載均衡,權重越大分配流量越高,一般就用這個預設的就可以了。
2)roundrobin loadbalance
還有roundrobin loadbalance,這個的話預設就是均勻地將流量打到各個機器上去,但是如果各個機器的效能不一樣,容易導致效能差的機器負載過高。所以此時需要調整權重,讓效能差的機器承載權重小一些,流量少一些。
跟運維同學申請機器,有的時候,我們運氣,正好公司資源比較充足,剛剛有一批熱氣騰騰,剛剛做好的一批虛擬機器新鮮出爐,配置都比較高。8核+16g,機器,2臺。過了一段時間,我感覺2臺機器有點不太夠,我去找運維同學,哥兒們,你能不能再給我1臺機器,4核+8G的機器。我還是得要。
3)leastactive loadbalance
這個就是自動感知一下,如果某個機器效能越差,那麼接收的請求越少,越不活躍,此時就會給不活躍的效能差的機器更少的請求。
4)consistanthash loadbalance
一致性Hash演算法,相同引數的請求一定分發到一個provider上去,provider掛掉的時候,會基於虛擬節點均勻分配剩餘的流量,抖動不會太大。如果你需要的不是隨機負載均衡,是要一類請求都到一個節點,那就走這個一致性hash策略。
dubbo負載均衡.png
(2)dubbo叢集容錯策略
1)failover cluster模式
失敗自動切換,自動重試其他機器,預設就是這個,常見於讀操作。
2)failfast cluster模式
一次呼叫失敗就立即失敗,常見於寫操作。
3)failsafe cluster模式
出現異常時忽略掉,常用於不重要的介面呼叫,比如記錄日誌。
4)failbackc cluster模式
失敗了後臺自動記錄請求,然後定時重發,比較適合於寫訊息佇列這種。
5)forking cluster
並行呼叫多個provider,只要一個成功就立即返回。
6)broadcacst cluster
逐個呼叫所有的provider。
(3)dubbo動態代理策略
預設使用javassist動態位元組碼生成,建立代理類,
但是可以通過spi擴充套件機制配置自己的動態代理策略。