MySQL安裝部署,從半成品狀態(tài)的改進(jìn)
有時(shí)候突然會(huì)把幾件不搭邊的事情聯(lián)系起來(lái),竟然能夠找到一些共通的地方。我在琢磨最近的幾件事情的時(shí)候,腦海里不由得浮現(xiàn)出幾個(gè)字:“半成品”
我是蠻反感工作中的半成品的,說(shuō)有吧,使用效果一般,說(shuō)沒(méi)有吧,也投入了一些時(shí)間,概括一下就是投入和產(chǎn)出嚴(yán)重不成正比。
另外一類情況更偏于主觀,做任務(wù)的人感覺(jué)一切都妥當(dāng)了,但是驗(yàn)收的時(shí)候,發(fā)現(xiàn)不是設(shè)計(jì)理念的問(wèn)題就是任務(wù)的精細(xì)度上面比較粗糙,如果本著差不多就行的態(tài)度其實(shí)也能過(guò)去,但是顯然以后的事情誰(shuí)能說(shuō)的了,真要用到的時(shí)候,代碼邏輯都忘差不多了,重新調(diào)試改動(dòng),這個(gè)工作如果前期能稍微充分難一些,也不會(huì)有很多返工。
所以在這件事情上面,我發(fā)現(xiàn)以前對(duì)自己,對(duì)團(tuán)隊(duì)成員的要求有些松散,以至于稍微帶點(diǎn)要求和質(zhì)量標(biāo)準(zhǔn),就會(huì)感到大家有些吃力,其實(shí)對(duì)于職業(yè)發(fā)展來(lái)說(shuō)是有害的,從0到1的構(gòu)建主要為了效率和快速迭代,可能在一些質(zhì)量標(biāo)準(zhǔn)上面可以打折扣,過(guò)度要求會(huì)有些刻薄,但是守江山更難,技術(shù)維護(hù)也是,都希望時(shí)間的邊際成本能夠越來(lái)越低,在已有的基礎(chǔ)上構(gòu)建和改進(jìn),那得下真功夫。
我舉一個(gè)最近和半成品對(duì)抗的小例子,也是鞭策自己能夠繼續(xù)按照既定的想法往前走。
這是數(shù)據(jù)庫(kù)軟件的安裝部署的例子,按理說(shuō)這是很簡(jiǎn)單的一件事情了,如果要摳命令,基本都是個(gè)位數(shù)的命令,但是有一些需要額外補(bǔ)充的地方。
1)不同版本的參數(shù)文件,比如環(huán)境有5.5,5.6,5.7,8.0等,如何更好的支持多個(gè)版本
2)初始化用戶和權(quán)限,根據(jù)業(yè)務(wù)特點(diǎn)有些預(yù)置的用戶需要?jiǎng)?chuàng)建,配置相應(yīng)的權(quán)限,不同版本下的語(yǔ)法格式都有差異,還有密碼插件相關(guān)影響。
3)安裝部署通常是和監(jiān)控報(bào)警,備份恢復(fù)相關(guān)的,這些工作是不是可以作為可選項(xiàng)
4)單機(jī)多實(shí)例和service部署模式還是有一定的差別,如何平滑適配
5) 新增數(shù)據(jù)庫(kù)版本支持,已有的接口和部署方式如何適配
MySQL 8.0已經(jīng)推出了幾年,也在內(nèi)部做了一些測(cè)試和總結(jié),而且早期我們直接入主MySQL 5.7版本,也算是積累了3年多的經(jīng)驗(yàn),所以果斷決定新業(yè)務(wù)都按照MySQL 8.0的基線來(lái)推廣。
已有的腳本都好幾年沒(méi)動(dòng)過(guò)了,經(jīng)過(guò)一番需求分析,發(fā)現(xiàn)這是一個(gè)半成品,主要原因如下:
1)腳本目前直接使用的場(chǎng)景很少,去年團(tuán)隊(duì)下大功夫開發(fā)的一鍵部署,因?yàn)榱鞒涕L(zhǎng)而顯得比較脆弱,已經(jīng)和這個(gè)功能有了很大的差別
2)腳本執(zhí)行不穩(wěn)定,因?yàn)橹暗哪_本設(shè)計(jì)中采用了很多分散的腳本,也就意味著是腳本調(diào)腳本的思路,邏輯相對(duì)比較龐大,混雜
3)新增8.0的功能,腳本需要整體改動(dòng),涉及的面比較大
4)目前腳本里面也存在一些細(xì)小的問(wèn)題,一直沒(méi)有修復(fù)
對(duì)于這些問(wèn)題,我做了如下的一些事情。
1)備份腳本內(nèi)容后,我開始刪除一些過(guò)時(shí)的邏輯檢查代碼,去掉一些沒(méi)有使用場(chǎng)景的邏輯和相關(guān)腳本
2)將多個(gè)腳本整合為1個(gè),重新組織了腳本關(guān)聯(lián)依賴
3)將依賴的參數(shù)文件模板和腳本模板都上傳到配置中心里面,在腳本里面會(huì)用命令方式提取
4)把原來(lái)文件夾的腳本結(jié)構(gòu)重構(gòu)為一個(gè)單一的腳本
5)修改前端的配置,去掉冗余無(wú)效的配置項(xiàng),修改調(diào)用邏輯
6)團(tuán)隊(duì)內(nèi)部做了簡(jiǎn)單演示,團(tuán)隊(duì)提了一些改進(jìn)建議,修正后發(fā)布
這些工作經(jīng)過(guò)了很多的測(cè)試和整理之后,在不同版本中也做了相關(guān)的測(cè)試和驗(yàn)證。也算是讓原本半成品的狀態(tài)變?yōu)榭捎?,而且是最新版本,接下?lái)要做幾件更細(xì)致的事情。
1)安裝部署的時(shí)間目前在30秒以內(nèi),涉及數(shù)據(jù)字典的初始化,目前使用了一刀切的邏輯,后臺(tái)sleep 20秒,保證這個(gè)過(guò)程的初始化時(shí)間足夠,其實(shí)可以更加動(dòng)態(tài)友好一些,做動(dòng)態(tài)監(jiān)測(cè)
2)考慮使用基于自制yum的配置方式,把一些固化的參數(shù),命令等方式重新打包構(gòu)建,這樣后續(xù)就可以使用yum的方式快速部署了。
3)把軟件安裝和部署整合起來(lái),提供多版本的軟件支持和安裝,比如8.0.19,8.0.20
4)使用基于壓縮鏡像的模式,可以把一個(gè)數(shù)據(jù)庫(kù)壓縮到極小容量,需要時(shí)直接解壓?jiǎn)?dòng)即可,經(jīng)過(guò)之前的測(cè)試,一個(gè)可用的數(shù)據(jù)庫(kù)鏡像大概在2M左右,解壓后在2G~3G左右(涉及ibdata,reod等文件的容量)
本文轉(zhuǎn)載自微信公眾號(hào)「楊建榮的學(xué)習(xí)筆記」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系楊建榮的學(xué)習(xí)筆記公眾號(hào)。