線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2006
推到 Plurk!
推到 Facebook!

面對快速持續改善的多層架構系統要如何規劃版本更新架構呢?

尚未結案
bestlong
站務副站長


發表:125
回覆:734
積分:506
註冊:2002-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-07-27 23:27:23 IP:175.182.xxx.xxx 訂閱
考量要將主從架構的系統改寫成多層的架構,只是現在對處理版本更新上有很大的疑慮
如果每日會釋放出一次以上的新版本,要如何做到在不中斷使用者工作的前提下處理應用伺服器的版本更新?
在低負載時直接更新 AP Server 然後配上斷線能自動重連的 Client 嗎?
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
編輯記錄
bestlong 重新編輯於 2015-07-27 23:31:42, 註解 無‧
bestlong 重新編輯於 2015-07-27 23:33:16, 註解 無‧
bestlong 重新編輯於 2015-07-27 23:33:49, 註解 無‧
GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-07-28 09:48:53 IP:59.120.xxx.xxx 訂閱
雪龍大的這個解法在實作上有遇到什麼問題嗎?
===================引 用 bestlong 文 章===================
考量要將主從架構的系統改寫成多層的架構,只是現在對處理版本更新上有很大的疑慮
如果每日會釋放出一次以上的新版本,要如何做到在不中斷使用者工作的前提下處理應用伺服器的版本更新?
在低負載時直接更新 AP Server 然後配上斷線能自動重連的 Client 嗎?
bestlong
站務副站長


發表:125
回覆:734
積分:506
註冊:2002-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-07-28 10:36:23 IP:210.242.xxx.xxx 訂閱
自己實務上只有處理 CS 架構的更新,也只有一個主程式然後使用 AutoUpgrader 元件處理更新,更新的時機由用戶端決定
如果要開始踏入到 Delphi 三層架構,就會增加 AP Server 的版本管理,所以先提出這個疑問了解狀況。
所以就真的是我所說的配套方法嗎?

===================引 用 GrandRURU 文 章===================
雪龍大的這個解法在實作上有遇到什麼問題嗎?

===================引 用 bestlong 文 章===================
考量要將主從架構的系統改寫成多層的架構,只是現在對處理版本更新上有很大的疑慮
如果每日會釋放出一次以上的新版本,要如何做到在不中斷使用者工作的前提下處理應用伺服器的版本更新?
在低負載時直接更新 AP Server 然後配上斷線能自動重連的 Client 嗎?
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-07-28 10:57:47 IP:59.120.xxx.xxx 訂閱
AP Server 更新相較 Client 是比較簡單的
只要不影響舊版Client的使用,雪龍大所說的方法就很好了

===================引 用 bestlong 文 章===================
自己實務上只有處理 CS 架構的更新,也只有一個主程式然後使用 AutoUpgrader 元件處理更新,更新的時機由用戶端決定
如果要開始踏入到 Delphi 三層架構,就會增加 AP Server 的版本管理,所以先提出這個疑問了解狀況。
所以就真的是我所說的配套方法嗎?

===================引 用 GrandRURU 文 章===================
雪龍大的這個解法在實作上有遇到什麼問題嗎?

===================引 用 bestlong 文 章===================
考量要將主從架構的系統改寫成多層的架構,只是現在對處理版本更新上有很大的疑慮
如果每日會釋放出一次以上的新版本,要如何做到在不中斷使用者工作的前提下處理應用伺服器的版本更新?
在低負載時直接更新 AP Server 然後配上斷線能自動重連的 Client 嗎?
pcplayer99
尊榮會員


發表:142
回覆:740
積分:591
註冊:2003-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-07-28 18:26:41 IP:120.236.xxx.xxx 訂閱
多层,有很多种写法,比如最新的 DataSnap,比如 WebService,甚至比如古老一点的 DCOM。如果简单地使用 DataSnap 的 211 连接这种模式,通常开发者会让 Client 一上来就连接 Server 的 211 而且一直连接不断开。这样的话,你的 Server 没法更新。

