后現(xiàn)代主義的編程時(shí)代(三)

于是那個(gè)曾在回春之血中沐浴的女伯爵,被活埋了……她那曾發(fā)生過(guò)罄竹難書(shū)殘酷行徑的城堡,轟然坍塌成了廢墟。在被遺忘的荒野中,只剩下了一座孤零零的高塔,矗立在埋葬的地牢之上,如昭示著邪惡的象征。

“解耦……一定要解耦……”女伯爵意識(shí)有些模糊了,“社會(huì)分工……導(dǎo)致,軟件開(kāi)發(fā)……一定是……解耦的……”她躺在玫瑰花瓣那樣紅的鮮血澡盆里,返老回童的儀式已經(jīng)過(guò)半,過(guò)不了幾個(gè)小時(shí),她會(huì)年輕20年,直接變成一個(gè)細(xì)胞。


1. 代碼編寫

現(xiàn)在國(guó)內(nèi)的開(kāi)發(fā)生態(tài)基本上是以JAVA為主。比如筆者工作的地方,項(xiàng)目有60%以上都是。正所謂天下軟件,合久必分,分久必合。分有分的美,合有合的帥。試看DOCKER虛擬化技術(shù),為了達(dá)到自動(dòng)化的目標(biāo),會(huì)要求我們?cè)诖a編寫和軟件開(kāi)發(fā)中,做哪些事情。

拋開(kāi)操作系統(tǒng)這樣的硬杠杠不說(shuō),很多我們的軟件依賴于Java的虛擬機(jī)環(huán)境。那么JVM是必不可少的,而我們規(guī)范使用的JSDK也就幾種??梢?jiàn)JVM環(huán)境可以做成一個(gè)DOCKER映像庫(kù)。同理,WEBLOGIC,MQ/AQ,TOMCAT等也是可以做成規(guī)范使用的映像庫(kù)。

