面試官:Dubbo怎麼實現服務降級,他有什麼好處?
哈嘍!大家好,我是小奇,一位熱愛分享的程式設計師
小奇打算以輕鬆幽默的對話方式來分享一些技術,如果你覺得通過小奇的文章學到了東西,那就給小奇一個贊吧
文章持續更新
一、前言
書接上回,今天周一了,招聘軟體上的公司又開始蠢蠢欲動了。各種各樣的用工方式,駐場、勞務派遣、項目外包等讓人眼花繚亂,稍有不慎就落入了公司的「圈套」,各位還是要擦亮雙眼啊。
老樣子,還是先看看某直聘上的最新發布,挑挑揀揀,最後選了十幾家投了簡歷,然後就靜候佳音吧,趁這功夫去村裡黑網吧玩會。
沒想到周一也這麼多人,這些小孩估計是逃學來的吧,看我不把他們轟走。
我:喂,小屁孩,知道我是誰嗎?
小屁孩:哎呦,這不是奇哥嘛,大哥今天也逃學了啊。
我:逃什麼學,老子早畢業了。
小屁孩:唉,被學校開除就說開除了,還說什麼畢業了。
我:滾蛋,老子有畢業證。
小屁孩:畢業證多少錢啊。
我:兩千!!!
小屁孩:哈哈哈。。。
我:別給我扯這沒用的,趕緊換地圖,玩我最熟悉的守望之城,我可是狙神奇哥。
正在我十幾連殺的時候突然我的手機響了,誰呀這麼不會挑時候。
我:「喂您好」。
對面:「您好,請問是小奇嗎」。
我:「是我,你是?」。
對面:「我是XXX公司的,我看到hr推給我你的簡歷,我感覺還不錯,你什麼時候方便來現場面試一下」。
我:「現在不方便現場面試了」。
對面:「好吧,那你現在方便嗎?我們現在線上面試一下吧」。
我:「好的」。
二、面試
面試官:我看你簡歷上寫的精通Dubbo,那你能說一下Dubbo怎麼可以實現服務降級嗎?
我:Dubbo可以向註冊中心寫入動態配置覆蓋規則來實現服務降級。
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
registry.register(URL.valueOf("override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&mock=force:return+null"));
在這裡我們可以看到後面程式碼最後面有一個mock=force:return+null,這個就是用來定義降級後的返回策略的。其中:
mock=force:return+null 表示消費方對該服務的方法調用直接返回 null 值,不發起遠程調用。這樣的話讓我們配置了這個策略後,我們消費者調用這個服務者直接就返回null了,這個服務掛掉也沒有關係了。
mock=fail:return+null 表示消費方對該服務的方法調用在失敗後,再返回 null 值,不拋異常,這樣的話我們消費者在調用這個服務端的時候會等待服務端的響應,如果調用失敗後,就會返回消費者null值,這個如果調用成功的話就正常返回,這裡還是比較靈活的。
面試官:嗯,Dubbo為什麼要實現服務降級?
我:因為我們一個系統會有核心業務流程,和非核心業務流程。
例如一個網購的系統,在高峰期間壓力劇增,這個時候如果一個非核心業務流程服務出現問題,那麼核心的業務流程可能在遠程調用非核心服務時出現問題,這樣就造成核心流程服務也收到影響。
所以如果在高峰期壓力大的情況下, 如果非核心服務出現問題,我們可以使用服務降級策略,使得不可用的服務就不會再調用,直接讓他返回null值,不影響我們核心業務流程就好了。
面試官:「小夥子不錯呀,什麼時候能回北京入職呢」
我:「額。。。等等吧,現在還有好多家公司等著談薪資呢,我得挑一家合適的。」
面試官:「你要多少我都給你,來我這吧」
我:「額。。。那就月薪100個W吧」。
面試官:「喂,你說什麼我聽不見,訊號不好。。。」
我:「喂喂喂」(嘟嘟嘟嘟嘟嘟嘟嘟。。。)。
三、總結
這裡的相關內容還沒有整理完畢,文章後面持續更新,建議收藏。
文章中涉及到的命令大家一定要像我一樣每個都敲幾遍,只有在敲的過程中才能發現自己對命令是否真正的掌握了。
如果覺得我的文章還不錯的話就點個贊吧