概念上来说,不管用哪个模式,都要注意,Client 向Server读取数据后,马上断开连接。Client 向 Server 提交数据时,如果没提交成功(网络不通等等状况),就下次再提交。如果这个时候用户要关机,就 SaveToFile 存在用户自己的电脑上,下次 Client 启动后自动 LoadFromFile 然后自动再次提交。提交的时候,才去连接 Server。

当然啦,如果是 WebService,本身每次 Client 向 Server 请求数据或者提交数据或者 Call 一个 server 的 function 后,就自动断开连接了(这个是 HTTP 本身的特性)。

做到以上的东西,你可以随便停掉 SERVER 再重新启动,不影响正在使用的 Client。并且,这样做的好处是一个 Server 可以同时服务更多的 Client。

aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-07-29 00:11:58 IP:61.228.xxx.xxx 訂閱
我的看法是:
建立二個或以上的 app server instance,可以是不同ip,或是同ip不同port。
舉例來說, 有 a,b 二台 app server,a 的 listen port 是123,b的是 456。
假如 a 是正常在服務的server。而 b 是正在修正或加功能的 server instance。
在client端上,有個 ini 或是類似的檔,或reg,記載 server 的ip與port。
ok的情形下,client 連入 a。
而當你覺得 b 已經開發ok,那就去更新部份,或全部的 client端的程式或僅是server ip port 的設定檔。

那麼就可以快速切換,或部份切換,或全面切換。
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
Ray_Lin
一般會員


發表:0
回覆:30
積分:11
註冊:2015-07-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-07-29 14:20:09 IP:114.32.xxx.xxx 訂閱
AP層的BPL如果可以,要依程式需求切成不同的DataModule區塊,不要全部的TABLE都用在一個DataModule做管理,這樣才可以依Client未連接工作的程式做部分更新。連線中的可以依需求慢點更新,或請USER先離線再更新。這是一點個人心得。還請各位多多指教。
bestlong
站務副站長


發表:125
回覆:734
積分:506
註冊:2002-10-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-07-30 09:18:34 IP:210.242.xxx.xxx 訂閱
看起來,AP Server 只要程式架構分割良好,就可以在執行期更換 BPL 來達到更新的目的
但是這樣的更新的處理架構大致上是怎麼處理的呢?

我猜:將新版 BPL 檔案佈署後,AP Server 輪詢檢查到有新版本,就會等到有使用空窗時自行替換?
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
Ray_Lin
一般會員


發表:0
回覆:30
積分:11
註冊:2015-07-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-07-30 14:10:43 IP:114.32.xxx.xxx 訂閱
目前我們三層的做法是這樣,AP(主要是和資料庫連接,取得資料或存取資料),這部分是手動更改,主要是這部分和資料庫的變動很密切。一般資料庫的結構改變,AP的程式也會變動結構。不太可能只改資料庫不改AP端。所以基本上這二個是同步的,所以確認可以更改的時間手動更改。
Client端是使用者有用再改。因為不確定使用者何時才會使用,不使用下載程式也佔頻寬,所以使用者啟動程式時,檢查程式版本是否一樣,不一樣就先下載再啟動新程式。
GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2015-07-30 16:24:26 IP:59.120.xxx.xxx 訂閱
一旦需求變動,AP和Client幾乎同時都要調整

正式區和測試區的環境還要並存

專案一趕時很容易就混亂了,有解決的方法嗎?

===================引 用 Ray_Lin 文 章===================
目前我們三層的做法是這樣,AP(主要是和資料庫連接,取得資料或存取資料),這部分是手動更改,主要是這部分和資料庫的變動很密切。一般資料庫的結構改變,AP的程式也會變動結構。不太可能只改資料庫不改AP端。所以基本上這二個是同步的,所以確認可以更改的時間手動更改。
Client端是使用者有用再改。因為不確定使用者何時才會使用,不使用下載程式也佔頻寬,所以使用者啟動程式時,檢查程式版本是否一樣,不一樣就先下載再啟動新程式。
Ray_Lin
一般會員


