隨著開源組件的日益增多跛梗,整個開源社區(qū)就像一個超級大的沃爾瑪,琳瑯滿目的開源組件讓人挑花了眼翘骂。這里壁熄,我們就談談如何進行選型的問題。
傳統(tǒng)的選型方式
一般而言碳竟,我們會按如下的方式進行選型驗證:
- 功能上是否契合草丧。也就是我的需求能通過該組件來完成
- 性能如何(會做一些壓測)
- 穩(wěn)定性如何
- 社區(qū)活躍度如何
- 是否能方便和其他的組件配合
如果能通過上面的幾條,我么可能就會采用該套技術了莹桅。然而這往往會導致很多誤用方仿。比如很多人就把zookeeper當存儲用了,因為倒也滿足上面的一些需求统翩。
基因論
這里的基因指的是,某個開源組件是因為什么而誕生到這個世界的此洲。仍然以zookeeper為例厂汗,我們可以說zookeeper 是為分布式協(xié)調而誕生的,他的基因使得它適合做這一塊的工作呜师。但是zookeeper的很多特性又可以利用在很多領域:
- 配置變更通知
- 集中化的存儲
于是有大量的應用圍繞這兩個功能點開發(fā)娶桦。這其實就是一種誤用。比如Storm 拿 zookeeper存儲偏移量,這樣就會涉及到頻繁的更新衷畦,這其實就是不合適的栗涂。或許這種場景HBase/Redis之類的存儲會更合適些祈争?
我們在選型的過程中過度的考慮了 功能是否匹配
斤程,而忽略了開源項目本身的基因,這必然會導致能夠實現(xiàn)功能菩混,但是卻帶來一些不可控的問題忿墅。
這里還有一個典型就是Docker,各種濫用導致各種問題,鏡像存儲問題沮峡,虛擬隔離的安全性問題等疚脐。如果知道Docker的基因其實是無侵入性的為應用加上資源限制,以及附帶運行時環(huán)境邢疙,就不會各種折騰了棍弄。
所以在做選型的時候不妨問問: 我選用的開源組件是為了解決我這個問題而設計和誕生的么?我用的場景是不是吻合他的基因疟游?