專刊文章

  首頁 / 專刊文章 / 三層式架構

三層式架構

三層式架構

筆者日前曾與內部夥伴討論是否要將三層式架構列為神奇系列的優點,反對者所持的理由是:這群客戶不懂這些技術名詞,根本不關心,只要功能達到就好…。

想起過去英特爾(Intel)透過各大媒體強力行銷其新一代CPU-【Centrino】。創造出廣告界最經典的佳作-Intel Inside,從負面的角度來看,英特爾利用媒體來箝制使用者的觀念,讓使用者不知不覺陷入莫名其妙的品牌情節。但如果從正面的角度來看,使用者學會分辨CPU的功能重要特性,如果CPU廠商沒有推出真正升級的產品是無法讓客戶掏錢。

在商業軟體的購買行為裡,有些特點也是攸關重大,但消費者未必能清楚分辨的特性。例如三層式。在小套商業軟體系統無人將之列為重大軟體特點,均只強調後端系統是SQL Server功能,可確保資料不遺失,因此,可以…賣的比較貴, 可以…將以往系統拋棄。

其實在以往的日子裡,一般中小企業商業軟件架構,大致如下:

以上兩種架構都有致命的缺失,消費者都必須承擔。第一種架構最明顯的問題是不穩,資料易遺失。為何會如此?以搜尋為例:

如果這時User2,新增、修改、刪除資料,會造成Cache資料

User1的Cache資料過時,很容易用過時資料運作,或剛好整個電腦因某種因素,不正常的回寫而讓DBF損毀。

第二種架構最常見的問題有多人同時過帳及斷頭斷尾這兩個致命傷。

何謂多人同時過帳:以扣庫存為例,如果庫存有鉛筆10支。這時有二人同時出貨。一個出貨2支,一個出貨3支。照理庫存應剩5支。但實際呢?

資料庫會剩下鉛筆數量不是7支不然就是8支,至於為什麼?相信透過圖解應該是很清楚。

至於,斷頭斷尾這問題其發生的原理是:以常見的報價單據為例

在資料庫的設計原理至少要有兩個資料表格。

因此如果要存回資料庫,至少要有二個Update SQL,在少數的個案,萬一只有一個Update SQL 成功,另外一個SQL失敗會造成所謂斷頭斷尾,其後遺症相當多。

既然常見二種架構都有缺點,難道三層式的架構就能避免缺失,答案是不盡然,必須輔以幾個特性才能完全避免。
在進一步解釋之前,先解釋何謂三層式:

Client端:

作用是讓使用者輸入的畫面,通常Client端可以透過Browser來自動安裝。

Server端:其作用有:

● 一般Client端負責收集,使用者輸入的值之後傳回Server端,根據定義好的商業邏輯來存入資料庫

● 負責管理後端資料庫的連線,管理的方向大致是--有使用才連線,不然挪給別人使用或預留幾條連線,讓使用者可快速連線。

● 前端狀態的儲存,如使用者資訊,連線時間...等。

資料庫:

其作用是資料儲存。

在初步了解完三層式的架構之後,接下來筆者深入討論神奇系列的完整三層式架構。

一般廠商為了節省成本往往單機版採用檔案型資料庫(DBF或Access...);網路版採用資料庫(MySQL、SQL Server、DB2或Oracle...)及Web版會採用不同的架構。其最大的後遺症是-每轉換一個版本,便需重新轉換一次系統;重新匯入資料;重新熟悉新的操作畫面;重新上線教育使用者。

神奇系列的三層式架構,不管是單機版、網路版及Web版均採用以下三層式。

因此,在轉換版本的過程幾乎是「無法感覺它的存在」。至於最為人詬病的資料損毀問題,因採用MySQL資料庫幾乎不會發生。那斷頭斷尾呢?在回答此問題之前,先解釋一個資料庫術語「Transaction」稱為交易。

「交易」是指一連串對後端資料庫異動的SQL。以提款為例:1.扣錢2.機器吐出錢。這二個動作是完整不能只成立一個。

在資料庫的設計功能中會提供一個確保完整交易的機制。前端的商業系統必須利用此機制才能避免所謂斷頭斷尾。神奇系列的ApServer內建會啟動此機制確保使用者的交易被完整執行。

最後,希望讀者能透過本編的討論,能更聰明的選擇所需商業軟體。