對 Workflow 架構改進的猜想
------ Jack 2008
開發 workflow 已經是兩年前的事了,那是我第一家公司的第一個有形產品,也是我主導開發的。在這里,真的要感謝以前的主管,使我從一個程序員爬到了技術主導的位置。
workflow 的項目背景是這樣的:公司是個集團公司,主產業是制造和電子,開發人員有幾百號,我們屬于第二個事業部,用這個系統的有管理層,業務層大約上萬人,每個月的數據量為 200多萬筆,這個產品只是內銷。就是在這樣的背景下公司組了 20 個人的團隊,在兩年的時間開發了 workflow 系統, 它的開發語言是 Java, 總體架構是 Struts+Hibernate+Spring, 有 J2EE 的部分,也有 J2SE 的部分,采用的標準是 WMfC.
當時數據庫只有一個(Oracle 數據庫),在單獨的服務器上,配置很高,Web 服務器也是單獨的高檔機,還有就是客戶端的 Application. 典型的三層架構。這樣的系統能夠有多大的吞吐量呢,性能如何能,可想而知。系統的性能沒有禁得住應用的考驗,于是我們反思了,從新考慮了系統架構。發現瓶頸在數據庫,不過那時我就離職了,在公司整整呆了 2年零6個月。
事隔這么久,只有猜想當時該如何如何。猜想 workflow 已經超負荷工作了,數據庫占了大量 CPU 資源, 系統沒有擴展性!猜想 workflow 以服務的方式加入了互聯網,用戶超過 1 個億。
從下面兩方面改進系統。
1. 數據庫層的架構改進:
l 第一個觀念就是數據的讀寫分開,比如用完全一樣的數據庫,一個主數據庫用來寫,其他從數據庫用來完成讀操作,隔段時間將寫數據庫同步更新到從數據庫中。
l 用戶表是個大表,超過一個億的資料,檢索更新速度很慢。于是把用戶表單獨放在一個數據庫服務器中,并且按照用戶的所在省份水平分割成多個表,每個表就有 300 多萬的數據,查詢可控制在 1 秒之內。
l 表單流量很大,每月上千萬筆。同樣,表單表按照功能分割到多個數據庫服務器中,每個數據庫中再按照表單類別水平分割。這樣在增加表單時,可達到服務器的線性擴展。
l Oracle 在分布式方面做得很好,可以充分利用這個優勢。
l 數據庫的緩存
2. 應用層的架構改進:
l 盡量做到動態網頁靜態化,比如在流程中跑的一個固化的表單不應該動態生成,而應該在提交表單時就做靜態化。
l 使用緩存。有些網頁,像首頁,可以學習百度首頁,緩存24小時。
l 做鏡像服務器
l 使用負載均衡技術,比如 DNS負載均衡,四層交換機負載技術等等很多現成的方案可遵循。
l 對系統局部模塊優化。不要自己設計模式,現有的模式很多,可以參考。
l 引入中間件技術,對源有系統 SOA 的觀念做集成和整合。比如整合 ERP, EIP,EPP等系統到 workflow中。
本人在系統架構方面經驗比較少,在系統分析方面做得工作比較多,請 blog 朋友多多指教
本博客為學習交流用,凡未注明引用的均為本人作品,轉載請注明出處,如有版權問題請及時通知。由于博客時間倉促,錯誤之處敬請諒解,有任何意見可給我留言,愿共同學習進步。