2007年9月30日 星期日

企業內Web應用系統設計與實做注意事項

企業內Web應用系統設計與實做注意事項

在企業內部 , 因為潮流的關係 , 應用系統也慢慢由以往的 Desktop 應用程式(Client/Server) 轉換成 Web 應用系統 ,
仍然有一些人(不論是內部或外包廠商) 根本沒有用腦子好好想過 , 所以就會有雖然是使用 Web 應用系統但是仍舊套用 Desktop 應用程式的方式去設計與實做
這樣會有什麼問題?
舉例來說 , 有些企業可能會有需要人工按下一個按鈕 , 然後那個工作可能是轉檔程式或者是其他需要較久處理時間的作業 , 以往如果是使用 VB6開發程式 , 反正頂多出現 一個沙漏 , 或者是進度bar 顯示目前正在處理中 , 然後作業完成 , 跳出一個對話窗表示處理完畢 , 有可能是 1 小時 或者是更久 , 反正就是放著讓它跑

這樣的模式套用到 Web系統會有什麼問題 ???
Web 的Timeout 會是第一個問題 
一般網頁的處理的Timeout 設定都不會設的很長  , 所以碰到這種長時間作業的 , 就會發生 , 作業到一半就會 timeout 的問題 , 就會有廠商可能直接將 timeout 時間設定更長 , 這樣也只是頭痛醫頭 , 一點意義都沒有 , 想想看 , 如果有一個作業需要 5 個小時 , Web 的timeout 時間你想要設的多長 ?

建議的設計方式:
這種長時間作業的 , 應該是要設定成 非同步的處理模式 , User 透過網頁按下 開始處理 , 系統收到 Request 後 , 應該是設定成 Server端的排程作業 去處理 , 然後 網頁立刻回覆 , 已設入排程 , 結束...
User 應該是在事後 , 的某個時間點再去檢視 Server端排程作業狀態頁面 , 看看 先前的作業的作業狀態是 已完成 , 或是仍在進行中 , 或是已結束但是有錯誤發生 , 另外如 何時開始作業 , 何時完成作業 也應該是在該頁面中檢視

為何不是像建議的設計方式這樣做?
因為廠商可能沒腦子 , 或者是為了省事(省人力 , 省錢) ,
用原來的Client , Server 的寫法 , 只需要寫一個 處理頁面就完成了(雖然它會有我上面所說的重大問題) ,
如果換成我上面所說的建議設計方式 , 則需要寫的頁面會變多 , 但是不會有上述所說的重大問題 , 但是需要較多的人力跟開發成本

另外  DB 的 Timeout 會是第二個問題
在現在使用 J2EE Server 的企業有不少 , 也都會去設定 DataSource ,
但是 仍然可以發現到 很多企業的系統 , 對於相同的資料庫並沒有切出多組的 DataSource來作區隔設定
這樣的問題是什麼?
例如你是線上同步作業的 DataSource 與 大量批次轉檔非同步作業的DataSource 是否是使用相同的DataSource 或者是不同的DataSource ??? ,
兩者的Timeout 設定可能就需要不一樣的設定 , 大量轉檔作業可能需要耗時 5 個小時 , 那去使用一般的DataSource 時 , 可能程式跑到一半就會 Timeout 掉 , 你要去修改 一般的 DataSource 的 timeout 時間為 5 個小時嗎 ? 那麼其他線上作業的程式(Web)使用這個DataSource 時 , 它可能會變成 Web Page 的回應時間可能會拉長 , 使用者等待的時間會拖的更長....

建議的解決設計:
將 批次大量作業使用的 DataSource 與 線上作業使用的 DataSource 分開設定

在企業內部設計應用系統 , 不是讓系統執行工作後就沒事了 ,
你還必須考慮 , 該工作何時執行 , 何時結束 , 結束狀態是成功 , 或失敗 , 失敗的原因是什麼 ,
發生錯誤了 , 系統要能自動化的發出通知 , 通知維護人員進行檢視與處理
系統如何做失敗的錯誤回復 , 把原先的工作繼續成功的處理完畢 , 這些都是必須考慮的

 如果沒有好好考慮就會發生 , 錯誤發生了 , 沒人知道 , 或者是無法做後續的錯誤回復處理

2007年9月18日 星期二

方向偏差 結果就差個十萬八千里-2

方向偏差 結果就差個十萬八千里-續


使用WebService要考慮的還包含:
 a.交易控制處理的機制 是否有做到完整的交易控制 , 如果沒有會發生什麼事?
b. 安全性處理的機制 是否有做到完整的安全處理 , 想想看 , 有關客戶的個人隱私資訊 , 變成了 WebService , 然後以明碼的方式 在網路上傳來傳去 , 然後可能沒有半點認證或是授權 , 然後內容也沒有encrypt   

2007年9月9日 星期日

方向偏差 結果就差個十萬八千里-1

方向偏差 結果就差個十萬八千里

