人生三苦:選擇,后悔,絕望.為了避免后兩項,所以才絞盡腦汁去做出明智的選擇。人人都無時無刻不面臨選擇.做軟件開發的,從初級,到中級,到高級,所掌握的知識和技術越來越多,面臨的選項越來越多,對選擇進行評估也越來越困難和復雜,一項選擇所造成的影響也越來越大.所以,做軟件做到架構師,就是和人生三苦之一的"選擇"整天打交道的職業.
對於互聯網應用網站架構師而言,性能優化是他工作的重中之中。可以這么說,如果不需要考慮性能優化,特別是在經費,人力和時間限制下進行性能優化,那么,在互聯網應用軟件開發中所遇到的許多問題都不是問題。性能優化到何處為止,采用什么方案,是架構師經常面對的選擇之一.如果性能優化不夠,那么,網站無法應對用戶負載,用戶會因為系統反應速度慢而流失,整個項目都可能失敗.再者,如果在性能出現問題后再去優化,那么就會面臨許多重復工作和軟件修改問題,系統越大,修改的工作量也越大.另一方面,也有可能過度追求性能優化,從而造成項目復雜度和開發工作量增大,使得項目完工時間延遲,造成商機貽誤的問題.所以,為了幫助架構師做出正確的選擇,應當有一些基本原則.
要為決定性能優化到何處為止定下指導原則,就必須對架構師進行性能優化的招數進行分析和分類,只有這樣,才能確定這些原則.通常,架構師進行性能優化的招數可以分為簡單招數和復雜招數,簡單招數包括,索引,算法,查詢優化,緩存,合並數據訪問調用從而減少對數據庫的訪問次數,等等,這些招數,通常會花費不多,又足夠有效,關於查詢優化所能產生的性能優化程度,可以參看"深度優化sql查詢, 提升性能一百倍是什么概念? "http://www.cnblogs.com/kakrat/archive/2010/12/29/1921125.html. 復雜招數呢?有表的垂直分割和水平分割(data partition),數據replication,transaction management優化,使用批處理和代理來代替在線實時處理,等等.所有這些復雜招數都會一定程度的增加軟件開發的復雜度,增加工作量.
為什么說這些復雜招數會增加工作量呢.舉例來說吧,transaction management優化.在這方面,可做的優化有,使用inline sql transaction,而不是client side transaction,使用auto commit transaction 模式,縮短由於跨語句transaction而造成的transacton lock延時,但是,這時,你就必須考慮到出現異常時transaction不完整而造成的數據不一致給系統造成的影響,這可能會導致編程復雜化。這種做法,在實現一些非關鍵業務(比如不涉及到金錢等)時也是一種選項。此外,對於分布式的transaction管理,有現成的系統性的方法,比如微軟的distributed transaction coordinator(dtc),使用起來也相當的簡單方便.但是,dtc因為是通用的解決方案,所以它不可能進行很多優化, dtc通常會使得性能下降一倍左右,如果要處理特別巨大的用戶負載,連這方面也可以進行優化,那就是不用這些通用的現成的解決方法,而是根據具體問題設計專門的方法,如果使用專門定制的transaction管理方法,還可以把性能提高50%左右,對於大系統,這也是很可觀的提升和節省.
有了對這些招數的分類,那么再根據項目的經費,人力和時間要求的情況,就可以比較容易做出選擇了.簡單的優化招數,應當盡量的使用,不會造成工作量的過多增加。復雜的優化方法,在經費人力時間緊張時,如果不是涉及最基本的數據,最常用的功能,應當盡量避免。