posts - 297,  comments - 1618,  trackbacks - 0

          應用系統的SaaS化的方案討論

          /阿蜜果

          日期/2012-11-26

          1SaaS的概念

          SaaSSoftware-as-a-service軟件即服務)的簡稱。SaaS在業內的叫法是軟件運營,或稱軟營。是一種基于互聯網提供軟件服務的應用模式。一種隨著互聯網技術的發展和應用軟件的成熟,在21世紀開始興起的完全創新的軟件應用模式,是軟件科技發展的最新趨勢。

          企業根據實際需要,向SaaS提供商租賃軟件服務。 SaaS 是一種軟件布局模型,其應用專為網絡交付而設計,便于用戶通過互聯網托管、部署及接入。 SaaS 應用軟件的價格通常為全包費用,囊括了通常的應用軟件許可證費、軟件維護費以及技術支持費,將其統一為每個用戶的月度租用費。

          2、應用系統的SaaS

          2.1 概述

                   近來有個應用系統需要實現SaaS化,而且時間進度要求很緊,于是乎,幾個同事一起想實現應用系統SaaS化的簡便方案,這個方案需要滿足以下兩個條件:

          1)實現每個租戶的業務數據信息的隔離(用戶表、業務信息表等);

          2)涉及到原系統的代碼改動盡可能的少。

          通過網上查詢資料以及討論,我想出使用第二種方式實現,但上司提出了第三種方式,提出來后,我汗顏了,雖然可能涉及到的代碼改動差不多,但在對表的管理上方便很多,看來跟他差得還不是一點半點呀!

          2.2 SaaS化的方案

          2.2.1 每個租戶一個獨立數據庫

          優點:不同租戶(一般指企業客戶)的數據物理分離,安全性很好。

          缺點:數據庫連接的利用效率不高,性能問題會很大。

                   系統將借由元數據(Metadata)來記錄哪一個數據庫屬于哪一個特定客戶,與此同時也可以部署一定的數據庫訪問策略來確保即使系統處于異常狀況下,客戶數據也不會被其它客戶意外訪問到。但是,這種數據模型的最大問題是對應的部署和維護成本非常高,硬件資源的消耗將明顯高于其它兩種方案,一臺服務器將只能支持有限數量的客戶。

          2.2.2 租戶使用同一數據庫,但使用不同的表

                   方案描述:應用系統的所有租戶使用相同的數據庫,但每個租戶的業務表是不同的,例如以唯一的租戶ID添加為表名前綴或后綴。

          在應用系統改造時,需要進行如下操作:

          1)在注冊租戶時,需要將所有與該租戶有關的表都建上,表名帶上租戶前綴或后綴;

          2)在對業務表進行操作的方法中,需要將租戶ID傳入,iBatisHibernate中都可以實現數據庫分表(動態表名映射),具體可參考iBatisHibernate數據庫分表(動態表名映射的實現方法,大家有興趣的話,可以按照這篇文章所說的,嘗試著實現一下。

          優點:相對比較容易實現,而且從數據擴展性而言,這種解決方案和獨立數據庫一樣,客戶可以相對自由地對其中的數據結構進行新增和修改。

          缺點:這種客戶獨立模式的方式比較適合應用在每個客戶擁有比較少的表數量的情況下,比如每個客戶只有100張表或更少。這種方式毫無疑問可以在每臺服務器上支持比獨立數據庫方式更多的客戶數量,減低了服務供應商的運營成本。

          2.2.3 租戶使用同一數據庫,有自己的數據庫用戶,各租戶表名相同,使用超級用戶訪問

          方案描述:應用系統的所有租戶使用相同的數據庫,但是使用數據庫超級管理員登錄,以前綴訪問不同的數據庫用戶的表,例如a.tbl_user_infob.tbl_user_info的表。

          在應用系統改造時,需要進行如下操作:

          1)在注冊租戶時,以數據庫超級管理員的身份創建數據庫用戶(例如ab等,并建立租戶與數據庫用戶之間的對應關系),并為該數據庫用戶建立所有與該租戶有關的表(例如tbl_user_infotbl_file_info等);

          2)在對業務表進行操作的方法中,需要將租戶ID傳入,iBatisHibernate中都可以實現數據庫分表(動態表名映射),具體可參考iBatisHibernate數據庫分表(動態表名映射的實現方法,這跟第2種方案是很相似的。

          這種方案的優缺點與第二種方案類似,但是卻多了一個很明顯的優點:表管理比較方便,使用租戶的數據庫用戶登錄時,只會看到與該租戶有關的表,所以該方案明顯好于第2種方式。

          路漫漫其修遠兮,吾將上下而求索。與想到第3種方案的同事差得還不是一點半點呢!

          3、參考文檔

          1SaaS模式_百度百科http://baike.baidu.com/view/2796435.htm

          2SaaS模式下數據擴展性的設計與實現

          http://cio.ccw.com.cn/hydt/htm2011/20110810_942292.shtml

          3iBatisHibernate數據庫分表(動態表名映射的實現方法

          http://lamblog.blog.163.com/blog/static/200724238201271383032932/

          posted on 2012-11-26 16:03 阿蜜果 閱讀(3771) 評論(0)  編輯  收藏 所屬分類: 解決方案
          <2012年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統分析與建模實戰  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2296332
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 拜城县| 康定县| 湟中县| 会昌县| 耒阳市| 沭阳县| 华池县| 登封市| 保山市| 正定县| 浮梁县| 南充市| 四川省| 峨山| 卓尼县| 鄂尔多斯市| 剑川县| 会同县| 阳朔县| 广东省| 黄平县| 镇平县| 兰考县| 平山县| 米林县| 正安县| 鄂托克前旗| 容城县| 阿坝县| 大同县| 平远县| 延津县| 霸州市| 桐梓县| 葵青区| 镇雄县| 刚察县| 临夏市| 策勒县| 中卫市| 陵水|