發表:0
回覆:30
積分:11
註冊:2015-07-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2015-07-30 17:37:45 IP:114.32.xxx.xxx 訂閱
針對各位的討論,我寫了一下淺見,還請大家多多指教,這篇文章放在 http://hpcwpc.blogspot.com/中

首先,我們會把程式做一些分類,然後做一些存放程式位置的規定。

接下來,會有一個共同的檔案管理區,這個區域存放大家寫的程式,當個人要修改程式時,就要從這個區域CHECK OUT程式,這時程式就得屬CHECK OUT的人了,除非該名程式人員把程式更新CHECK IN,否則是不可以更動的。這樣才不會有程式互改的情形發生。

因為DELPHI這種語言的特性,基本上就是為程式人員設計的,所以大家寫的程式都是在自己的電腦上做測試。在自己Local的開發環境上開發程式是有道理的,因為這時你負責的程式你最大,你可以依自己的方式來解決問題(當然還是要遵守一下大家的規定,例如預設值的EVENT位置、引用適當的公共程式,而不要自己寫一套解決相似問題的程式等),這樣程式的開發效率最快,DEBUG也很容易。

程式測試OK後,就會把程式上傳到共同的檔案管理區,這時個人的程式就告一段落了。

程式的更新分為AP端和Client端。如果狀況很緊急,程式馬上要用(例如不更新程式就沒辦法發薪水),那就用平台工具更新資料庫,並把AP程式和Client放上主機。然後請使用者從新進入系統,當使用者使用到更改的功能時,就會自動下載Client端程式,然後用新的程式運作。

至於不緊急的程式,可以等大家都下級時做更新,因為有一堆人做修改,其實也很難知道每一個人改了什麼。但是可以確定,就是在共同管理區的程式是可以正確WORK的。那就用平台工具,把資料庫CREATE一次(平台工具會先比對TABLE,有修改的才做修改),再把程式全部重BUILD,COPY到主機。這樣更新的工作就完成了。主要是資料庫和AP程式會同步更新,Client端是使用者有用到程式,才比對做更新。

沒有特別好,也很平實,不過會有問題通常都是程式人員程式有BUG,很少是更新的錯誤。
GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2015-07-31 07:42:59 IP:211.79.xxx.xxx 訂閱
多人環境開發我還沒有經驗,我都自己一個玩無雙
學習中
===================引 用 Ray_Lin 文 章===================
針對各位的討論,我寫了一下淺見,還請大家多多指教,這篇文章放在 http://hpcwpc.blogspot.com/中

...43...
bestlong
站務副站長


發表:125
回覆:734
積分:506
註冊:2002-10-19

發送簡訊給我
#13 引用回覆 回覆 發表時間:2015-08-03 18:21:47 IP:175.182.xxx.xxx 訂閱
目前看起來最簡單的方式應該就是先用雙 AP Server 的的架構來處理應用伺服器的更新
而用戶端的設定上可以用 TSimpleObjectBroker 元件來處理自動切換 AP Server 的主機列表

===================引 用 aftcast 文 章===================
我的看法是:
建立二個或以上的 app server instance,可以是不同ip,或是同ip不同port。
舉例來說, 有 a,b 二台 app server,a 的 listen port 是123,b的是 456。
假如 a 是正常在服務的server。而 b 是正在修正或加功能的 server instance。
在client端上,有個 ini 或是類似的檔,或reg,記載 server 的ip與port。
ok的情形下,client 連入 a。
而當你覺得 b 已經開發ok,那就去更新部份,或全部的 client端的程式或僅是server ip port 的設定檔。

那麼就可以快速切換,或部份切換,或全面切換。
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
系統時間:2017-11-19 22:18:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!