借力用力,一兩撥千斤 拋棄程式設計師天生的自負

2021-06-28 03:45:08 字數 2182 閱讀 5545

工作了幾年,輾轉了幾個公司,最近一直在思考乙個問題:如何借力用力,一兩撥千斤。程式設計師,總是有一種自負:總感覺自己做的系統比他人好,自己寫的**比人優雅,然後自己重新實現類似的系統、編寫類似的**,遇到了型別的問題、甚至比別人多踩了一些大坑,才恍然大悟原來他人為何要那麼做。系統設計、軟體實現,其實是乙個權衡、妥協的過程。

各種設計,各種實現都有實現者的權衡考慮,乙個有責任、有思考力的設計者都會有自己的設計、實現初衷、取捨。我們不應該先入為主地做判斷。這種程式設計師的自負情節是要不得的。

這跟借力用力、一兩撥千斤的思考貌似沒有半毛錢的關係,其實這是有關係的。如果不摒棄自負的心理,是無法借力用力、一兩撥千斤。但是程式設計師如何借力用力,一兩撥千斤呢?這裡,我就談談我的工作感悟吧。

我,22023年至2023年在國內一家著名的儲存軟體公司從事儲存軟體開發設計。在這四年裡,我發現了這個公司的乙個習慣,比如我們部門內要從事某個專案的軟體開發,老同事,總會去問其他組的同事,是否有可以復用的**,是否有可以復用的系統設計,然後從其他部門拿來可以復用的**、系統設計,或者從其他部門拿來設計經驗:比如設計類似的系統會踩到哪些坑,然後在早期的系統設計考慮解決方案。

這種復用策略、借鑑只是一些小的,從更大的就是這個公司提倡的歸一化設計。什麼是歸一化設計呢?由於是從事儲存系統設計,儲存分為刀片、陣列、伺服器。不同型別的儲存,其實可以用領域模型來思考,除了cpu、記憶體、硬碟引數不同,其他的都是一樣的。比如驅動、介面、插槽。因此歸一化設計的思路就是利用這個特點,對於刀片、陣列、伺服器分別設計了不同的平台,各種型別的平台,裝上不同的cpu、記憶體、硬碟,就形成了同一產品系列面向高、中、低端的儲存裝置。這種歸一化設計除了能夠節約成本、快速出貨,而且從使用者的角度來說:為使用者提供了統一的操作介面、使用手冊,降低使用者後繼新裝置的學習、使用成本。

歸一設計,在手機行業比較著名的例子,我覺得就是mtk(聯發科),k910(華為海思)。歸一設計的核心理念,就是軟體、科技成熟的階段進行的模組化、元件化、平台化的系統設計,更高階的是方案設計。

其實,個人感覺,大家的能力都是差不多,別人從事那麼久的,形成的方案、平台能用,就拿來用,快速推出業務才是王道,再挑戰,也不會超越前輩多少。除非,你有更新、突破性的原創能力,但在中國的軟體開發環境,我覺得現在還沒有這種情況。

比如就拿分布式設計的cap特點,一致性(c)、可用性(a)、分割槽容錯性(可靠性)p,這三者在乙個分布式系統中,是無法完全滿足的。那麼有乙個部門對於設計了乙個可以復用分布式系統,你是拿來用,還是重新挑戰一把、再搞乙個?

個人覺得,能夠復用,就復用,快速推動業務才是硬道理,除非該部門設計的系統確實夠爛的,不然程式設計師何必為難自己呢?我們先來看下分布式系統的整體檢視:

所有的分布式系統,其完整的檢視,應該都是類似的,需要解決以下的幾個問題,以及當前常用的解決方案:

2:內部系統對外部的隔離,解決安全隱患。常用的做法是通過閘道器型別模式,實現一些應用閘道器,暴露在公網上,從而隔離內部核心系統、資料。

3:資料容災問題,尤其是跨區域容災問題,實現資料安全性、可靠性,解決突發事件導致的服務不可用、不可恢復問題。

4:同一類服務之間的負載均衡,採用的是客戶端前端呼叫智慧型選擇、lvs、負載均衡協調器。不同的系統根據的系統特點擊擇,當採用lvs已經是一種範例。

5:應用、交換機的可用性,常用的做法當然是冗餘熱備:standby 或者activity。standby 模式下,需要發現master 可用性,常用的做法就是心跳,然後通過配置中心更新配置,提醒前端呼叫改變訪問ip和埠。

6:服務之間訪問模式:原始socket 呼叫,現在成熟的做法是採用rpc,然後實現平台、框架快速推進業務開發。開源的rpc就有zero c 的ice,還有ace 的dao(?tao)。

網路通訊從客戶端到服務端的訪問模式,以及服務端的模式都可以元件化、平台化了。

7:解決資料庫訪問效能的問題,採用分庫分表,實在不行,採用類似memcached 用加快訪問,以及採用這種方案資料的一致性解決方法。

從整個檢視,由上而下,我們可以看到脫離具體的業務外,不同的業務從安全、效能、可靠性、容災等問題的解決其實是一致的、無差異的,基本上可以元件化、平台化、方案化,供其他組、部門借力用力,一兩撥千斤,快速業務推進。

但是乙個剛開始的小公司是不能這麼搞乙個大而全的系統,這樣會搞死小公司。但是,有一點小公司無論如何得元件化的是資料:db、檔案系統。資料安全性、可靠性是無法突破的底線。早點元件化、平台化資料為後來的業務安全、可靠帶來根本、有力的保障。

程式設計師不要總想著四兩撥千斤

2020 年是很魔幻的一年,但好在這特殊的一年中,經歷了一些事情,閱讀了一些書籍,終於明白了一些之前的困惑。因為覺得自己這些感悟可能具備一些普適性,所以作本文和大家一起分享。經常會有 拿 35 歲來製造年齡焦慮,但現實生活中,我也見過不少超過 35 歲的程式設計師。在中國幾十年前是沒有程式設計師,就...

程式設計師不要總想著四兩撥千斤

2020 年是很魔幻的一年,但好在這特殊的一年中,經歷了一些事情,閱讀了一些書籍,終於明白了一些之前的困惑。因為覺得自己這些感悟可能具備一些普適性,所以作本文和大家一起分享。經常會有 拿 35 歲來製造年齡焦慮,但現實生活中,我也見過不少超過 35 歲的程式設計師。在中國幾十年前是沒有程式設計師,就...

程式設計師不要總想著四兩撥千斤

大概程式設計師選擇入行時,都想著自己要從事的是乙份高科技工作,所以從意識上就有意無意賦予了自身一些特殊的象徵,但很多時候這種強加的意義讓自己焦慮不已。我經常在想,當李鴻章第一次面對美國的高樓大廈時,他心理是什麼樣的衝擊感。那些在清朝能建高樓大廈的人算不算高科技人才?那些能建立現代船舶 火車 汽車的人...