⑴ SaaS服務模式管理系統有哪些特性
SaaS服務模式管理系統的特性:
1、互聯網
SaaS服務通過互聯網瀏覽器或
WebServices/Web2.0程序連接的形式為用戶提供服務,使得SaaS應用具備了典型互聯網技術特點;另一方面,由於SaaS極大的縮短了用戶與SaaS提供商之間的時空距離,從而使得SaaS服務的營銷、交付與傳統軟體相比有著很大的不同。
2、多租戶
SaaS服務通常基於一套標准軟體系統為成百上千的不同客戶(又稱租戶)
提供服務。這要求SaaS服務要能夠支持不同租戶之間數據和配置的隔離,從而保證每個租戶數據的安全與隱私,以及用戶對諸如界面、業務邏輯、數據結構等的個性化需求。
3、服務特性
SaaS使得軟體以互聯網為載體的服務形式被客戶使用,所以服務合約的簽定、服務使用的計量、在線服務質量的保證、服務費用的收取等等問題都必須考慮。而這些問題通常是傳統軟體沒有考慮到的。
SaaS是Software-as-a-service(軟體即服務)。SaaS在業內的叫法是軟體運營,或稱軟營。是一種基於互聯網提供軟體服務的應用模式。一種隨著互聯網技術的發展和應用軟體的成熟,在21世紀開始興起的完全創新的軟體應用模式,是軟體科技發展的最新趨勢。
⑵ 微服務開發中的數據架構應該怎樣設計
前言
微服務是當前非常流行的技術框架,通過服務的小型化、原子化以及分布式架構的彈性伸縮和高可用性,可以實現業務之間的松耦合、業務的靈活調整組合以及系統的高可用性。為業務創新和業務持續提供了一個良好的基礎平台。本文分享在這種技術架構下的數據架構的設計思想以及設計要點,本文包括下面若干內容。
微服務技術框架中的多層數據架構設計
數據架構設計中的要點
要點1:數據易用性
要點2:主、副數據及數據解耦
要點3:分庫分表
要點4:多源數據適配
要點5:多源數據緩存
要點6:數據集市
為了容易理解,本文用一個簡化的銷售模型來闡述,如下圖。圖1顯示了客戶、賣家、商品、定價、訂單的關系(這里省略支付、物流等其他元素)。
圖1 銷售模型
在這個銷售模型中,賣家提供商品、制定價格,客戶選擇產品購買、形成銷售訂單。根據微服務的理念設計,可以劃分為客戶服務、賣家服務、商品服務、定價服務、訂單服務,以及公共服務(比如認證、許可權、通知等),如圖2所示。
圖9 數據緩存
要點6:數據集市
數據集市是一個很大的話題。當現有的數據不能簡單地通過幾個表數據關聯以及簡單加工後就可以供業務使用的時候,就需要考慮構建數據集市。數據集市以數據運用的觀點來分析加工數據,通過多源數據的導入、清洗、加工、視圖做成等一系列的數據操作後,為業務提供可用的、穩定的數據源。例如,對銷售分析中、什麼樣的客戶喜歡什麼樣的商品、價格對銷售金額的影響、銷售金額跟地區日期的關聯關系等多維度分析,就要用數據集市的概念,如圖10所示。
圖10 數據集市
數據承載著信息,好的數據架構設計會使業務系統變得更加流暢、更加容易理解和維護。本文只是總結一些在實際工程中的體會,供大家分享。如果有不足之處、也請大家補充、賜教。
(此文轉載至GitChat技術雜談)
⑶ Spring Boot 構建多租戶SaaS平台核心技術指南
1. 概述
筆者從2014年開始接觸SaaS(Software as a Service),即多租戶(或多承租)軟體應用平台;並一直從事相關領域的架構設計及研發工作。機緣巧合,在筆者本科畢業設計時完成了一個基於SaaS的高效財務管理平台的課題研究,從中收獲頗多。最早接觸SaaS時,國內相關資源匱乏,唯一有的參照資料是《互聯網時代的軟體革命:SaaS架構設計》(葉偉等著)一書。最後課題的實現是基於OSGI(Open Service Gateway Initiative)Java動態模塊化系統規范來實現的。
時至今日,五年的時間過去了,軟體開發的技術發生了巨大的改變,筆者所實現SaaS平台的技術棧也更新了好幾波,真是印證了那就話:「山重水盡疑無路,柳暗花明又一村」。基於之前走過的許多彎路和踩過的坑,以及近段時間有許多網友問我如何使用Spring Boot實現多租戶系統,決定寫一篇文章聊一聊關於SaaS的硬核技術。
說起SaaS,它只是一種軟體架構,並沒有多少神秘的東西,也不是什麼很難的系統,我個人的感覺,SaaS平台的難度在於商業上的運營,而非技術上的實現。就技術上來說,SaaS是這樣一種架構模式:它讓多個不同環境的用戶使用同一套應用程序,且保證用戶之間的數據相互隔離。現在想想看,這也有點共享經濟的味道在裡面。
筆者在這里就不再深入聊SaaS軟體成熟度模型和數據隔離方案對比的事情了。今天要聊的是使用Spring Boot快速構建獨立資料庫/共享資料庫獨立Schema的多租戶系統。我將提供一個SaaS系統最核心的技術實現,而其他的部分有興趣的朋友可以在此基礎上自行擴展。
2. 嘗試了解多租戶的應用場景
假設我們需要開發一個應用程序,並且希望將同一個應用程序銷售給N家客戶使用。在常規情況下,我們需要為此創建N個Web伺服器(Tomcat),N個資料庫(DB),並為N個客戶部署相同的應用程序N次。現在,如果我們的應用程序進行了升級或者做了其他任何的改動,那麼我們就需要更新N個應用程序同時還需要維護N台伺服器。接下來,如果業務開始增長,客戶由原來的N個變成了現在的N+M個,我們將面臨N個應用程序和M個應用程序版本維護,設備維護以及成本控制的問題。運維幾乎要哭死在機房了…
為了解決上述的問題,我們可以開發多租戶應用程序,我們可以根據當前用戶是誰,從而選擇對應的資料庫。例如,當請求來自A公司的用戶時,應用程序就連接A公司的資料庫,當請求來自B公司的用戶時,自動將資料庫切換到B公司資料庫,以此類推。從理論上將沒有什麼問題,但我們如果考慮將現有的應用程序改造成SaaS模式,我們將遇到第一個問題:如果識別請求來自哪一個租戶?如何自動切換數據源?
3. 維護、識別和路由租戶數據源
我們可以提供一個獨立的庫來存放租戶信息,如資料庫名稱、鏈接地址、用戶名、密碼等,這可以統一的解決租戶信息維護的問題。租戶的識別和路由有很多種方法可以解決,下面列舉幾個常用的方式:
解決了上述問題後,我們再來看看如何獲取客戶端傳入的租戶信息,以及在我們的業務代碼中如何使用租戶信息(最關鍵的是DataSources的問題)。
我們都知道,在啟動Spring Boot應用程序之前,就需要為其提供有關數據源的配置信息(有使用到資料庫的情況下),按照一開始的需求,有N個客戶需要使用我們的應用程序,我們就需要提前配置好N個數據源(多數據源),如果N<50,我認為我還能忍受,如果更多,這樣顯然是無法接受的。為了解決這一問題,我們需要藉助Hibernate 5提供的動態數據源特性,讓我們的應用程序具備動態配置客戶端數據源的能力。簡單來說,當用戶請求系統資源時,我們將用戶提供的租戶信息(tenantId)存放在ThreadLoacal中,緊接著獲取TheadLocal中的租戶信息,並根據此信息查詢單獨的租戶庫,獲取當前租戶的數據配置信息,然後藉助Hibernate動態配置數據源的能力,為當前請求設置數據源,最後之前用戶的請求。這樣我們就只需要在應用程序中維護一份數據源配置信息(租戶資料庫配置庫),其餘的數據源動態查詢配置。接下來,我們將快速的演示這一功能。
4. 項目構建
我們將使用Spring Boot 2.1.5版本來實現這一演示項目,首先你需要在Maven配置文件中加入如下的一些配置:
然後提供一個可用的配置文件,並加入如下的內容:
接下來,我們需要關閉Spring Boot自動配置數據源的功能,在項目主類上添加如下的設置:
最後,讓我們看看整個項目的結構:
5. 實現租戶數據源查詢模塊
我們將定義一個實體類存放租戶數據源信息,它包含了租戶名,資料庫連接地址,用戶名和密碼等信息,其代碼如下:
持久層我們將繼承JpaRepository介面,快速實現對數據源的CURD操作,同時提供了一個通過租戶名查找租戶數據源的介面,其代碼如下:
業務層提供通過租戶名獲取租戶數據源信息的服務(其餘的服務各位可自行添加):
接下來是配置自定義的數據源,其源碼如下:
在改配置類中,我們主要提供包掃描路徑,實體管理工程,事務管理器和數據源配置參數的配置。
6. 實現租戶業務模塊
在此小節中,租戶業務模塊我們僅提供一個用戶登錄的場景來演示SaaS的功能。其實體層、業務層和持久化層根普通的Spring Boot Web項目沒有什麼區別,你甚至感覺不到它是一個SaaS應用程序的代碼。
首先,創建一個用戶實體User,其源碼如下:
業務層提供了一個根據用戶名檢索用戶信息的服務,它將調用持久層的方法根據用戶名對租戶的用戶表進行檢索,如果找到滿足條件的用戶記錄,則返回用戶信息,如果沒有找到,則返回null;持久層和業務層的源碼分別如下:
7. 配置攔截器
我們需要提供一個租戶信息的攔截器,用以獲取租戶標識符,其源代碼和配置攔截器的源代碼如下:
8. 維護租戶標識信息
在這里,我們使用ThreadLocal來存放租戶標識信息,為動態設置數據源提供數據支持,該類提供了設置租戶標識、獲取租戶標識以及清除租戶標識三個靜態方法。其源碼如下:
9. 動態數據源切換
要實現動態數據源切換,我們需要藉助兩個類來完成,和。從它們的命名上就可以看出,一個負責解析租戶標識,一個負責提供租戶標識對應的租戶數據源信息。
首先,我們需要實現介面中的()和()方法,完成租戶標識的解析功能。實現類的源碼如下:
有了租戶標識符解析類之後,我們需要擴展租戶數據源提供類,實現從資料庫動態查詢租戶數據源信息,其源碼如下:
最後,我們還需要提供租戶業務模塊數據源配置,這是整個項目核心的地方,其代碼如下:
10. 應用測試
最後,我們通過一個簡單的登錄案例來測試本次課程中的SaaS應用程序,為此,需要提供一個Controller用於處理用戶登錄邏輯。在本案例中,沒有嚴格的對用戶密碼進行加密,而是使用明文進行比對,也沒有提供任何的許可權認證框架,知識單純的驗證SaaS的基本特性是否具備。登錄控制器代碼如下:
在啟動項目之前,我們需要為主數據源創建對應的資料庫和數據表,用於存放租戶數據源信息,同時還需要提供一個租戶業務模塊資料庫和數據表,用來存放租戶業務數據。一切准備就緒後,啟動項目,在瀏覽器中輸入:http://localhost:8080/login.html
在登錄窗口中輸入對應的租戶名,用戶名和密碼,測試是否能夠正常到達主頁。可以多增加幾個租戶和用戶,測試用戶是否正常切換到對應的租戶下。
總結