專案中怎樣做技術選型

程式設計一生發表於2021-11-11

引出四個維度

工作快十五年了,從十年前開始經常會有新專案,需要從頭開始做方案和設計。做技術選型很少成為我的難題。不是因為這方面我多有方法,而通常是很少有選擇。在做技術選型的場景下基本有以下四個維度:

維度一

從系統構成上有兩種:

第一種,有之前的老系統,需要重構

第二種,從零開始建的服務

維度二

從穩定性要求上有三種:

第一種,現在沒有什麼業務量,將來估計也不會有什麼增長,甚至很可能不成

第二種,現在沒有什麼業務量,將來對穩定性要求很高

第三種,現在對有穩定性要求很高

維度三

從環境上有三種:

第一種,公司有很多基礎設施

第二種,公司有一些基礎設施

第三種,公司基本沒有基礎設施

維度四

從要求上有兩種:

第一種,公司有標準化規範,需要用公司的統一元件

第二種,公司沒有要求

 

各個維度組合的選項考慮

從零開始專案現在沒有什麼業務量,將來估計也不會有什麼增長

從目標上,遇到這種專案,工作的重心就不在於把專案做好做壞,而在於人員培養。

如果公司對元件上沒有什麼要求,那我的建議是大家想學什麼,就用什麼。直接拿學習的試驗田來用,一舉兩得。

如果公司有標準化規範,需要用公司的統一元件。但是公司的元件一般也是開源進行二次開發的,也一樣可以想學什麼就用什麼,弄不明白的,還可以找維護元件的人請教。也可以用公司自研的,但是在業界有一定知名度的產品。研究的好可以作為面試的一個亮點。

瞎舉個例子哈:

一六年、一七年做P2P並且不合規的公司,眼看就不行了。有的團隊用的kafka,就是為了學習這個東西;有的團隊自己搭建redis叢集也是為了學習。

從零開始專案現在沒有什麼業務量,現在或者將來對穩定性要求很高

從目標上,這個是產生業績的最佳專案,要精心規劃。

做這種專案需要做好調研,包含業界調研和公司調研。業界的同類產品是怎麼做的,有哪些缺點和優點。公司有沒有同類或者可以登高類比(登高類比是指先找相似度最高的,找不到在逐漸擴大範圍)的,那些專案遇到過哪些坑或者問題,是否和架構或者技術選項有關。

在做好調研基礎上,如果公司對元件上沒有什麼要求,那就需要根據專案本身的特點綜合比較。舉例如下圖:

不考慮專案本身特性,使用技術通用的考察項主要有:優勢、劣勢、技術成熟度、社群活躍度、資料豐富程度、是否有大牌公司在持續維護。

可參考我之前的文章《SpringBoot整合web容器》裡面有介紹我當初對tomcat還是jetty選擇的考慮點。

如果公司有標準化規範,需要用公司的統一元件。

這時候,如果公司的元件可選性很多,比如之前美團的監控告警元件就有cat、digger、tracing、大白等。這時候一方面考慮各個元件的側重點和自身是否切合,最重要的是要看其他團隊都用什麼。周圍團隊用的很少,我們們也不要用了。兄弟團隊有福同享有難同當,如果大家都用這個,元件穩定性有問題了,影響的不止一個團隊,也相互有個依靠。就自己用了還出事了,額,讓我想起一句歌詞:“多少祕密在其中 欲訴無人能懂”-----一簾幽夢。暴露年齡了。

如果公司的元件只有一個,也要看看兄弟團隊有沒有在用,還需要元件團隊給提供相應的SLA,對於還在推廣中的元件要謹慎。

重構老系統沒有什麼業務量,將來估計也不會有什麼增長

建議放棄重構!

重構老系統沒有什麼業務量,將來對穩定性要求很高

參考從零開始專案現在沒有什麼業務量,現在或者將來對穩定性要求很高的方法。

重構老系統,現在對穩定性要求很高

建議選型儘量和之前保持一致,以便於和之前的邏輯儘量一致。避免踩到特殊需求導致的特殊邏輯等坑。

實在不能一致,比如十二年前我們有個“新鮮事”中介軟體,類似於網頁版的發朋友圈吧。之前是用c++寫的,後來c++的同事都離職了,要求我們改成java。這時候要考慮的主要是技術的成熟度。這個成熟度包含業界技術本身的成熟度和團隊成員對技術的熟練度。

對於這種型別,還有幾句忠告:

不要特立獨行,要合群!

使用成熟的技術!

使用成熟技術的成熟功能!

最後對使用成熟技術的成熟功能做個解釋說明:比如redis很成熟了,redis有很多高階特性,比如訂閱轉發,穩定性要求高的不要用。用更加成熟的常用做訂閱轉發的比如MQ!

 

往期推薦

避免線上故障的10條建議

為什麼要持續重構

程式碼整潔之道--邊界

LRU快取實現(Java)

相關文章