溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

「面試題」介紹你做過最復(fù)雜的系統(tǒng)

發(fā)布時間:2020-04-09 17:25:02 來源:網(wǎng)絡(luò) 閱讀:410 作者:Java_老男孩 欄目:編程語言
經(jīng)常有人會問:能介紹下你做過最復(fù)雜的系統(tǒng)嗎?對此,你被人問起過嗎,你思考過什么標準才算復(fù)雜嗎?

系統(tǒng)的復(fù)雜性包括了技術(shù)復(fù)雜性和業(yè)務(wù)復(fù)雜性。

有人抱怨道:我做的系統(tǒng)一點都不復(fù)雜,你看我們數(shù)據(jù)量不大,用不上分庫分表,業(yè)務(wù)也不復(fù)雜,單體系統(tǒng)就夠了,什么負載均衡和集群也沒有,流量也不大,高并發(fā)和分布式也沒接觸過。

何為技術(shù)復(fù)雜性,我上面提到的都算,隨著業(yè)務(wù)的發(fā)展,我們的系統(tǒng)架構(gòu)需要支持大數(shù)據(jù)和高并發(fā),因此復(fù)雜的系統(tǒng)架構(gòu)孕育而生,在數(shù)據(jù)庫層面要考慮分庫分表,讀寫分離,主備切換;

為了提高查詢性能和單點問題,分布式緩存必不可少;

為了銷峰限流和服務(wù)解耦,分布式消息中間件也要用上;

大促期間,為了保證穩(wěn)定性,還要機器自動伸縮,服務(wù)降級、服務(wù)隔離、服務(wù)熔斷、服務(wù)限流等都是常用套路。

此外,分布式還有分布式調(diào)度系統(tǒng),分布式監(jiān)控系統(tǒng),分布式日志系統(tǒng),分布式鏈路采集等等。事實上,所以系統(tǒng)都是分布式的,單點故障是無法忍受的。說到這里,你覺得這系統(tǒng)太復(fù)雜啦。對的,為了構(gòu)建高可用,可伸縮的分布式系統(tǒng)確實復(fù)雜。

但是,技術(shù)架構(gòu)只是技術(shù)復(fù)雜性的其中一塊罷了。

試想,一個復(fù)雜的算法算不算技術(shù)復(fù)雜性呢?我覺得也算。一個好的算法,可以幫助我們解決很多復(fù)雜的業(yè)務(wù)問題。

這里,對于我們非算法工程師而言,如果能把業(yè)務(wù)問題轉(zhuǎn)換成算法問題,我就可以把人工問題轉(zhuǎn)換成智能化,那么我們的業(yè)務(wù)離商業(yè)智能又邁進的一大步。

說 AI 可能遠啦,聊點近的,比如延遲隊列的“時間環(huán)”算法,ZK的會話分桶算法,限流的令牌桶等,很多偏業(yè)務(wù)實戰(zhàn)方面的落地也可以讓我們做得事情充滿含金量,換句話說,吹逼層次可以提高了好幾個 Level 哈。技術(shù)復(fù)雜性,還可以是解決多數(shù)據(jù)源的聚合查詢問題,解決數(shù)據(jù)多寫同步以及一致性問題等。拋磚引玉,僅供參考。

業(yè)務(wù)的復(fù)雜性在于:不同業(yè)務(wù)與業(yè)務(wù)之前相互作用與干擾。

做過 2B 產(chǎn)品或者項目的小伙伴應(yīng)該非常理解我所說的含義,因為適配不同企業(yè)和商家做定制化需求會導(dǎo)致產(chǎn)品越來越無法通用化,尤其 ERP 這種強業(yè)務(wù)定制的系統(tǒng)。

那么,為了維護多套類似的邏輯和代碼是成本巨大的,因此設(shè)計可擴展性的系統(tǒng)尤為重要。很多時候,我們對需求的變化是不可預(yù)期的。這種不可預(yù)期性恰恰是業(yè)務(wù)復(fù)雜性所在。

事實上,架構(gòu)設(shè)計都是基于當(dāng)下的設(shè)計,一個設(shè)計的好壞在于:它是否可以快速地支持業(yè)務(wù)。換句話說,我設(shè)計的系統(tǒng)滿足了當(dāng)前的業(yè)務(wù),但是它后期無法可擴展,那么這個設(shè)計是好是壞呢?此外,我們根據(jù)領(lǐng)域模型作出了良好的設(shè)計,但是隨著業(yè)務(wù)的發(fā)展,每個模型耦合越來越重。

那么,請思考是領(lǐng)域模型不合理,還是架構(gòu)設(shè)計的不合理,還是業(yè)務(wù)發(fā)展的太快了呢?或者,再思考一個問題。一個公司覺得業(yè)務(wù)中臺的概念很好,也打算落地實踐,但是呢,它的業(yè)務(wù)比較單薄,那么,此時它設(shè)計的業(yè)務(wù)中臺具有通用性嗎?我個人感覺,不太好說。

事實上,需要不停的業(yè)務(wù)滋養(yǎng),只有滋養(yǎng)中才能從最初僅提供單薄業(yè)務(wù)功能的服務(wù)逐漸穩(wěn)定成一個解決具體問題的業(yè)務(wù)領(lǐng)域模型。設(shè)計模式的有一個模式叫做「模版方法模式」,它的核心思路在于把公共的流程固化下來,把差異點移交給具體的業(yè)務(wù)方去實現(xiàn)。是吧,只有我們有足夠多的業(yè)務(wù)場景,我們才能沉淀出那些是公共的邏輯,那些是可擴展點,然后在業(yè)務(wù)設(shè)計過程中,我們可以在本業(yè)務(wù)實現(xiàn)子類做自定義實現(xiàn),或者提供 SPI 給業(yè)務(wù)介入方擴展。

總結(jié)一下,業(yè)務(wù)的復(fù)雜性在于:不同業(yè)務(wù)與業(yè)務(wù)之前相互作用與干擾,以及我們對需求的變化是不可預(yù)期性。

你以為我說到這里就結(jié)束了嗎?當(dāng)然,不是。我更多的是想引發(fā)你的思考以及我們思維的碰撞。例如,很多人抱怨自己是 CRUD 工程師。

我覺得這些人太小看自己的價值了。業(yè)務(wù)的價值和復(fù)雜往往不是 CRUD,而是業(yè)務(wù)背后的價值思考。線下的業(yè)務(wù)線上化,傳統(tǒng)的東西在線化,那么它就具有結(jié)構(gòu)化存儲的能力,可以和其他數(shù)據(jù)協(xié)同,那么,它就有價值。

此外,你是不是可以把 CRUD 的流程自動化,本來一天搞定的東西,你1分鐘就搞定了,然后在花59分鐘來實現(xiàn)業(yè)務(wù)差異性。可以了嗎,當(dāng)然不行。你是不是可以把59分鐘在壓縮壓縮,寫一個框架,把多分支的問題通過策略模式+工廠模式搞定呀,固化流程通過模版方法模式搞定哈,然后觀察者模式、適配器模式、代理模式、責(zé)任鏈模式、狀態(tài)模式都可以用一用。事實上,很多設(shè)計模式是解決復(fù)雜業(yè)務(wù)場景的可擴展經(jīng)驗套路。

最后總結(jié)一下,系統(tǒng)的復(fù)雜性包括了技術(shù)復(fù)雜性和業(yè)務(wù)復(fù)雜性。我們一起暢聊,學(xué)習(xí),成長,打破認知的局限性!??!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI