每個系統(tǒng)都會有他的生命周期,從生到死,經(jīng)歷少年、中年、老年三個階段。復(fù)雜度的管理貫穿系統(tǒng)的整個生命周期,就像進(jìn)化論的自然選擇一樣,不停的優(yōu)化著系統(tǒng),不停的斷舍離,保持著系統(tǒng)的生命力。
系統(tǒng)初建的階段,主要是完成0到1的構(gòu)建,用于驗證業(yè)務(wù)模式或者做最小的Demo產(chǎn)品。這個階段優(yōu)先考慮的就是時間和成本,就是要快。因此,這一階段的技術(shù)選型很重要,如果選擇不對,就會引入不必要的復(fù)雜度,降低研發(fā)效率。我覺得有以下兩個維度可供考慮。
第一個維度是團(tuán)隊成員對所選技術(shù)的熟悉度。項目初期其實能找到的人也是有限的,如果成員對某個技術(shù)非常熟悉,的確就縮短了學(xué)習(xí)的成本,而且也能避免掉曾經(jīng)犯過的問題。
第二個維度是各種技術(shù)方案的適合度和成本。我們得知道,沒有包治百病的技術(shù)方案,所有的技術(shù)方案都有他適合的領(lǐng)域,而且每個方案成本也是不一的。下面分別說幾個技術(shù)方案的選擇。
先說一下開發(fā)語言的選擇吧,我無意爭論哪個語言更好,而且語言也是在不斷變化中,只是說明下當(dāng)下各種語言的適用場景。其實各種語言都有他適合的地方,各家公司也都會用到不止一種語言,來解決系統(tǒng)不同的問題。但是在系統(tǒng)初期,語言的選擇還是很重要的。對于安卓和IOS客戶端,這個沒有選擇的余地了,選擇官方推薦的就可以。
后臺開發(fā)語言選擇面就比較廣了,C/C++/Java/Php/Python/.Net/nodeJs等等,眼花繚亂的,一般情況下,盡量選擇開源的語言平臺,社區(qū)支持會好一些的,架構(gòu)相對比較成熟一些,各種疑難雜癥都可以獲得免費的支持。我對.Net并無惡意,事實上我也是從.Net開發(fā)做起的,而且.net也已經(jīng)開源,但是時間太晚,的確業(yè)內(nèi)有不少公司,在業(yè)務(wù)壯大以后從.Net轉(zhuǎn)其他的語言。C/C++因為對內(nèi)存的有更靈活的掌控,比較適合做高并發(fā)但邏輯簡單的服務(wù)或者中間件,如果是業(yè)務(wù)邏輯復(fù)雜的系統(tǒng),初期不建議采用了;Java是目前非常廣泛使用的語言了,社區(qū)支持豐富,幾乎可以支撐全棧應(yīng)用,同時面向?qū)ο蟮脑O(shè)計模式很適合拆解復(fù)雜業(yè)務(wù),易于擴(kuò)展和維護(hù)。但是框架選擇太多、太復(fù)雜,用好了真不容易,入門有一定門檻;Php/Python/nodejs都是動態(tài)語言,開發(fā)非常靈活簡單,雖然也支持面向?qū)ο?,但不是?qiáng)制,上手容易,很適合初期采用。但是一旦系統(tǒng)復(fù)雜度變高,太靈活也會變成問題,就是大家開發(fā)太隨意,往往后期就要為這個隨意買單;到底選擇哪種語言,我想見仁見智吧,沒有標(biāo)準(zhǔn)答案,工具沒有好壞,只有適合不適合。
系統(tǒng)運(yùn)維這塊,我覺得這幾年最大的變化就是云技術(shù)的興起,云的可用性已經(jīng)超過平均單個公司自己組建運(yùn)維團(tuán)隊所能做到的可用性,而且使得運(yùn)維變得足夠簡單,初期甚至不需要運(yùn)維人員,業(yè)務(wù)規(guī)模壯大以后也可以只保留業(yè)務(wù)運(yùn)維人員,同時按需來付費,這些都極大的縮減了運(yùn)維成本。
而且云技術(shù)已經(jīng)不單單是運(yùn)維這一方面了,他通過更靈活的云端API,其實提供了各種服務(wù)能力,讓我們可以快速靈活的接入,實現(xiàn)自己的業(yè)務(wù)需求。比如音頻、視頻、直播、文件存儲、數(shù)據(jù)存儲等等,儼然是一個API的資源庫。這其實從根本上改變了業(yè)務(wù)開發(fā)的模式。在業(yè)務(wù)初期,怎么借助云的力量,接入現(xiàn)有的服務(wù),快速發(fā)展業(yè)務(wù),是非常重要的,盡量不要重復(fù)造輪子。
當(dāng)然,金幣總有兩面,云技術(shù)也在發(fā)展的過程中,數(shù)據(jù)安全就是一個需要關(guān)注的問題,再就是一旦出現(xiàn)運(yùn)維事故,云服務(wù)商的響應(yīng)速度也是一個考驗;另外,隨著業(yè)務(wù)的快速壯大,按需付費的成本也會變得越來越高,直到超過自建機(jī)房的費用;同時,業(yè)務(wù)所要求的可用性可能也越來越高,第三方的響應(yīng)支撐是否及時也是一個問題。這時候勢必要發(fā)展私有云,代價也是很大的。當(dāng)然,系統(tǒng)建立初期,我覺得完全可以使用公有云。
總結(jié)一下,系統(tǒng)初期,技術(shù)選型非常重要,一要看團(tuán)隊熟悉什么,二要看各種技術(shù)方案的優(yōu)缺點和成本,最后,要善于借力云技術(shù),避免重復(fù)造輪子。