開發一個SAAS系統如何搭建技術架構?

互聯商理學


Saas系統最近幾年都很火。很多創業公司都在嘗試創建企業級別的應用 cRM, HR,銷售, Desk Saas系統。很多Saas創業公司也拿了大額風投。畢竟Saas相對傳統軟件的優勢非常明顯。

最近一年,有幸架構一個Crm saas 系統,上線了幾個月來,各方面都比滿意。整個系統創建過程,踩了很多坑,收穫也比較多。總結一下Saas系統架構一些特點:

1.分層設計

saas系統分層大概是:

租戶識別>應用層>數據訪問層>緩存層>數據庫

業務代碼都是寫在應用層。

租戶識別可以用spring攔截器實現,然後使用ThreadLocal傳遞給後端

數據庫和緩存層對應用層應該是透明的。程序員在寫代碼的時候,只關心業務邏輯,不應該擔心多租戶的問題。

2.數據隔離要透明

saas系統說起來很簡單,任何系統似乎加個tenant_id(租戶id)就變成saas系統了。比如原來的用戶登錄是:

select username,password from users where email='[email protected]'

改成

select username,password from users where email='[email protected]' and tenant_id =1;

  

對於複雜業務的saas系統,這樣做法非常危險,而且開發效率很低。你想想如果那個程序員寫sql時候忘了加 “ and tenant_id =1” . 結果不堪設想。

比較好做法是在數據庫訪問層對SQL進行改寫。

TenantContext.exec("select username,password from users where email='[email protected]' ");

在連接池根據TenatnContext改寫Sql.

這樣做好處是,一來程序猿最多把系統搞down了,也不至於信息串了互相洩露。二來將來做分表分庫也很方便,上層應用不用修改。

3. 租戶識別方案

比較好做法是通過url識別租戶。系統是給租戶生成一個隨機的三級域名,比如 abc.crm.baidu.com. 如果客戶想使用自己的域名,可以在cname到我們生成的三級域名,並在管理系統裡面做綁定。

這樣一個租戶可以有兩個域名,訪問saas,一個隨機生成的三級域名,另外一個租戶自己的域名.代碼裡面可以根據過來的域名,判斷是那個租戶然後初始化TenantContext.

如果不想通過域名來做,也可以通過登錄名來判斷。這種方式要涉及到租戶切換問題。

4. 智能DNS

以後補充。

5. 租戶管理系統(計費,訂購,定製,充值,催繳)

Saas系統是必須考慮計費系統和租戶控制系統。這個系統需要都是獨立設計。比如那個租戶購買了那些模塊,一個月多少錢。租戶可以創建最多的用戶數。計費到期郵件提醒等功能。

計費方式一般有兩種,週期性計費,類似月租方案,和使用量計費,用多少付多少。 週期性計費比較簡單。也可以兩者結合起來。

6. 定製化開發

SAAS的優勢在於一套系統多人使用,似乎和定製化開發有衝突。比如A客戶想要A功能,B客戶不想要。但定製化開發是無法避免的,比如CRM系統這樣複雜的系統,不可能一套系統滿足所有公司的要求。定製化開發儘可能分系統,分模塊去做。然後通過控制檯中配置不同租戶訂購不同模塊,那些模塊可以在前端頁面上顯示。不同的子系統需要分開部署。前端可通過nginx根據url分發,比如 abc.crm.baidu.com/bi/xxx/xx這個地址,就分發到BI子系統。不要嘗試OSGI去搞模塊化,這個是個大坑。

還有開發和產品,現有需求一定要分析清楚,不要一上線發現後患無窮。新功能儘量做的獨立可以配置。

7. 灰度升級

SAAS付費企業客戶對系統問題都特別敏感。 為了減少升級可能出現問題的影響範圍,一般都採用灰度升級策略。如果使用了url來區分不同租戶,灰度升級配置就會很方便。可以配置nginx 來根據域名做分發,比如租戶A(aaa.com)到實例1(版本1.0),租戶B(bbb.com)到實例2(版本). 當需要域名配置非常多的時候,nginx配置文檔會亂。這塊時候可以考慮使用nignx_lua來寫一些擴展模塊。

8. 容量估計


軟族SaaS軟件內容運營


我目前就在搞saas 軟件,說實話和傳統軟件技術架構區別不大,整體上需要實現多租戶,可配置,7*24高可用這個目標!數據架構層面要實現數據隔離,可以具體百度下隔離方式!系統分層方面主要包括租戶域,租戶管理域,運營中心管理域這三個,另外其他就是做好統一權限認證中心,統一資源管理中心就行啦。其他就是傳統的微服務架構,網關,註冊中心,配置中心,我是搞Java的,建議使用springcloud 技術棧,前後端分離開發!

用手機編輯的,其實如果講的話,真的可以從整體到局部涉及很多東西,但是大致方向都是以上所訴!好的saas 軟件真的在於產品設計,市場定位!技術只是產品的轉訴!有興趣的朋友可以聯繫我。


Hao碼農


我們衡量一個SaaS系統的好壞通常通過SaaS成熟度模型來進行評價:

1、SaaS成熟度模型

• Level1:定製開發的SaaS應用

– 多次開發模式

• Level2:可配置的多租戶SaaS應用

– 一次開發多次部署模式

• Level3:單實例支持多租戶的SaaS應用架構

– 一次開發一次部署模式

• Level4:支持可伸縮性的多租戶SaaS應用架構

如果要搭建滿足Level4的SAAS系統,除了要滿足可配置和多租戶的需求之外,關鍵的技術架構還是分佈式架構:

目前常用的分佈式架構主要有SOA和微服務,而SOA太重,推薦使用微服務來構建SAAS應用,有關微服務的介紹請參考我的一篇文章:《研發三要素之術篇-微服務》:https://www.toutiao.com/i6675844031181750788/


IT極客老兵


首先還是要設計好業務框架,然後再分析saas系統的用戶群體,併發數量,再考慮數據如何區隔,安全性保證,網絡出現問題如何解決,再決定採用什麼數據庫和技術架構,擴散性要好,saas系統不是生來就有龐大的用戶數,是一個漸進到爆發的過程。


分享到:


相關文章: