saas系統(tǒng)架構(gòu)經(jīng)驗總結(jié)

2B Saas系統(tǒng)最近幾年都很火。很多創(chuàng)業(yè)公司都在嘗試創(chuàng)建企業(yè)級別的應(yīng)用?cRM, HR,銷售, Desk Saas系統(tǒng)淫僻。很多Saas創(chuàng)業(yè)公司也拿了大額風(fēng)投砸烦。畢竟Saas相對傳統(tǒng)軟件的優(yōu)勢非常明顯甚纲。 ??

最近一年库正,有幸架構(gòu)一個Crm saas 系統(tǒng)曲楚,上線了幾個月來,各方面都比滿意褥符。整個系統(tǒng)創(chuàng)建過程龙誊,踩了很多坑,收獲也比較多喷楣√舜螅總結(jié)一下Saas系統(tǒng)架構(gòu)一些特點:


1.分層設(shè)計

saas系統(tǒng)分層大概是:


租戶識別>應(yīng)用層>數(shù)據(jù)訪問層>緩存層>數(shù)據(jù)庫


業(yè)務(wù)代碼都是寫在應(yīng)用層。

租戶識別可以用spring攔截器實現(xiàn)铣焊,然后使用ThreadLocal傳遞給后端

數(shù)據(jù)庫和緩存層對應(yīng)用層應(yīng)該是透明的逊朽。程序員在寫代碼的時候,只關(guān)心業(yè)務(wù)邏輯曲伊,不應(yīng)該擔(dān)心多租戶的問題惋耙。


2.數(shù)據(jù)隔離要透明

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

selectusername,passwordfromuserswhereemail='abc@qq.com'


改成

selectusername,passwordfromuserswhereemail='abc@qq.com'andtenant_id=1;


對于復(fù)雜業(yè)務(wù)的saas系統(tǒng)绽榛,這樣做法非常危險,而且開發(fā)效率很低婿屹。你想想如果那個程序員寫sql時候忘了加 “ and tenant_id =1” . 結(jié)果不堪設(shè)想灭美。

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

TenantContext.exec("select username,password from users where email='abc@qq.com' ");


在連接池根據(jù)TenatnContext改寫Sql.?

這樣做好處是昂利,一來程序猿最多把系統(tǒng)搞down了届腐,也不至于信息串了互相泄露。二來將來做分表分庫也很方便蜂奸,上層應(yīng)用不用修改犁苏。

3. 租戶識別方案

比較好做法是通過url識別租戶。系統(tǒng)是給租戶生成一個隨機的三級域名扩所,比如 abc.crm.baidu.com. ? 如果客戶想使用自己的域名围详,可以在cname到我們生成的三級域名,并在管理系統(tǒng)里面做綁定祖屏。

這樣一個租戶可以有兩個域名助赞,訪問saas,一個隨機生成的三級域名,另外一個租戶自己的域名.代碼里面可以根據(jù)過來的域名袁勺,判斷是那個租戶然后初始化TenantContext.

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

4. 智能DNS

以后補充群叶。

5. 租戶管理系統(tǒng)(計費,訂購钝荡,定制街立,充值,催繳)

Saas系統(tǒng)是必須考慮計費系統(tǒng)和租戶控制系統(tǒng)化撕。這個系統(tǒng)需要都是獨立設(shè)計几晤。比如那個租戶購買了那些模塊,一個月多少錢植阴。租戶可以創(chuàng)建最多的用戶數(shù)蟹瘾。計費到期郵件提醒等功能。

計費方式一般有兩種掠手,周期性計費憾朴,類似月租方案,和使用量計費,用多少付多少喷鸽。 周期性計費比較簡單众雷。也可以兩者結(jié)合起來。

6. 定制化開發(fā)

SAAS的優(yōu)勢在于一套系統(tǒng)多人使用,似乎和定制化開發(fā)有沖突砾省。比如A客戶想要A功能鸡岗,B客戶不想要。但定制化開發(fā)是無法避免的编兄,比如CRM系統(tǒng)這樣復(fù)雜的系統(tǒng)轩性,不可能一套系統(tǒng)滿足所有公司的要求。定制化開發(fā)盡可能分系統(tǒng)狠鸳,分模塊去做揣苏。然后通過控制臺中配置不同租戶訂購不同模塊,那些模塊可以在前端頁面上顯示件舵。不同的子系統(tǒng)需要分開部署卸察。前端可通過nginx根據(jù)url分發(fā),比如?abc.crm.baidu.com/bi/xxx/xx這個地址铅祸,就分發(fā)到BI子系統(tǒng)坑质。不要嘗試OSGI去搞模塊化,這個是個大坑个少。

還有開發(fā)和產(chǎn)品洪乍,現(xiàn)有需求一定要分析清楚,不要一上線發(fā)現(xiàn)后患無窮夜焦。新功能盡量做的獨立可以配置壳澳。

7. 灰度升級

SAAS付費企業(yè)客戶對系統(tǒng)問題都特別敏感。 為了減少升級可能出現(xiàn)問題的影響范圍茫经,一般都采用灰度升級策略巷波。如果使用了url來區(qū)分不同租戶,灰度升級配置就會很方便卸伞∧鳎可以配置nginx 來根據(jù)域名做分發(fā)囊骤,比如租戶A(aaa.com)到實例1(版本1.0)楚里,租戶B(bbb.com)到實例2(版本). 當(dāng)需要域名配置非常多的時候,nginx配置文檔會亂淋昭。這塊時候可以考慮使用nignx_lua來寫一些擴展模塊遂黍。


8. 容量估計


暫時先寫這么多了终佛。有時間再補充。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雾家,一起剝皮案震驚了整個濱河市铃彰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芯咧,老刑警劉巖牙捉,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竹揍,死亡現(xiàn)場離奇詭異,居然都是意外死亡邪铲,警方通過查閱死者的電腦和手機芬位,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霜浴,“玉大人晶衷,你說我怎么就攤上這事∫趺希” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵税迷,是天一觀的道長永丝。 經(jīng)常有香客問我,道長箭养,這世上最難降的妖魔是什么慕嚷? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮毕泌,結(jié)果婚禮上喝检,老公的妹妹穿的比我還像新娘。我一直安慰自己撼泛,他們只是感情好挠说,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愿题,像睡著了一般损俭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潘酗,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天杆兵,我揣著相機與錄音,去河邊找鬼仔夺。 笑死琐脏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缸兔。 我是一名探鬼主播日裙,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灶体!你這毒婦竟也來了阅签?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蝎抽,失蹤者是張志新(化名)和其女友劉穎政钟,沒想到半個月后路克,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡养交,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年精算,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碎连。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡灰羽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鱼辙,到底是詐尸還是另有隱情廉嚼,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布倒戏,位于F島的核電站怠噪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杜跷。R本人自食惡果不足惜傍念,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葛闷。 院中可真熱鬧憋槐,春花似錦、人聲如沸淑趾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽治笨。三九已至驳概,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旷赖,已是汗流浹背顺又。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留等孵,地道東北人稚照。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像俯萌,于是被迫代替她去往敵國和親果录。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容