1. 程式人生 > >淺談SaaS應用開發的難度

淺談SaaS應用開發的難度

最近做SaaS應用的很多,這種模式是未來的一種趨勢,這種模式的最大好處就是雲端計算的好處--節約資源。網上有很多人覺得SaaS很簡單,就是一個多使用者租賃模式。這種認識也不能說不對,因為SaaS確實一般都採用多使用者租賃模式。但這種說法非常的不全面,是一種盲人摸象。而且很多人認為SaaS模式的架構非常簡單,那就只能說他沒有真正做過SaaS模式或者他們做的SaaS應用是一種非常低階的模式,根本談不上是雲端計算的範疇,就是一個把區域網的東西放到了公網而已。

作為一種雲端計算模型,一個典型的SaaS模式需要以下三種計算模型支撐:
1)分散式計算模型
      這是基本的模型,也是後兩種模型的基礎;現在非常火的Hadoop其實只是分散式計算模型中一種,而且並不是特別的複雜;
2)分散式資料儲存和訪問模型
      這種模型很多,GFS,HFS,TFS都屬於這類,當然一些分散式資料庫包括阿里的Ocean資料庫都屬於這一類;分散式資料庫訪問和存取模型是SaaS企業應用的基礎,對於企業級的應用底層資料節點不採用資料庫當然是可以的,但如果採用資料庫,好處也是非常多的,至少要簡單很多。現有的分散式資料庫對於SaaS應用,特別是SaaS企業應用來說採用GreenPlum這類資料庫並不是不可以,但需要根據你的SaaS應用的業務本身進行權衡(主要是資料分離方式和效率的問題)。特別是牽扯到關聯查詢的時候,對於一個按使用者分離和隔離的企業應用,如果資料節點採用關係資料庫,那麼80%的企業應用的關聯查詢都會落到一個節點中,查詢的效率會比較高。如果採用分散式資料庫,一般都很難做到這點,因為分散式資料庫處理這類查詢的時候,都需要把資料集中到一個節點進行處理,雖然可以採用一些策略來減少無效資料的傳輸,但往往效果不大。(分散式資料庫中的A表和B表並不一定在一個數據節點的),這也是我一直以來的觀點:對於分散式計算,通用往往代表著效率更低。我比較認同Google的GFS設計理念:面向應用設計介面。
3)分散式部署與運維模型
     作為雲端計算下的SaaS應用,必須是可以支撐橫向擴充套件(Scala out)的,而這些節點(包括應用節點和資料節點)的增加和管理完全靠人力去完成,基本是不可能的事情,因此只要是雲端計算模型下的SaaS應用,分散式部署與運維支撐模型就是必須的:應用程式節點的實時監控,管理和部署,資料節點的實時監控和部署,快取節點的監控,管理和部署,檔案伺服器的監控,管理和部署等等。

以上三種模型就構成了SaaS應用的基礎,但SaaS應用又有自己的特殊性,因為牽扯到商務邏輯、事務處理(高一致性和準確性)以及資料的整理和分離等,SaaS應用的分散式資料儲存和訪問往往不能簡單的採用已有的一些開源分散式系統,或者一些開源的分散式資料庫系統,因為在大型的SaaS應用中,資料的分割(分佈的基礎)往往也不能做到單一,而資料的分割又會影響資料訪問的路由策略。這就導致通用型的做法不太適合具體的需求。

SaaS的這種基礎實際上就已經非常具有技術含量了,而SaaS業務應用本身,在邏輯上就更難了,並不是訪問資料庫加上一個隔離欄位那麼簡單。一般SaaS系統除了基本的多使用者租賃(注意,設計SaaS的時候一定要以軟隔離為基礎,這樣可以做到最大化的自由,而且不會影響資料庫隔離和資料庫例項隔離的需求 )還會牽扯到線上許可,多時區,多語言,以及功能、頁面、流程的可配置。特別是更深層次的應用更會涉及到線上跨企業資源共享和流程協作的問題,處理這類問題會非常棘手。特別是SaaS線上企業級應用,你需要面對的問題會更加複雜(業務規則的分與合)。如果在做架構的時候,如果沒有考慮到這些問題,後面的噩夢會很多。甚至你可能玩不轉。

SaaS應用其實並不簡單,哪怕就是一個CRM線上應用,也是非常具有業務和技術含量的。根據我的分析,紛享銷客和銷售易雖然融了不少的資,但他們的系統架構還算不上真正意義下的雲端計算模式下的SaaS。金蝶,用友,速達的線上應用雖然沒有深入研究,但通過他們使用者的一些反饋,我感覺60%的可能性是偽雲端計算SaaS應用。當然,如果知道內幕的,可以告訴我。

SaaS企業應用涉及的點非常多,而且很多點之間是有關聯的,因此你必須在這些問題點的處理中不斷地進行平衡,進行取捨。比如,採用面向服務(SOA)的架構,在一定程度上是可以減少一些複雜性,但這樣一來也降低了應用系統的整體性,SOA的粒度和邊界的劃分就是非常重要的權衡點。

在進行企業SaaS應用架構的時候,最好先弄清以下幾個點:
1) 資料隔離和資料分佈的路由策略;
2) 需要做哪些業務,是否需要做使用者間進行資源共享和流程協作;
3) 如果需要資源共享和協作,那麼這個過程中的使用者資料歸屬問題;
4) 企業資料的規範性和統一性問題(這會涉及到參照,統計等後續一系列問題點);

......

很多企業喜歡利用面試的方式來偷師,用處其實並不是很大,SaaS應用的單個問題點都並不是很複雜,關鍵在於這些點放到一起的時候,你如何根據你自己的業務進行取捨才是關鍵,而這種東西,靠拉再多的人來面試都是解決不了問題的,原因非常簡單:不懂的人跟你講,你會被誤導,而真正懂的人給你講的也未必適合於你的應用,如果你結合你的問題去問別人,別人也未必是hellokitty。