電 話:18937133779
網(wǎng) 址:http://oaoy.cn
郵 箱:zboao@qq.com
SaaS服務模式管理系統(tǒng)的特性:
1、互聯(lián)網(wǎng)
SaaS服務通過互聯(lián)網(wǎng)瀏覽器或
WebServices/Web2.0程序連接的形式為用戶提供服務,使得SaaS應用具備了典型互聯(lián)網(wǎng)技術特點;另一方面,由于SaaS極大的縮短了用戶與SaaS提供商之間的時空距離,從而使得SaaS服務的營銷、交付與傳統(tǒng)軟件相比有著很大的不同。
2、多租戶
SaaS服務通?;谝惶讟藴受浖到y(tǒng)為成百上千的不同客戶(又稱租戶)
提供服務。這要求SaaS服務要能夠支持不同租戶之間數(shù)據(jù)和配置的隔離,從而保證每個租戶數(shù)據(jù)的安全與隱私,以及用戶對諸如界面、業(yè)務邏輯、數(shù)據(jù)結構等的個性化需求。
3、服務特性
SaaS使得軟件以互聯(lián)網(wǎng)為載體的服務形式被客戶使用,所以服務合約的簽定、服務使用的計量、在線服務質量的保證、服務費用的收取等等問題都必須考慮。而這些問題通常是傳統(tǒng)軟件沒有考慮到的。
SaaS是Software-as-a-service(軟件即服務)。SaaS在業(yè)內的叫法是軟件運營,或稱軟營。是一種基于互聯(lián)網(wǎng)提供軟件服務的應用模式。一種隨著互聯(lián)網(wǎng)技術的發(fā)展和應用軟件的成熟,在21世紀開始興起的完全創(chuàng)新的軟件應用模式,是軟件科技發(fā)展的最新趨勢。
SaaS即Software-as-a-Service(軟件即服務)是隨著互聯(lián)網(wǎng)技術的發(fā)展和應用軟件的成熟, 在21世紀開始興起的一種完全創(chuàng)新的軟件應用模式。
傳統(tǒng)模式下,廠商通過License將軟件產(chǎn)品部署到企業(yè)內部多個客戶終端實現(xiàn)交付。SaaS定義了一種新的交付方式,也使得軟件進一步回歸服務本質。
企業(yè)部署信息化軟件的本質是為了自身的運營管理服務,軟件的表象是一種業(yè)務流程的信息化,本質還是第一種服務模式,SaaS改變了傳統(tǒng)軟件服務的提供方式,減少本地部署所需的大量前期投入,進一步突出信息化軟件的服務屬性,或成為未來信息化軟件市場的主流交付模式。
互聯(lián)網(wǎng)特性及運用
一方面,SaaS服務通過互聯(lián)網(wǎng)瀏覽器或WebServices/Web2.0程序連接的形式為用戶提供服務,使得SaaS應用具備了典型互聯(lián)網(wǎng)技術特點;另一方面,由于SaaS極大地縮短了用戶與SaaS提供商之間的時空距離,從而使得SaaS服務的營銷、交付與傳統(tǒng)軟件相比有著很大的不同。
比如,SaaS軟件行業(yè)知名產(chǎn)品NetSuite所提供的在線ERP、在線CRM等模塊產(chǎn)品都是基于網(wǎng)絡的,這樣的優(yōu)勢在于不必投入任何硬件費用,也不用請專業(yè)的系統(tǒng)維護人員就能上網(wǎng),有瀏覽器就可以進行ERP、CRM系統(tǒng)的使用。快速的實施、便捷的使用、低廉的價格都有賴于SaaS產(chǎn)品的互聯(lián)網(wǎng)特性。
多重租賃(Multi-tenancy)特性
SaaS服務通常基于一套標準軟件系統(tǒng)為成百上千的不同客戶(又稱為租戶)提供服務。這要求SaaS服務能夠支持不同租戶之間數(shù)據(jù)和配置的隔離,從而保證每個租戶數(shù)據(jù)的安全與隱私,以及用戶對諸如界面、業(yè)務邏輯、數(shù)據(jù)結構等的個性化需求。由于SaaS同時支持多個租戶,每個租戶又有很多用戶,這對支撐軟件的基礎設施平臺的性能、穩(wěn)定性和擴展性提出很大挑戰(zhàn)。SaaS作為一種基于互聯(lián)網(wǎng)的軟件交付模式,優(yōu)化軟件大規(guī)模應用后的性能和運營成本是架構師的核心任務。
服務(Service)特性
SaaS使軟件以互聯(lián)網(wǎng)為載體的服務形式被客戶使用,所以很多服務合約的簽訂、服務使用的計量、在線服務質量的保證和服務費用的收取等問題都必須加以考慮。而這些問題通常是傳統(tǒng)軟件沒有考慮到的。
可擴展(Scalable)特性
可擴展性意味著最大限度地提高系統(tǒng)的并發(fā)性,更有效地使用系統(tǒng)資源。比如應用:優(yōu)化資源鎖的持久性,使用無狀態(tài)的進程,使用資源池來共享線和數(shù)據(jù)庫連接等關鍵資源,緩存參考數(shù)據(jù),為大型數(shù)據(jù)庫分區(qū)。
SaaS是Software-as-a-Service(軟件即服務)的簡稱。它是一種通過Internet提供軟件的模式,廠商將應用軟件統(tǒng)一部署在自己的服務器上,客戶可以根據(jù)自己實際需求,通過互聯(lián)網(wǎng)向廠商定購所需的應用軟件服務,按定購的服務多少和時間長短向廠商支付費用,并通過互聯(lián)網(wǎng)獲得廠商提供的服務。
對于廣大中小型企業(yè)來說,SaaS是采用先進技術實施信息化的最好途徑。但SaaS絕不僅僅適用于中小型企業(yè),所有規(guī)模的企業(yè)都可以從SaaS中獲利。
SaaS的特性:
1、互聯(lián)網(wǎng)特性
一方面,SaaS服務通過互聯(lián)網(wǎng)瀏覽器或WebServices/Web2.0程序連接的形式為用戶提供服務,使得SaaS應用具備了典型互聯(lián)網(wǎng)技術特點;另一方面,由于SaaS極大地縮短了用戶與SaaS提供商之間的時空距離,從而使得SaaS服務的營銷、交付與傳統(tǒng)軟件相比有著很大的不同。
比如,SaaS軟件行業(yè)知名產(chǎn)品NetSuite所提供的在線ERP、在線CRM等模塊產(chǎn)品都是基于網(wǎng)絡的,這樣的優(yōu)勢在于不必投入任何硬件費用,也不用請專業(yè)的系統(tǒng)維護人員就能上網(wǎng),有瀏覽器就可以進行ERP、CRM系統(tǒng)的使用??焖俚膶嵤⒈憬莸氖褂?、低廉的價格都有賴于SaaS產(chǎn)品的互聯(lián)網(wǎng)特性。
2、多重租賃(Multi-tenancy)特性
SaaS服務通?;谝惶讟藴受浖到y(tǒng)為成百上千的不同客戶(又稱為租戶)提供服務。這要求SaaS服務能夠支持不同租戶之間數(shù)據(jù)和配置的隔離,從而保證每個租戶數(shù)據(jù)的安全與隱私,以及用戶對諸如界面、業(yè)務邏輯、數(shù)據(jù)結構等的個性化需求。
由于SaaS同時支持多個租戶,每個租戶又有很多用戶,這對支撐軟件的基礎設施平臺的性能、穩(wěn)定性和擴展性提出很大挑戰(zhàn)。SaaS作為一種基于互聯(lián)網(wǎng)的軟件交付模式,優(yōu)化軟件大規(guī)模應用后的性能和運營成本是架構師的核心任務。
3、服務(Service)特性
SaaS使軟件以互聯(lián)網(wǎng)為載體的服務形式被客戶使用,所以很多服務合約的簽訂、服務使用的計量、在線服務質量的保證和服務費用的收取等問題都必須加以考慮。而這些問題通常是傳統(tǒng)軟件沒有考慮到的。
4、可擴展(Scalable)特性
可擴展性意味著最大限度地提高系統(tǒng)的并發(fā)性,更有效地使用系統(tǒng)資源。比如應用:優(yōu)化資源鎖的持久性,使用無狀態(tài)的進程,使用資源池來共享線和數(shù)據(jù)庫連接等關鍵資源,緩存參考數(shù)據(jù),為大型數(shù)據(jù)庫分區(qū)。
以上內容參考:百度百科——saas
期SAAS的優(yōu)勢越來越明顯使得SAAS的應用越來越火,很多SAAS公司在創(chuàng)建企業(yè)級別的SAAS系統(tǒng),SAAS要實現(xiàn)它的優(yōu)勢就要在SAAS設計時做好注意事項,避免為SAAS后期帶來麻煩。隨著企業(yè)的去求不斷增大SAAS的可擴展性要強,因此在SAAS在設計之初就要為后期的二次開發(fā)以及升級做好準備。那么下面介紹下:SAAS設計有哪些注意事項呢?
SAAS設計采用分層設計
SAAS系統(tǒng)分層為租戶識別>應用層>數(shù)據(jù)訪問層>緩存層>數(shù)據(jù)庫,一般的業(yè)務代碼寫在應用層,租戶識別可以用SPRING攔截器通過THREADLOCAL傳遞給后端,數(shù)據(jù)庫、緩存層數(shù)據(jù)設置對于應用層透明。程序員在寫代碼的時候只關心業(yè)務邏輯,不擔心多租戶的問題。
SAAS設計數(shù)據(jù)隔離要透明
在數(shù)據(jù)庫訪問層對SQL進行改寫,在連接池根據(jù)TENATNCONTEXT改寫SQL這樣做好處是:程序員最多把系統(tǒng)搞DOWN了也不至于信息串了互相泄露;將來做分表分庫也很方便上層應用不用修改。
SAAS設計租戶識別方案
通過URL識別租戶:系統(tǒng)給租戶生成一個隨機的三級域名,如果用戶想使用自己的域名,可以在CNAME到我們生成的三級域名,管理系統(tǒng)綁定的域名、登錄名判別租戶。
SAAS設計租戶管理系統(tǒng)
SAAS系統(tǒng)是必須考慮計費系統(tǒng)和租戶控制系統(tǒng)。這個系統(tǒng)需要都是獨立設計。比如用戶選購的模塊、每月費用、用戶可創(chuàng)建的用戶名數(shù)、計費到期郵件提醒等功能。
SAAS設計定制化開發(fā)
SAAS的優(yōu)勢在于一套系統(tǒng)多人使用,定制化開發(fā)盡可能分系統(tǒng)、分模塊去做。然后通過控制臺中配置不同租戶訂購不同模塊并在前端頁面上顯示,不同的子系統(tǒng)需要分開部署,新功能盡量做的獨立可以配置。
SAAS設計灰度升級
SAAS付費企業(yè)用戶對系統(tǒng)問題一般比較敏感,為了減少升級出現(xiàn)問題的影響范圍一般都采用灰度升級策略。
以上是對"SAAS設計有哪些注意事項"的介紹,SAAS設計為滿足一套系統(tǒng)多用戶應用,且滿足每個用戶的個性化需求,時時提供SAAS系統(tǒng)新功能而進行SAAS系統(tǒng)升級,SAAS系統(tǒng)升級時不影響用戶的正常使用,因此在做SAAS設計一定要做好以上注意事項。
SaaS,Software as a service,就是軟件即服務。
SaaS平臺就是為了解決特定行業(yè)或者企業(yè)特定問題而針對性開發(fā)的軟件系統(tǒng),比如快遞行業(yè)的物流管理系統(tǒng)、餐飲行業(yè)的點餐系統(tǒng)、超市的收銀系統(tǒng)、生產(chǎn)型企業(yè)的ERP系統(tǒng)、財務管理系統(tǒng)等。
企業(yè)機構能通過SaaS進行產(chǎn)品部署的優(yōu)勢:
1、降低企業(yè)研發(fā)及維護成本
通過SaaS進行產(chǎn)品搭建,企業(yè)機構不再需要購買任何硬件,只需要剛開始的時候進行簡單的注冊即可。企業(yè)無需再配備IT方面的專業(yè)技術人員,同時又能得到最新的技術應用,滿足企業(yè)對信息管理的需求。
2、靈活可控的部署方案
通過SaaS技術服務來進行產(chǎn)品部署,企業(yè)機構可根據(jù)實際需求來靈活使用各種產(chǎn)品功能,并且這些功能全由技術服務商來進行維護和更新,企業(yè)機構無需擔憂其后續(xù)的更新優(yōu)化服務。
3、穩(wěn)定高效、安全有保障
在SaaS云計算服務模式中,企業(yè)數(shù)據(jù)主要存儲在SaaS供應商的數(shù)據(jù)中心。因為有技術平臺集中統(tǒng)一的存儲、備份、防火墻、運營監(jiān)控管理和專業(yè)強大的運維團隊,企業(yè)的數(shù)據(jù)安全更有保障。
4、更優(yōu)質的使用體驗
與傳統(tǒng)的軟件外包不一樣的是,SaaS技術服務是一個持續(xù)提供優(yōu)質體驗的服務過程,旨在可以與客戶更進一步的溝通交流,給予客戶更優(yōu)質的使用體驗。
1. 概述
筆者從2014年開始接觸SaaS(Software as a Service),即多租戶(或多承租)軟件應用平臺;并一直從事相關領域的架構設計及研發(fā)工作。機緣巧合,在筆者本科畢業(yè)設計時完成了一個基于SaaS的高效財務管理平臺的課題研究,從中收獲頗多。最早接觸SaaS時,國內相關資源匱乏,唯一有的參照資料是《互聯(lián)網(wǎng)時代的軟件革命:SaaS架構設計》(葉偉等著)一書。最后課題的實現(xiàn)是基于OSGI(Open Service Gateway Initiative)Java動態(tài)模塊化系統(tǒng)規(guī)范來實現(xiàn)的。
時至今日,五年的時間過去了,軟件開發(fā)的技術發(fā)生了巨大的改變,筆者所實現(xiàn)SaaS平臺的技術棧也更新了好幾波,真是印證了那就話:“山重水盡疑無路,柳暗花明又一村”?;谥白哌^的許多彎路和踩過的坑,以及近段時間有許多網(wǎng)友問我如何使用Spring Boot實現(xiàn)多租戶系統(tǒng),決定寫一篇文章聊一聊關于SaaS的硬核技術。
說起SaaS,它只是一種軟件架構,并沒有多少神秘的東西,也不是什么很難的系統(tǒng),我個人的感覺,SaaS平臺的難度在于商業(yè)上的運營,而非技術上的實現(xiàn)。就技術上來說,SaaS是這樣一種架構模式:它讓多個不同環(huán)境的用戶使用同一套應用程序,且保證用戶之間的數(shù)據(jù)相互隔離。現(xiàn)在想想看,這也有點共享經(jīng)濟的味道在里面。
筆者在這里就不再深入聊SaaS軟件成熟度模型和數(shù)據(jù)隔離方案對比的事情了。今天要聊的是使用Spring Boot快速構建獨立數(shù)據(jù)庫/共享數(shù)據(jù)庫獨立Schema的多租戶系統(tǒng)。我將提供一個SaaS系統(tǒng)最核心的技術實現(xiàn),而其他的部分有興趣的朋友可以在此基礎上自行擴展。
2. 嘗試了解多租戶的應用場景
假設我們需要開發(fā)一個應用程序,并且希望將同一個應用程序銷售給N家客戶使用。在常規(guī)情況下,我們需要為此創(chuàng)建N個Web服務器(Tomcat),N個數(shù)據(jù)庫(DB),并為N個客戶部署相同的應用程序N次?,F(xiàn)在,如果我們的應用程序進行了升級或者做了其他任何的改動,那么我們就需要更新N個應用程序同時還需要維護N臺服務器。接下來,如果業(yè)務開始增長,客戶由原來的N個變成了現(xiàn)在的N+M個,我們將面臨N個應用程序和M個應用程序版本維護,設備維護以及成本控制的問題。運維幾乎要哭死在機房了…
為了解決上述的問題,我們可以開發(fā)多租戶應用程序,我們可以根據(jù)當前用戶是誰,從而選擇對應的數(shù)據(jù)庫。例如,當請求來自A公司的用戶時,應用程序就連接A公司的數(shù)據(jù)庫,當請求來自B公司的用戶時,自動將數(shù)據(jù)庫切換到B公司數(shù)據(jù)庫,以此類推。從理論上將沒有什么問題,但我們如果考慮將現(xiàn)有的應用程序改造成SaaS模式,我們將遇到第一個問題:如果識別請求來自哪一個租戶?如何自動切換數(shù)據(jù)源?
3. 維護、識別和路由租戶數(shù)據(jù)源
我們可以提供一個獨立的庫來存放租戶信息,如數(shù)據(jù)庫名稱、鏈接地址、用戶名、密碼等,這可以統(tǒng)一的解決租戶信息維護的問題。租戶的識別和路由有很多種方法可以解決,下面列舉幾個常用的方式:
解決了上述問題后,我們再來看看如何獲取客戶端傳入的租戶信息,以及在我們的業(yè)務代碼中如何使用租戶信息(最關鍵的是DataSources的問題)。
我們都知道,在啟動Spring Boot應用程序之前,就需要為其提供有關數(shù)據(jù)源的配置信息(有使用到數(shù)據(jù)庫的情況下),按照一開始的需求,有N個客戶需要使用我們的應用程序,我們就需要提前配置好N個數(shù)據(jù)源(多數(shù)據(jù)源),如果N<50,我認為我還能忍受,如果更多,這樣顯然是無法接受的。為了解決這一問題,我們需要借助Hibernate 5提供的動態(tài)數(shù)據(jù)源特性,讓我們的應用程序具備動態(tài)配置客戶端數(shù)據(jù)源的能力。簡單來說,當用戶請求系統(tǒng)資源時,我們將用戶提供的租戶信息(tenantId)存放在ThreadLoacal中,緊接著獲取TheadLocal中的租戶信息,并根據(jù)此信息查詢單獨的租戶庫,獲取當前租戶的數(shù)據(jù)配置信息,然后借助Hibernate動態(tài)配置數(shù)據(jù)源的能力,為當前請求設置數(shù)據(jù)源,最后之前用戶的請求。這樣我們就只需要在應用程序中維護一份數(shù)據(jù)源配置信息(租戶數(shù)據(jù)庫配置庫),其余的數(shù)據(jù)源動態(tài)查詢配置。接下來,我們將快速的演示這一功能。
4. 項目構建
我們將使用Spring Boot 2.1.5版本來實現(xiàn)這一演示項目,首先你需要在Maven配置文件中加入如下的一些配置:
然后提供一個可用的配置文件,并加入如下的內容:
接下來,我們需要關閉Spring Boot自動配置數(shù)據(jù)源的功能,在項目主類上添加如下的設置:
最后,讓我們看看整個項目的結構:
5. 實現(xiàn)租戶數(shù)據(jù)源查詢模塊
我們將定義一個實體類存放租戶數(shù)據(jù)源信息,它包含了租戶名,數(shù)據(jù)庫連接地址,用戶名和密碼等信息,其代碼如下:
持久層我們將繼承JpaRepository接口,快速實現(xiàn)對數(shù)據(jù)源的CURD操作,同時提供了一個通過租戶名查找租戶數(shù)據(jù)源的接口,其代碼如下:
業(yè)務層提供通過租戶名獲取租戶數(shù)據(jù)源信息的服務(其余的服務各位可自行添加):
接下來是配置自定義的數(shù)據(jù)源,其源碼如下:
在改配置類中,我們主要提供包掃描路徑,實體管理工程,事務管理器和數(shù)據(jù)源配置參數(shù)的配置。
6. 實現(xiàn)租戶業(yè)務模塊
在此小節(jié)中,租戶業(yè)務模塊我們僅提供一個用戶登錄的場景來演示SaaS的功能。其實體層、業(yè)務層和持久化層根普通的Spring Boot Web項目沒有什么區(qū)別,你甚至感覺不到它是一個SaaS應用程序的代碼。
首先,創(chuàng)建一個用戶實體User,其源碼如下:
業(yè)務層提供了一個根據(jù)用戶名檢索用戶信息的服務,它將調用持久層的方法根據(jù)用戶名對租戶的用戶表進行檢索,如果找到滿足條件的用戶記錄,則返回用戶信息,如果沒有找到,則返回null;持久層和業(yè)務層的源碼分別如下:
7. 配置攔截器
我們需要提供一個租戶信息的攔截器,用以獲取租戶標識符,其源代碼和配置攔截器的源代碼如下:
8. 維護租戶標識信息
在這里,我們使用ThreadLocal來存放租戶標識信息,為動態(tài)設置數(shù)據(jù)源提供數(shù)據(jù)支持,該類提供了設置租戶標識、獲取租戶標識以及清除租戶標識三個靜態(tài)方法。其源碼如下:
9. 動態(tài)數(shù)據(jù)源切換
要實現(xiàn)動態(tài)數(shù)據(jù)源切換,我們需要借助兩個類來完成,CurrentTenantIdentifierResolver和AbstractDataSourceBasedMultiTenantConnectionProviderImpl。從它們的命名上就可以看出,一個負責解析租戶標識,一個負責提供租戶標識對應的租戶數(shù)據(jù)源信息。
首先,我們需要實現(xiàn)CurrentTenantIdentifierResolver接口中的resolveCurrentTenantIdentifier()和validateExistingCurrentSessions()方法,完成租戶標識的解析功能。實現(xiàn)類的源碼如下:
有了租戶標識符解析類之后,我們需要擴展租戶數(shù)據(jù)源提供類,實現(xiàn)從數(shù)據(jù)庫動態(tài)查詢租戶數(shù)據(jù)源信息,其源碼如下:
最后,我們還需要提供租戶業(yè)務模塊數(shù)據(jù)源配置,這是整個項目核心的地方,其代碼如下:
10. 應用測試
最后,我們通過一個簡單的登錄案例來測試本次課程中的SaaS應用程序,為此,需要提供一個Controller用于處理用戶登錄邏輯。在本案例中,沒有嚴格的對用戶密碼進行加密,而是使用明文進行比對,也沒有提供任何的權限認證框架,知識單純的驗證SaaS的基本特性是否具備。登錄控制器代碼如下:
在啟動項目之前,我們需要為主數(shù)據(jù)源創(chuàng)建對應的數(shù)據(jù)庫和數(shù)據(jù)表,用于存放租戶數(shù)據(jù)源信息,同時還需要提供一個租戶業(yè)務模塊數(shù)據(jù)庫和數(shù)據(jù)表,用來存放租戶業(yè)務數(shù)據(jù)。一切準備就緒后,啟動項目,在瀏覽器中輸入:
在登錄窗口中輸入對應的租戶名,用戶名和密碼,測試是否能夠正常到達主頁。可以多增加幾個租戶和用戶,測試用戶是否正常切換到對應的租戶下。
總結