close

在寫Web程式中,常常會遇到的狀況之一

相同的程式,卻因為不同的環境導至不同的情況發生

  • 專案經過本機環境測試成功後,才佈署於QT環境或其他環境。

  • QT或客戶端在實作時,卻發現有Bug。

  • 依照相同的步驟在本機上操作,卻沒有問題

  • 依照相同的步驟在QT或出問題環境上操作,真的有問題。

 

問題點猜測:

通常會發生這種狀況,可以想到幾個點來確認:

  1. 第一個想到的就是「資料差異」所造成,因為二邊的資料來源不同,造成相同的程式有不同的結果。

  2. 如果能排除第一點,再來有可能的:我方的程式是否有與其他服務進行資料間的傳遞,是否是因為對方回給我的資料與預期的不同,造成程式發生問題。

 

解析與驗證:

為了驗證「資料差異」部份,而且希望能在本機的開發環境上進入中斷點,我們必須將本機的資料庫,改造成與問題環境的資料相同,才能驗證是不是「資料差異」造成的。

為了達成這個目的,有二種作法,各有優缺點:

  1. 將QT環境的資料備份回本機進行Debug。

  • 優點:因為資料庫在本機的測試環境,可以肆無忌憚的進行任何測試。

  • 缺點:必須先取得資料庫資料,再將資料倒到本機的資料庫後,才能進行測試。

  1. 將本機的環境直接指向QT環境後,進行Deubg。

  • 優點:簡單地透過IP變更,即可指到QT環境的資料庫;快速又方便。

  • 缺點:因為直接連線QT環境的資料庫,所以必須非常小心;通常不建議在測試寫入資料功能時進行,否則你有可能會被叫去罰站

使用這種方法時,最容易被忽略的就是定時機制,有些程式起動後,會定時處理某些狀況並寫入資料庫,而這些資料在這種情況下,會被寫到QT環境或其他正式環境,請注意。

在現實的工作環境中,並不是任二種方法可以任君挑選,下方我們根據實際上遇到的情境來討論。

 

環境1:

狀況A環境1.png

 

環境1說明:

我們在本機上的開發機可以直接連線至QT環境的機器,重點是我們本機也可以直接連接到QT的資料庫機器。

在這種情況上,因為我們不管是第一種的將資料庫倒回本機,或是直接連接到QT的測試環境都不是問題,是最理想的情境,我們只要小心不要動到(不要有增、刪、改的動作)QT環境的資料即可。

 

環境2:

狀況A環境2.png

環境2說明:

我在本機上的開發機可以直接連線至QT環境的機器,只能連到一個跳板機(開放SSH連線登入)後,再進行後續的操作。

現實中很常遇到這種情況,因為要考慮安全性的問題,所以只開放一台不重要的機器當跳板機,主要機器藏在背後,以減少被攻擊的風險;甚至當跳板機被攻擊時,因為背後的主要機器本身也有安全性的設定,所以可以延長駭客取得主要資料的時間並增加麻煩程度。

在這種情況下,除了利用第一種方法:「將資料備份回本機上執行」外,似乎沒有其他方法了;是的,一般我遇到的工程師們也是這麼認為,不過,其實是有方法的,那種方法叫做跳板。

 

下一篇我們來描述如何在這種環境下解決,讓我們本機的環境,直接連到QT環境的Database。

 

arrow
arrow

    JAVA Programmer 發表在 痞客邦 留言(0) 人氣()