saas系統架構運營經驗總結

來源:互聯網
上載者:User

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

 
1.分層設計

saas系統分層大概是:


租戶識別>應用程式層>資料訪問層>緩衝層>資料庫

 

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

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

資料庫和緩衝層對應用程式層應該是透明的。程式員在寫代碼的時候,只關心商務邏輯,不應該擔心多租戶的問題。

 
2.資料隔離要透明


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

select username,password from users where email='abc@qq.com'

 

改成

select username,password from users where email='abc@qq.com' and tenant_id =1;
  

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

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

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

 
在串連池根據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來寫一些擴充模組。



5年SaaS運營總結的5點經驗

不是“高科技公司”而是“讓顧客感覺真棒”的公司

顧客不會因為你有精湛的編程水平、會做Nginx配置等而掏腰包購買產品,但如果你賣給他們的產品能為他們節約時間、金錢、精力,那麼他們將會很樂意支付購買。你的工作就是為了讓客戶的生活和工作變得令人刮目相看,所以對於產品和業務的每一個決定都應該緊緊圍繞這一目的。

不要承諾特性的發布時間

在這一點上請相信我,不要對產品某項特性的發布承諾發布時間。當某個特性準備好時,人們會問你所有的時間表。回答這種問題最好的途徑就是(如果你準備回答的話):“在未來的版本裡我們會考慮這樣的功能特性,但我目前給不出一個確切的時間點什麼時候準備好。”也就是說對消費者要誠實——如果你自己都不知道什麼時候“Ready”。

在能幫你保持高效的方面投資

這方面指的是能明顯看出收效的一些投資,比如一台好用的膝上型電腦(經常升級)、舒適的桌子和座椅等,以及其他一些看起來似乎沒那麼明顯能帶來高效的投資,包括一些軟體,能讓你集中精力開發應用程式功能而不是單純地只做伺服器配置。

切勿工作過載

讓自己過載工作其實是業務向失敗邁出的第一步,因為滿負荷的時候你不會有好的狀態。比如晚上就堅決不要去查收郵件,如果你的團隊只有1~2人,那也不需要提供7×24的支援,客戶會理解的。你開公司不是為了力竭而亡的,你的健康、家庭和社會生活比起5分鐘的支援響應、100%的運行正常應該更重要。

不要相信炒作

人們很容易變得興奮,也很擅長對新技術、架構、程式設計語言以及配置方式進行天花亂墜的宣傳,可能會告訴你該做什麼、怎麼計劃,其實你應該擴充到百萬使用者來評估。事實是應該務實些——你的目標是經營業務,用相對成熟的技術。而且你需要做必要的最佳化,這包括編寫少的代碼、更廣的測試覆蓋以及集中精力做事,才能做好企業的長期盈利。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.