SaaS簡(jiǎn)介
SaaS是Software-as-a-Service(軟件即服務(wù))的簡(jiǎn)稱,“軟件即服務(wù)”?是不是有點(diǎn)拗口?其實(shí)你就理解成為“按需租用別人提供的軟件服務(wù)”就可以了,它是一種軟件交付模式。
SaaS這個(gè)說(shuō)法是區(qū)別于以往軟件購(gòu)買(mǎi)和交付方式而提出來(lái)的。在以前,你公司要使用一款軟件來(lái)管理財(cái)務(wù)記賬的時(shí)候,那你要向軟件提供公司說(shuō)明需求、支付購(gòu)買(mǎi)軟件的錢(qián)并提供安裝軟件的硬件環(huán)境,然后軟件公司就會(huì)上門(mén)安裝調(diào)試軟件,調(diào)試完后就可以正式投入使用了。這里有一個(gè)很顯著的特點(diǎn)是,軟件都安裝在你指定的地方,你擁有100%的管控權(quán),相應(yīng)的你后續(xù)還需要繼續(xù)投入人員和資源維護(hù)系統(tǒng)的正常運(yùn)行。
SaaS(軟件即服務(wù))的模式就不一樣了,在客戶還沒(méi)有來(lái)之前,軟件提供公司就自己提服務(wù)器、數(shù)據(jù)庫(kù)等硬件,把軟件安裝發(fā)布好,作為一個(gè)軟件使用方就變得輕松許多,一上來(lái)就可以直接體驗(yàn)了,體驗(yàn)之后,你覺(jué)得哪些功能合適你的,就挑出來(lái),按月支付支付比較便宜的費(fèi)用就可以正式使用了。后續(xù)的升級(jí)、維護(hù)也由軟件公司來(lái)負(fù)責(zé),把所有的軟件相關(guān)工作都?xì)w類準(zhǔn)備好了,你直接過(guò)來(lái)挑自己需要的用就好了,其他的用戶過(guò)來(lái)也是一樣。“按需付費(fèi)”是SaaS的一個(gè)非常重要的特性。在這種模式下,軟件是別人的,發(fā)布在別人的服務(wù)器上,數(shù)據(jù)也需要保存在別人的服務(wù)器上,安全和信任一直是個(gè)令人擔(dān)憂的問(wèn)題。
業(yè)內(nèi)有一個(gè)很恰當(dāng)?shù)谋扔?,一開(kāi)始的時(shí)候,各家都自己挖井抽水蓄水,挖井抽水蓄水的技術(shù)是有專業(yè)的公司提供,但總的來(lái)說(shuō)喝水這個(gè)事情是自家管自家的,這是傳統(tǒng)的軟件的供水模式。SaaS模式下,挖井抽水蓄水凈水修水管這些工作對(duì)使用方來(lái)說(shuō)都是透明的,你有需要的時(shí)候就打開(kāi)水龍頭取水就OK了,然后每月自來(lái)水公司會(huì)過(guò)來(lái)跟你結(jié)算。同樣的,優(yōu)缺點(diǎn)很明顯,優(yōu)點(diǎn)是按需用水省事了,成本變低了,缺點(diǎn)是水由水務(wù)公司完成控制供水穩(wěn)定性、供水質(zhì)量取決于水務(wù)公司實(shí)力。
SaaS平臺(tái)基礎(chǔ)分層架構(gòu)
Saas系統(tǒng)分層:展現(xiàn)層>調(diào)度層(租戶識(shí)別)>業(yè)務(wù)層>數(shù)據(jù)層
呈現(xiàn)層
saas平臺(tái)架構(gòu)的呈現(xiàn)層可以使用的客戶端可能都瀏覽器或本地客戶端。如果是瀏覽器則需要Web界面技術(shù)、交互技術(shù)等技術(shù)(如:HTMl5技術(shù)、CSS3技術(shù)、Ajax技術(shù)等)的支持,如果是軟件客戶端則需要遠(yuǎn)程桌面技術(shù)、軟件交互技術(shù)等技術(shù)支持。
調(diào)度層(租戶識(shí)別)
saas平臺(tái)架構(gòu)的調(diào)度層體現(xiàn)分布式系統(tǒng)的特性之一。
調(diào)度層可包含一個(gè)配置中心,其中存放租戶租賃服務(wù)的相關(guān)服務(wù)配置信息以及版本號(hào),調(diào)度層首先認(rèn)證并識(shí)別租戶,根據(jù)租戶在配置中心的配置信息,向業(yè)務(wù)層發(fā)送用戶請(qǐng)求(租戶識(shí)別可以用spring攔截器實(shí)現(xiàn),然后使用ThreadLocal傳遞給業(yè)務(wù)層),根據(jù)業(yè)務(wù)處理器的負(fù)載、業(yè)務(wù)特征進(jìn)行合理的調(diào)度。通過(guò)應(yīng)用這樣的架構(gòu)SaaS平臺(tái)可以橫向擴(kuò)展。此外在存儲(chǔ)、緩存等方面為了滿足平臺(tái)的橫向擴(kuò)展需求,調(diào)度層也必須具有良好的可擴(kuò)展性
業(yè)務(wù)層
saas平臺(tái)架構(gòu)的業(yè)務(wù)層負(fù)責(zé)接收調(diào)度層轉(zhuǎn)發(fā)過(guò)來(lái)的請(qǐng)求,而且還要通過(guò)對(duì)接受到的請(qǐng)求執(zhí)行真正的業(yè)務(wù)邏輯。一般來(lái)說(shuō)業(yè)務(wù)邏輯的執(zhí)行使用一臺(tái)服務(wù)器就夠了。因此業(yè)務(wù)層實(shí)際是由一排對(duì)等的服務(wù)器組成的,每臺(tái)服務(wù)器都執(zhí)行相同的業(yè)務(wù)邏輯。
數(shù)據(jù)庫(kù)和緩存層對(duì)業(yè)務(wù)層應(yīng)該是透明的。程序員在寫(xiě)代碼的時(shí)候,只關(guān)心業(yè)務(wù)邏輯,不應(yīng)該擔(dān)心多租戶的問(wèn)題。
數(shù)據(jù)層
saas平臺(tái)架構(gòu)的數(shù)據(jù)庫(kù)集群用于處理存儲(chǔ)關(guān)系性很強(qiáng)并且對(duì)事務(wù)性要求很高的業(yè)務(wù)數(shù)據(jù),這類數(shù)據(jù)目前還要用傳統(tǒng)的數(shù)據(jù)庫(kù)集群技術(shù)來(lái)解決,saas平臺(tái)架構(gòu)的數(shù)據(jù)庫(kù)集群主要是根據(jù)業(yè)務(wù)特征制定數(shù)據(jù)拆分方案。同時(shí)分布式數(shù)據(jù)庫(kù)用于存放海量但關(guān)系性不強(qiáng)的數(shù)據(jù)(如:用戶的操作日志等)。
saas核心組件
1、安全組件
在SaaS產(chǎn)品中,系統(tǒng)安全永遠(yuǎn)是第一位需要考慮的事情,如何保障租戶數(shù)據(jù)的安全,是你首要的事情。這如同銀行首選需要保障儲(chǔ)戶資金安全一樣。安全組件就是統(tǒng)一的對(duì)SaaS產(chǎn)品進(jìn)行安全防護(hù),保障系統(tǒng)數(shù)據(jù)安全。
2、數(shù)據(jù)隔離組件
安全組件解決了用戶數(shù)據(jù)安全可靠的問(wèn)題,但數(shù)據(jù)往往還需要解決隱私問(wèn)題,各企業(yè)之間的數(shù)據(jù)必須相互不可見(jiàn),即相互隔離。在SaaS產(chǎn)品中,如何識(shí)別、區(qū)分、隔離多個(gè)租戶的數(shù)據(jù)是你在實(shí)施SaaS軟件架構(gòu)設(shè)計(jì)時(shí)需要考慮的第二個(gè)問(wèn)題。
3、可配置組件
盡管SaaS產(chǎn)品在設(shè)計(jì)之初就考慮了大多數(shù)通用的功能,讓租戶開(kāi)箱即用,但任然有為數(shù)不少的租戶需要定制服務(wù)自身業(yè)務(wù)需求的配置項(xiàng),如UI布局、主題、標(biāo)識(shí)(Logo)等信息。正因?yàn)闊o(wú)法抽象出一個(gè)完全通用的應(yīng)用程序,所以在SaaS產(chǎn)品中,你需要提供一個(gè)可用于自定義配置的組件。
4、可擴(kuò)展組件
隨著SaaS產(chǎn)品業(yè)務(wù)和租戶數(shù)量的增長(zhǎng),原有的服務(wù)器配置將無(wú)法繼續(xù)滿足新的需求,系統(tǒng)性能將會(huì)與業(yè)務(wù)量和用戶量成反比。此時(shí),SaaS產(chǎn)品應(yīng)該具備水平擴(kuò)展的能力。如通過(guò)網(wǎng)絡(luò)負(fù)載均衡其和容器技術(shù),在多個(gè)服務(wù)器上部署多個(gè)軟件運(yùn)行示例并提供相同的軟件服務(wù),以此實(shí)現(xiàn)水平擴(kuò)展SaaS產(chǎn)品的整體服務(wù)性能。為了實(shí)現(xiàn)可擴(kuò)展能力,就需要SaaS展示層的代碼與業(yè)務(wù)邏輯部分的代碼進(jìn)行分離,兩者獨(dú)立部署。
例如使用VUE+微服務(wù)構(gòu)建前后端分離且可水平進(jìn)行擴(kuò)展的分布式SaaS應(yīng)用產(chǎn)品。對(duì)于可擴(kuò)展,還有另外一種方式,即垂直擴(kuò)展,其做法比較簡(jiǎn)單,也比較粗暴:通過(guò)增加單臺(tái)服務(wù)器的配置,如購(gòu)買(mǎi)性能更好的CPU、存儲(chǔ)更大的內(nèi)存條、增大帶寬等措施,讓服務(wù)器能夠處理更多的用戶請(qǐng)求。但此做法對(duì)于提升產(chǎn)品性能沒(méi)有質(zhì)的改變,且成本很高。
5、0停機(jī)時(shí)間升級(jí)產(chǎn)品
以往的軟件在升級(jí)或者修復(fù)Bug是,都需要將運(yùn)行的程序脫機(jī)一段時(shí)間,等待升級(jí)或修復(fù)工作完成后,再重新啟動(dòng)應(yīng)用程序。而SaaS產(chǎn)品則需要全天候保障服務(wù)的可用性。這就需要你考慮如何實(shí)現(xiàn)在不重啟原有應(yīng)用程序的情況下,完成應(yīng)用程序的升級(jí)修復(fù)工作。
6、多租戶組件
要將原有產(chǎn)品SaaS化,就必須提供多租戶組件,多租戶組件是衡量一個(gè)應(yīng)用程序是否具備SaaS服務(wù)能力的重要指標(biāo)之一。SaaS產(chǎn)品需要同時(shí)容納多個(gè)租戶的數(shù)據(jù),同時(shí)還需要保證各租戶之間的數(shù)據(jù)不會(huì)相互干擾,保證租戶中的用戶能夠按期望索引到正確的數(shù)據(jù),多租戶組件是你必須要解決的一個(gè)問(wèn)題。其余的組件都將圍繞此組件展開(kāi)各自的業(yè)務(wù)。
SaaS成熟度模型分級(jí)
Level1:定制開(kāi)發(fā),每次新增一個(gè)客戶,都會(huì)新增軟件的一個(gè)實(shí)例。
Level2:可配置,所有客戶都運(yùn)行在軟件的同一個(gè)版本上,而且任何的定制化都通過(guò)修改配置來(lái)實(shí)現(xiàn)。
Level3:高性能的多租戶架構(gòu)(多租戶[multi-tenant]、高層建筑[Highrise]),所有的客戶都已經(jīng)可以在軟件的同一個(gè)版本上運(yùn)行了,而且他們都在同一個(gè)“實(shí)例”上運(yùn)行。
Level4:可伸縮的多租戶架構(gòu)(多租戶,擴(kuò)建[Build-Out]),此時(shí)你已經(jīng)擁有了多租戶、單一版本的軟件模型。不過(guò)你還是可以通過(guò)硬件擴(kuò)展(scale-out)的方式來(lái)進(jìn)行擴(kuò)充。
多租戶數(shù)據(jù)存儲(chǔ)方案
a.隔離數(shù)據(jù)庫(kù);
b.共享數(shù)據(jù)庫(kù),隔離數(shù)據(jù)結(jié)構(gòu);
c.共享數(shù)據(jù)結(jié)構(gòu),tenantid字段隔離(推薦);
注意的問(wèn)題:數(shù)據(jù)隔離要透明
saas系統(tǒng)說(shuō)起來(lái)很簡(jiǎn)單,任何系統(tǒng)似乎加個(gè)tenant_id(租戶id)就變成saas系統(tǒng)了。
比如原來(lái)的用戶登錄是:
select username,password from users where email='abc@qq.com'
改成
select username,password from users where email='abc@qq.com'and tenant_id=1;
對(duì)于復(fù)雜業(yè)務(wù)的saas系統(tǒng),這樣做法非常危險(xiǎn),而且開(kāi)發(fā)效率很低。你想想如果那個(gè)程序員寫(xiě)sql時(shí)候忘了加“and tenant_id=1”.結(jié)果不堪設(shè)想。
比較好做法是在數(shù)據(jù)庫(kù)訪問(wèn)層對(duì)SQL進(jìn)行改寫(xiě)。
TenantContext.exec("select username,password from users where email='abc@qq.com'");
在連接池根據(jù)TenatnContext改寫(xiě)Sql,這樣做好處是,1.系統(tǒng)信息串了互相獨(dú)立,不易泄露。2.若將來(lái)做分表分庫(kù)也很方便,上層應(yīng)用不用修改。
多租戶優(yōu)化
數(shù)據(jù)庫(kù)層性能優(yōu)化(建立合適索引,消除大數(shù)據(jù)表連接,避免復(fù)雜SQL);
應(yīng)用層性能優(yōu)化(Cache,統(tǒng)計(jì)報(bào)表,異步操作,基于租戶的索引搜索);
展現(xiàn)層性能優(yōu)化;
多租戶可配置性
數(shù)據(jù)可配置(定制字段,預(yù)分配字段,鍵值對(duì));
功能可配置(原子功能劃分,功能包設(shè)計(jì),功能使用校驗(yàn));
界面可配置(系統(tǒng)菜單,頁(yè)面元素);
流程可配置;
可伸縮性;
負(fù)載均衡;
數(shù)據(jù)庫(kù)讀寫(xiě)分離;
數(shù)據(jù)庫(kù)垂直切分/水平切分;
安全性
應(yīng)用安全(身份認(rèn)證,權(quán)限管理,日志記錄,應(yīng)用監(jiān)控);
數(shù)據(jù)安全(數(shù)據(jù)隔離,數(shù)據(jù)庫(kù)連接安全,敏感數(shù)據(jù)加密,數(shù)據(jù)量監(jiān)控);
網(wǎng)絡(luò)安全(安全傳輸,網(wǎng)絡(luò)攻擊防范,網(wǎng)絡(luò)監(jiān)控);
其他問(wèn)題
租戶識(shí)別方案
比較好做法是通過(guò)url識(shí)別租戶。系統(tǒng)是給租戶生成一個(gè)隨機(jī)的三級(jí)域名,比如abc.crm.baidu.com.如果客戶想使用自己的域名,可以在cname到我們生成的三級(jí)域名,并在管理系統(tǒng)里面做綁定。
這樣一個(gè)租戶可以有兩個(gè)域名,訪問(wèn)saas,一個(gè)隨機(jī)生成的三級(jí)域名,另外一個(gè)租戶自己的域名.代碼里面可以根據(jù)過(guò)來(lái)的域名,判斷是那個(gè)租戶然后初始化TenantContext。
如果不想通過(guò)域名來(lái)做,也可以通過(guò)登錄名來(lái)判斷。這種方式要涉及到租戶切換問(wèn)題。
定制化開(kāi)發(fā)
SAAS的優(yōu)勢(shì)在于一套系統(tǒng)多人使用,似乎和定制化開(kāi)發(fā)有沖突。比如A客戶想要A功能,B客戶不想要。但定制化開(kāi)發(fā)是無(wú)法避免的,比如CRM系統(tǒng)這樣復(fù)雜的系統(tǒng),不可能一套系統(tǒng)滿足所有公司的要求。定制化開(kāi)發(fā)盡可能分系統(tǒng),分模塊去做。然后通過(guò)控制臺(tái)中配置不同租戶訂購(gòu)不同模塊,那些模塊可以在前端頁(yè)面上顯示。不同的子系統(tǒng)需要分開(kāi)部署。前端可通過(guò)nginx根據(jù)url分發(fā),比如abc.crm.baidu.com/bi/xxx/xx這個(gè)地址,就分發(fā)到BI子系統(tǒng)。不要嘗試OSGI去搞模塊化,這個(gè)是個(gè)大坑。
開(kāi)發(fā)和產(chǎn)品,現(xiàn)有需求一定要分析清楚,不要一上線發(fā)現(xiàn)后患無(wú)窮。新功能盡量做的獨(dú)立可以配置。
灰度升級(jí)
SAAS付費(fèi)企業(yè)客戶對(duì)系統(tǒng)問(wèn)題都特別敏感。為了減少升級(jí)可能出現(xiàn)問(wèn)題的影響范圍,一般都采用灰度升級(jí)策略。如果使用了url來(lái)區(qū)分不同租戶,灰度升級(jí)配置就會(huì)很方便??梢耘渲胣ginx來(lái)根據(jù)域名做分發(fā),比如租戶A(aaa.com)到實(shí)例1(版本1.0),租戶B(bbb.com)到實(shí)例2(版本).當(dāng)需要域名配置非常多的時(shí)候,nginx配置文檔會(huì)亂。這塊時(shí)候可以考慮使用nignx_lua來(lái)寫(xiě)一些擴(kuò)展模塊。
多租戶Saas系統(tǒng)架構(gòu)還應(yīng)該滿足以下需求:
編號(hào)需求描述
1、軟件授權(quán)云平臺(tái)付費(fèi)授權(quán)機(jī)制,可按時(shí)間、功能、數(shù)量等進(jìn)行付費(fèi)授權(quán);
2、組織入駐允許組織主動(dòng)申請(qǐng)加入平臺(tái);
3、實(shí)名認(rèn)證個(gè)人實(shí)名認(rèn)證、組織實(shí)名認(rèn)證;
4、資質(zhì)審核個(gè)人和組織的資質(zhì)審核,如對(duì)獲得的證書(shū)或榮譽(yù)進(jìn)行審核;
5、組織綁定個(gè)人賬戶綁定組織,與組織建立關(guān)聯(lián)關(guān)系;
6、組織解綁個(gè)人賬戶與組織進(jìn)行解綁;
7、賬戶注銷個(gè)人賬戶注銷,并銷毀所有個(gè)人資料和檔案;
8、統(tǒng)一登錄即SSO;
9、統(tǒng)一注冊(cè)提供統(tǒng)一的用戶注冊(cè)頁(yè)面;
文章來(lái)源:CSDN,作者:hp15;
編輯:云朵匠 | 數(shù)商云(微信ID:shushangyun_com)
【數(shù)商云www.zhimaihui.cn】致力于提供企業(yè)級(jí)的商城開(kāi)發(fā)服務(wù),長(zhǎng)期為大中型企業(yè)打造數(shù)據(jù)化、商業(yè)化、智能化的saas多租戶商城系統(tǒng)解決方案,同時(shí)我們還提供B2B電子商務(wù)平臺(tái)、B2B2C多用戶商城系統(tǒng)、B2C電子商務(wù)系統(tǒng)、跨境進(jìn)口電商平臺(tái)、供應(yīng)商系統(tǒng)、新零售電商平臺(tái)、直播電商系統(tǒng)等一系列供應(yīng)鏈平臺(tái)定制開(kāi)發(fā)服務(wù)。
評(píng)論