2007/09/09 17:27
這是從某人就職的公司聽到的 ,
V是負責規劃 SOA & WebService & XML 的人員
只不過某V 完全沒有設計及使用 XML 的經驗
也沒有寫過WebService , 也沒有寫過WebService的Client端的經驗 ,
SOA就更不用談了...

連拿到有問題的XML都不了解錯在哪裡或是如何改正,
但是這樣的人選就是要負責規劃公司未來使用的XML , WebService , SOA...

千萬別問我 
為何不找曾經有設計過XML內容 , 有在系統中實際應用過 XML 內容的同仁負責
或者是有程式設計經驗的同仁來負責
[現在的潮流是 任何一個阿貓阿狗
只要看過了
"深入淺出物件導向分析與設計"
或者是
XXXX Cook book
或者是
XXX 設計樣式
之類的 , 沒有寫過半行程式碼 , 不會任何程式語言的 都可以出來侃侃而談 系統架構的設計 , 哪裡對 , 哪裡不對
<這些書沒有什麼不對的 , 都很好也都很經典 ,
只是一些人的心態上有問題 , 一票阿貓阿狗因為沒有寫程式的經驗 , 就在當 SA ,SD 甚至是 Architect , 然後看到書上提到 "XXX 設計樣式" 或者是 "XXX Cookbook" 完全沒理解那些內容的適用處與適用範圍 , 就胡搞瞎搞的套用到 公司的系統上面去 ,
結果自然是亂七八糟 , 慘不忍睹 ,
然後那些人可能還會跳出來說: XXX 設計樣式一點用都沒有 , 是垃圾....之類的 ,

為了這些胡搞瞎搞 , 沒有實際程式寫作經驗的人 ,
某些大師只好出來寫
"XXX反樣式"
來明確的告訴你 , 哪些情況下 , 不適用哪些樣式....

IT 有一種很奇怪的階級情節 , 就是 Programmer 是最低下的 , 往上升級然後是 SD , SA , Architect

水往地處流 , 人往高處爬 , 是沒有太大的錯誤 ,
錯的是在於 , 一堆高處職階的 , SD ,SA , Architect 竟然是使用沒有程式寫作經驗的人去擔任 ,
因為連程式都寫不好 , 所以讓他們去做 SD , SA , Architect ???
>
]

回到正題 , 完全沒有經驗的沒有基礎的人 要來帶領大家如何開發 SOA系統 , WebService , XML ,
方向會不會有偏差呢? 差了多少呢? 誰知道呢? 誰負責呢?

{某公司內WebService的應用 , 在某些的人的錯誤領導下 , 正朝向濫用錯用的狀況
大家都知道 , 程式語言的 API 呼叫是最直接也最快速的 , 不論是效能或是資源都耗用都是最直接的 ,
但是如果是那類完全不會寫程式不了解狀況的人來帶領 , 就會變成 , 什麼都會變成是 WebService ,
可以會出現的後果是什麼 , 就是這些人講不上來的地方 ,
會有什麼後果嗎?
首先:
當你使用 WebService 時 , 你必須定義對應的 XML Schema ,
將資料的傳入傳出都必須要轉換為是 XML 的內容格式 ,
當然 Client 跟 Server端也都要進行額外的XML驗證與解析 , 之後才是真正的處理...

意思是 當你呼叫 x.helloWorld("say Hi") 這樣的 API 時 , 換成 WebService 他的資料量(XML)
會由可能是幾十個 byte 變成幾百個 byte , 甚至是幾千個 byte (看你的資料嚴謹度與套用的物件多寡) 在網路上傳輸 , 也會在 client & Server端的記憶體存在

這樣的影響是 ,
(1)網路之間的傳輸量會變大 , 需要比原來大 10 或者 數十倍的傳輸頻寬
(2)系統在收到資料時需要先進行XML驗證與解析 , 原來使用的記憶體可能是也比原來大 10 或者 數十倍的記憶體大小
(3)因為要額外進行XML驗證與解析 , 所以也需要額外的CPU使用量
因為這些額外的需要 , 要問的是 企業內部是否做好了因應的準備 , 換了更快 CPU , 更多數十倍記憶體 , 更多數十倍網路頻寬的Server與網路架構 ? 如果都沒有 ?
系統會發生什麼事??? 三不五時 , 系統會出現 Out of memory 或者是 CPU 滿載 , 或者是網路塞爆

要說明的不是 WebService 不能使用 , 而是要用之前 , 因應的配套措施做好了沒???
是不是用在適用的範圍內?

如果有 Native API 可以使用 , 然後系統不是跨程式語言 , 也不是跨平台的情況下 , 卻仍然有人堅持一定要使用 WebService 去做到 Native API 可以達到的事 ,
那就要看那間公司是不是有買了換了更快 CPU , 更多數十倍記憶體 , 更多數十倍網路頻寬的Server與網路架構 ? 如果都沒有 ?
那就會出現對比於公司的業務量的成長, 出現不成比例的需求: 機器永遠不夠快 , 記憶體不夠用 , 網路不夠寬 , 這樣的需求出來...
}