走在架構(gòu)師的大道上 Jack.Wang's home

          Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項(xiàng)目管理 Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks
           

          Workflow 架構(gòu)改進(jìn)的猜想
                                        ------ Jack 2008

             開發(fā) workflow 已經(jīng)是兩年前的事了,那是我第一家公司的第一個(gè)有形產(chǎn)品,也是我主導(dǎo)開發(fā)的。在這里,真的要感謝以前的主管,使我從一個(gè)程序員爬到了技術(shù)主導(dǎo)的位置。

          workflow 的項(xiàng)目背景是這樣的:公司是個(gè)集團(tuán)公司,主產(chǎn)業(yè)是制造和電子,開發(fā)人員有幾百號,我們屬于第二個(gè)事業(yè)部,用這個(gè)系統(tǒng)的有管理層,業(yè)務(wù)層大約上萬人,每個(gè)月的數(shù)據(jù)量為 200多萬筆,這個(gè)產(chǎn)品只是內(nèi)銷。就是在這樣的背景下公司組了 20 個(gè)人的團(tuán)隊(duì),在兩年的時(shí)間開發(fā)了 workflow 系統(tǒng), 它的開發(fā)語言是 Java, 總體架構(gòu)是 Struts+Hibernate+Spring, J2EE 的部分,也有 J2SE 的部分,采用的標(biāo)準(zhǔn)是 WMfC.

          當(dāng)時(shí)數(shù)據(jù)庫只有一個(gè)(Oracle 數(shù)據(jù)庫),在單獨(dú)的服務(wù)器上,配置很高,Web 服務(wù)器也是單獨(dú)的高檔機(jī),還有就是客戶端的 Application. 典型的三層架構(gòu)。這樣的系統(tǒng)能夠有多大的吞吐量呢,性能如何能,可想而知。系統(tǒng)的性能沒有禁得住應(yīng)用的考驗(yàn),于是我們反思了,從新考慮了系統(tǒng)架構(gòu)。發(fā)現(xiàn)瓶頸在數(shù)據(jù)庫,不過那時(shí)我就離職了,在公司整整呆了 2年零6個(gè)月。

           事隔這么久,只有猜想當(dāng)時(shí)該如何如何。猜想 workflow 已經(jīng)超負(fù)荷工作了,數(shù)據(jù)庫占了大量 CPU 資源, 系統(tǒng)沒有擴(kuò)展性!猜想 workflow 以服務(wù)的方式加入了互聯(lián)網(wǎng),用戶超過 1 個(gè)億。

               從下面兩方面改進(jìn)系統(tǒng)。

          1.       數(shù)據(jù)庫層的架構(gòu)改進(jìn):

          l         第一個(gè)觀念就是數(shù)據(jù)的讀寫分開,比如用完全一樣的數(shù)據(jù)庫,一個(gè)主數(shù)據(jù)庫用來寫,其他從數(shù)據(jù)庫用來完成讀操作,隔段時(shí)間將寫數(shù)據(jù)庫同步更新到從數(shù)據(jù)庫中。

          l         用戶表是個(gè)大表,超過一個(gè)億的資料,檢索更新速度很慢。于是把用戶表單獨(dú)放在一個(gè)數(shù)據(jù)庫服務(wù)器中,并且按照用戶的所在省份水平分割成多個(gè)表,每個(gè)表就有 300 多萬的數(shù)據(jù),查詢可控制在 1 秒之內(nèi)。

          l          表單流量很大,每月上千萬筆。同樣,表單表按照功能分割到多個(gè)數(shù)據(jù)庫服務(wù)器中,每個(gè)數(shù)據(jù)庫中再按照表單類別水平分割。這樣在增加表單時(shí),可達(dá)到服務(wù)器的線性擴(kuò)展。

          l         Oracle 在分布式方面做得很好,可以充分利用這個(gè)優(yōu)勢。

                 l     數(shù)據(jù)庫的緩存
          2.       應(yīng)用層的架構(gòu)改進(jìn):

          l         盡量做到動(dòng)態(tài)網(wǎng)頁靜態(tài)化,比如在流程中跑的一個(gè)固化的表單不應(yīng)該動(dòng)態(tài)生成,而應(yīng)該在提交表單時(shí)就做靜態(tài)化。

          l         使用緩存。有些網(wǎng)頁,像首頁,可以學(xué)習(xí)百度首頁,緩存24小時(shí)。

          l         鏡像服務(wù)器

          l         使用負(fù)載均衡技術(shù),比如 DNS負(fù)載均衡,四層交換機(jī)負(fù)載技術(shù)等等很多現(xiàn)成的方案可遵循。

          l         對系統(tǒng)局部模塊優(yōu)化。不要自己設(shè)計(jì)模式,現(xiàn)有的模式很多,可以參考。

          l         引入中間件技術(shù),對源有系統(tǒng) SOA 的觀念做集成和整合。比如整合 ERP, EIP,EPP等系統(tǒng)到 workflow中。

          本人在系統(tǒng)架構(gòu)方面經(jīng)驗(yàn)比較少,在系統(tǒng)分析方面做得工作比較多,請 blog 朋友多多指教





          本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請注明出處,如有版權(quán)問題請及時(shí)通知。由于博客時(shí)間倉促,錯(cuò)誤之處敬請諒解,有任何意見可給我留言,愿共同學(xué)習(xí)進(jìn)步。
          posted on 2008-03-27 10:30 Jack.Wang 閱讀(1686) 評論(2)  編輯  收藏 所屬分類: 架構(gòu)師篇

          Feedback

          # re: 對 Workflow 架構(gòu)改進(jìn)的猜想[未登錄] 2008-03-27 10:50 dragon
          不錯(cuò),經(jīng)驗(yàn)值得我們?nèi)W(xué)習(xí),希望繼續(xù)發(fā)表好文章。  回復(fù)  更多評論
            

          # re: 對 Workflow 架構(gòu)改進(jìn)的猜想 2008-03-28 14:48 wjywilliam
          我也是個(gè)菜鳥,但是曾經(jīng)在一個(gè)做workflow product的公司里面呆過一回,感覺作者DB部分應(yīng)該是數(shù)據(jù)庫的群集吧,不過數(shù)據(jù)量這么大,也確實(shí)厲害.
          第二部分,我同意你說的第一條,對于一些固定的business的flow來說,沒必要做dynamic form 即便dynamic genarate是你們product的一個(gè)功能,一個(gè)靜態(tài)的定制form的運(yùn)行速度絕對比dynamic form好很多  回復(fù)  更多評論
            

          主站蜘蛛池模板: 深圳市| 阿拉善右旗| 长宁区| 河曲县| 大理市| 永嘉县| 呼伦贝尔市| 晴隆县| 台湾省| 合江县| 龙江县| 兰坪| 乐都县| 汝南县| 阳高县| 蒙自县| 长沙县| 南昌县| 清原| 积石山| 罗源县| 泸定县| 航空| 济阳县| 巫溪县| 大化| 固镇县| 全州县| 丰宁| 若羌县| 宣武区| 和硕县| 教育| 广河县| 酒泉市| 犍为县| 湖南省| 运城市| 怀柔区| 化州市| 佛山市|