另外我們的代碼庫(kù),如果已經(jīng)上收到規(guī)范的版本庫(kù)如IBM Clear Case,而且支持自動(dòng)化編譯的支持如Maven、Ant,或者能更激進(jìn)一些使用Jenkins,自動(dòng)化構(gòu)建整個(gè)運(yùn)行平臺(tái),是多么美妙的事情。你想,開(kāi)發(fā)的小哥做完單元測(cè)試,把代碼一提交,和組長(zhǎng)說(shuō),樓下妹子請(qǐng)他喝茶支付,于是組長(zhǎng)撇了眼進(jìn)度表,眉毛一揚(yáng),“GO AHEAD!”自動(dòng)構(gòu)建平臺(tái)就抓代碼,咕嚕咕嚕的編譯好,然后自動(dòng)化測(cè)試平臺(tái)把JVM、運(yùn)行工程、數(shù)據(jù)庫(kù)組件、日志收集組件等咔嚓一組合,模擬前端向測(cè)試組件咕嚕咕嚕的吐數(shù)據(jù),日志收集組件把所有回歸服務(wù)全部跑了一遍,最后在測(cè)試APP上把結(jié)果通知給測(cè)試組姐姐。小哥也看到結(jié)果,心潮澎湃,忍不住吻了樓下妹子一口,然后和樓下妹子商定明天下午去民政局。這是多么功德無(wú)量的事情啊……(即使被拒絕也可以后天去啊?。?/p>

【本文對(duì)其他語(yǔ)言如C#/C/C++同樣適用。本文不對(duì)語(yǔ)言的好壞生態(tài)作過(guò)多的評(píng)論和引導(dǎo)。本文無(wú)意于引起語(yǔ)言之爭(zhēng)。如果要筆者表態(tài),筆者表示PHP是世界上最好的語(yǔ)言,沒(méi)有之一。(雖然PHP很爛。)】

2. 數(shù)據(jù)庫(kù)和緩存

試想你申請(qǐng)完虛擬機(jī),要去求數(shù)據(jù)庫(kù)管理員裝數(shù)據(jù)庫(kù)。正常一點(diǎn)的數(shù)據(jù)庫(kù)管理員會(huì)強(qiáng)迫虛擬機(jī)管理員事先裝好幾種數(shù)據(jù)庫(kù)的版本虛機(jī),交付的時(shí)候直接隨著虛擬機(jī)一起給你。但是新建實(shí)例,調(diào)試數(shù)據(jù)庫(kù)性能參數(shù),甚至導(dǎo)入導(dǎo)出,字符集的事情,會(huì)讓你和DBA的關(guān)系變得特別微妙。你所要的僅僅是一個(gè)干凈的實(shí)例數(shù)據(jù)庫(kù)而已,對(duì)吧?

3. 配置文件

是什么讓軟件配置變得像多頭蛇海德拉那樣令人生厭?你永遠(yuǎn)不知道上線的時(shí)候你還漏了那個(gè)參數(shù)文件。答案還是在于社會(huì)分工。工程師們肯定思考的是自己生產(chǎn)的組件能夠適應(yīng)多種環(huán)境下運(yùn)行,所以為他的組件配置了復(fù)雜的參數(shù)。不幸的是,由于配置文件受到種種因素特別是文化、個(gè)性以及宇宙射線的影響比較大,配置文件的位置比一粒沙子中包含的宇宙還多。特別是如果工程師還引用了其他工程師組件,你在紛繁復(fù)雜的工程文件中尋找特定配置項(xiàng)目的時(shí)候,你開(kāi)始祈禱無(wú)論如何也要讓叉狀閃電擊中你自己。

【作者所在的工作地點(diǎn)開(kāi)始倡導(dǎo)配置項(xiàng)存放在數(shù)據(jù)庫(kù)中,并且是一個(gè)自上而下的動(dòng)作。可喜可賀??!】

我上次去五金店買一個(gè)錘子,結(jié)果打開(kāi)包裝還發(fā)現(xiàn)了一本500頁(yè)的使用說(shuō)明。

4. 日志輸出

運(yùn)維MM覬覦你的日志文件很久了,她認(rèn)為你不配合做標(biāo)準(zhǔn)化日志輸出是針對(duì)她個(gè)人的。她甚至準(zhǔn)備找機(jī)會(huì)和你的組長(zhǎng)聊聊,并且準(zhǔn)備好了四十袋紙巾來(lái)容納她的眼淚。當(dāng)然你的組長(zhǎng)比你更了解這個(gè)項(xiàng)目。項(xiàng)目采用了好幾個(gè)閉源組件,你不給人家額外的錢,人家怎么會(huì)樂(lè)意給你改呢。所以組長(zhǎng)使用了他的高屋建瓴的做法勸回了運(yùn)維MM。

如果我們的運(yùn)維和開(kāi)發(fā)要解耦,日志和運(yùn)行程序就需要解耦。除了常規(guī)的運(yùn)行日志,還要有精彩的光聲電。除了能支持日志文件輸出位置的配置,還能支持異步日志和遠(yuǎn)程日志。

“解耦……解耦……”女伯爵的聲音逐漸變尖起來(lái),她應(yīng)該已經(jīng)回到童聲期了。


我們是這么想的。

如果能把“代碼”、“配置”、“數(shù)據(jù)庫(kù)”、“日志”等組件解耦,那么至少在容器環(huán)境下的自動(dòng)化運(yùn)維和自動(dòng)化無(wú)人工值守測(cè)試場(chǎng)景中,可以解放無(wú)數(shù)雙手和時(shí)間,提高工作的生產(chǎn)效率。

為不同的配置、數(shù)據(jù)庫(kù)和日志做好規(guī)范,然后形成固定的DOCKER鏡像。

為代碼做好自動(dòng)構(gòu)建環(huán)境,目標(biāo)代碼放入DOCKER容器,與上述幾個(gè)鏡像的容器對(duì)接。

訪問(wèn)DOCKER內(nèi)部的網(wǎng)絡(luò)來(lái)進(jìn)行交互。服務(wù)處理完的日志可以卸載后再處理。處理的結(jié)果可以對(duì)接報(bào)告環(huán)境形成通告。

我們會(huì)有大把時(shí)間去做更多的活兒,比如思考人參啊,參加單身派對(duì)啊,寫寫技術(shù)文檔啊??傊饶愣畟€(gè)小時(shí)沒(méi)有睡覺(jué)顫顫巍巍的看著屏幕上的“rm -rf *”,猶豫著拍下回車鍵然后后悔一輩子強(qiáng)。

科技真美妙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容