開發(fā)環(huán)境要不要和測(cè)試環(huán)境隔離?要是說,是不是要各用一套數(shù)據(jù)庫(kù)等基礎(chǔ)設(shè)施?

  能隔離當(dāng)然好,開發(fā)人員和測(cè)試人員不會(huì)互相干擾。但隔離是有代價(jià)的,它意味著你要多引一個(gè)數(shù)據(jù)庫(kù),如果你的系統(tǒng)是分布式的,你還要多維護(hù)一套MQ、RPC中間件等。

  依我看,需不需要隔離要看系統(tǒng)是否滿足下面的三個(gè)條件:

  1、兩個(gè)環(huán)境的系統(tǒng)總是要接觸到同一份數(shù)據(jù)

  2、數(shù)據(jù)被一個(gè)系統(tǒng)接觸后,業(yè)務(wù)狀態(tài)會(huì)改變;導(dǎo)致這份數(shù)據(jù)對(duì)另一個(gè)系統(tǒng)不再可用

  3、很難禁止兩個(gè)系統(tǒng)在同一時(shí)刻接觸到同一份數(shù)據(jù)

  解釋:

  條件1.如果兩個(gè)環(huán)境共享數(shù)據(jù)庫(kù),但開發(fā)環(huán)境只處理北方數(shù)據(jù),測(cè)試環(huán)境只處理南方的,那不用隔離

  條件2.即使兩個(gè)環(huán)境都會(huì)處理北方數(shù)據(jù),但如果這種處理是只讀的,也是開發(fā)環(huán)境用了,測(cè)試環(huán)境可以再用,那也無所謂

  條件3.即使數(shù)據(jù)被一個(gè)環(huán)境處理后,另一個(gè)不能用;但如果對(duì)數(shù)據(jù)的接觸是人為觸發(fā)的,也是說開發(fā)環(huán)境被人觸發(fā)數(shù)據(jù)改動(dòng)時(shí),不會(huì)干擾測(cè)試環(huán)境的測(cè)試,那也無所謂。

  具體的場(chǎng)景:

  1、純讀的網(wǎng)站不必隔離,它不滿足條件2

  2、有寫、但所有操作都由用戶觸發(fā)的網(wǎng)站也不必隔離,因?yàn)樗粷M足條件3

  3、以全局?jǐn)?shù)據(jù)為目標(biāo)的自啟應(yīng)用需要隔離,比如Quartz,Cron,MQ消費(fèi)者等,因?yàn)樗鼈儾粷M足條件1。以MQ應(yīng)用為例,如果外部發(fā)來的某個(gè)數(shù)據(jù)被測(cè)試環(huán)境消費(fèi)過了,開發(fā)環(huán)境無法再消費(fèi)了,這時(shí)你應(yīng)該為開發(fā)和測(cè)試環(huán)境各配一個(gè)MQ

  4、對(duì)自啟應(yīng)用,如果實(shí)在不想隔離,要在代碼里做一些env-specific的東西,使得不同環(huán)境不會(huì)訪問到相同的數(shù)據(jù),比如開發(fā)環(huán)境只能訪問數(shù)據(jù)庫(kù)里flag=Dev的記錄。不過,這種作法對(duì)程序和數(shù)據(jù)的侵入都很大,不值得提倡。但這種做法可以應(yīng)用到其他環(huán)境的隔離上,比如預(yù)發(fā)環(huán)境和正式環(huán)境,它們必須使用相同的數(shù)據(jù)庫(kù)。