1.首當(dāng)其沖的當(dāng)屬業(yè)務(wù)和技術(shù)的矛盾铝噩,業(yè)務(wù)快速發(fā)展漂辐,產(chǎn)品對需求的時間點要求感人
應(yīng)對撲面而來的需求泪喊,工程師們往往疲于奔命,使用各種短平快的方法來滿足業(yè)務(wù)的需求髓涯,長此以往袒啼,整個系統(tǒng)變得錯綜復(fù)雜,臃腫不堪纬纪,難以維護(hù)瘤泪。一個好的架構(gòu)需要在應(yīng)對業(yè)務(wù)需求的同時,持續(xù)提煉通用化的模塊育八,通用層基礎(chǔ)且穩(wěn)定对途。在通用模塊的基礎(chǔ)之上構(gòu)建出適配層,由適配層處理復(fù)雜多變的業(yè)務(wù)需求髓棋,適配層靈活且多變实檀。在技術(shù)上不斷沉淀基礎(chǔ)的通用模塊,這不僅不會成為工程師們額外的開發(fā)負(fù)擔(dān)按声,反而可以提升業(yè)務(wù)需求的實現(xiàn)效率膳犹,提高系統(tǒng)的健壯性和可持續(xù)發(fā)展。解決業(yè)務(wù)和技術(shù)這一對矛盾签则,需要工程師站在業(yè)務(wù)和技術(shù)中間须床,不偏不倚。
2.優(yōu)秀的系統(tǒng)架構(gòu)面對的第二個矛盾是技術(shù)和運營的矛盾
工程師們往往熱愛新和奇的技術(shù)渐裂,重視新功能的開發(fā)豺旬,從0分做到60分的過程總是令人愉悅的,一切按照預(yù)期的演進(jìn)是那么的美好柒凉。隨著系統(tǒng)投入使用族阅,數(shù)據(jù)規(guī)模越來越大、用戶量和訪問量逐步增大膝捞,算法效果需要不斷提高坦刀,原有的架構(gòu)暴露出來的問題也逐步增多。架構(gòu)的演進(jìn)進(jìn)入了深水區(qū)蔬咬,是拋棄原有架構(gòu)進(jìn)行重構(gòu)鲤遥,還是在現(xiàn)有系統(tǒng)中進(jìn)行持續(xù)的演進(jìn),工程師們往往會遇到選擇的難題林艘。一個好的系統(tǒng)是要靠持續(xù)深入的運營來構(gòu)建的盖奈,這里的運營是一個泛指的概念,指代構(gòu)建系統(tǒng)中各種監(jiān)控北启、調(diào)試信息卜朗、數(shù)據(jù)統(tǒng)計分析拔第、數(shù)據(jù)對比等。一個系統(tǒng)不論是重構(gòu)场钉,還是持續(xù)演進(jìn)蚊俺,都需要開發(fā)全方位的運營系統(tǒng)來了解當(dāng)前架構(gòu)中的每一個環(huán)節(jié)。系統(tǒng)架構(gòu)從60分演進(jìn)到100分是一個艱苦的過程逛万,沒有一個系統(tǒng)是在一開發(fā)出來就解決了所有的問題的泳猬,提高運營能力是架構(gòu)演進(jìn)的基礎(chǔ),這本身不是一個技術(shù)問題宇植,而是意識問題得封,需要工程師們做大量細(xì)致深入的調(diào)研和思考。
3.最后要說的是全局最優(yōu)和局部最優(yōu)的矛盾
我們在開發(fā)中常常遇到指郁,當(dāng)針對某個問題進(jìn)行優(yōu)化后忙上,系統(tǒng)中又出了其他問題,也是俗話里說的頭疼醫(yī)頭闲坎、腳疼醫(yī)腳疫粥、治標(biāo)不治本。當(dāng)你是從0開始搭建一個系統(tǒng)腰懂,對系統(tǒng)的各個環(huán)節(jié)和歷史演進(jìn)非常清楚梗逮,也就比較容易的從全局角度思考和解決問題。但對于復(fù)雜系統(tǒng)绣溜,大部分工程師往往只關(guān)注到系統(tǒng)的某一部分慷彤,解決問題的思路是受限于眼界,容易陷入至局部最優(yōu)怖喻,而且往往局部的解決辦法相對全局而言更復(fù)雜更間接底哗。工程師需要有開闊的眼界,從更高層面理解系統(tǒng)架構(gòu)罢防,從而了解問題產(chǎn)生的本質(zhì)艘虎,從全局角度出發(fā)予以解決。