原文:https://www.cnblogs.com/itsharehome/p/8120500.html
原文:https://www.cnblogs.com/codemind/p/saas_architecture_tip.html
原文:https://www.cnblogs.com/codemind/p/13081336.html
https://www.cnblogs.com/lori/p/9346548.html
https://blog.csdn.net/cnpinpai/article/details/91967335
一些細化的設計
一些通用的模塊
- 用戶管理
- 角色管理
- 菜單管理
- 應用管理
- Token管理
應用管理
應用標識
應用名稱
回調地址
oauth授權方式
自動審批
令牌時效(s)
刷新時效(s)
Token管理
token
到期時間
用戶名
授權類型
所屬應用
saas設計
https://www.cnblogs.com/itsharehome/p/8120500.html
https://www.cnblogs.com/ms27946/p/How-To-Implement-Multi-Tenant-System.html
https://www.cnblogs.com/codemind/p/saas_architecture_tip.html
SaaS系統簡單分層
- 業務代碼都是寫在應用層。
- 租戶識別可以用spring攔截器實現,然后使用ThreadLocal傳遞給后端
- 數據庫和緩存層對應用層應該是透明的。程序員在寫代碼的時候,只關心業務邏輯,不應該擔心多租戶的問題。
數據隔離
在連接池根據TenatnContext改寫Sql.
租戶識別方案
比較好做法是通過url識別租戶
系統是給租戶生成一個隨機的三級域名,比如 abc.crm.baidu.com. 如果客戶想使用自己的域名,可以在cname到我們生成的三級域名,並在管理系統里面做綁定。
- 域名:例如 tenant1.example.com,tenant2.example.com
- URL:例如 www.example.com/tenant1/,www.example.com/tenant2
- Header:例如 [x-header: 'tenant1'],[x-header: 'tenant2']
租戶管理系統(計費,訂購,定制,充值,催繳)
SaaS系統是必須考慮計費系統和租戶控制系統。
這個系統需要都是獨立設計。比如那個租戶購買了那些模塊,一個月多少錢。租戶可以創建最多的用戶數。計費到期郵件提醒等功能。
計費方式一般有兩種:
- 周期性計費,類似月租方案,
- 使用量計費,用多少付多少。
周期性計費比較簡單。也可以兩者結合起來。
定制化開發
定制化開發盡可能分系統,分模塊去做
灰度升級
SaaS付費企業客戶對系統問題都特別敏感,
為了減少升級可能出現問題的影響范圍,一般都采用灰度升級策略。
如果使用了url來區分不同租戶,灰度升級配置就會很方便。
可以配置nginx 來根據域名做分發,
比如租戶A(aaa.com)到實例1(版本1.0),租戶B(bbb.com)到實例2(版本).
當需要域名配置非常多的時候,nginx配置文檔會亂。
這塊時候可以考慮使用nignx_lua來寫一些擴展模塊。
其它設計參考
mybatis-plus-tenant
https://github.com/chenm1xuexi/mybatis-plus-tenant
多個字段來確定租戶
不過萬物皆有好壞,mybatis-plus在提供便捷開發功能的同時,也會存在一些不合理的地方,比如說mybatis的特性就是讓我們開發人員將精力集中在 sql語句的編寫上,而不需要考慮ORM,結果映射等操作。 采用mybatis-plus后,sql語句的可讀性會變得很差,因為mybatis-plus采用sql語句的拼接方式來完成, 從開發人員的角度,開發速度得到了顯著提升,但是從維護方面來看,后續新的維護人員會變得很痛苦。
因此是否選用mybatis-plus作為持久層框架要時不同的場景來抉擇,如果想快速開發業務,實現敏捷開發,mybatis-plus是非常完美的選擇。 如果是對公司的核心產品的更新迭代編者不建議采用mybatis-plus作為持久化的框架,采用原生的mybatis是非常不錯的選擇,mybatis也提供非常多的可拓展功能,比如說sql攔截等。 如果只想采用mybatis-plus,建議將項目業務領域和持久化領域做好划分(這個也需要看具體企業的開發的架構模式,基於TDD模式開發還是DDD,還是傳統的集中式3層架構等)。 如果涉及到業務迭代快的場景,盡量減少多表聯查,采用單表或者不大於3表聯查的方式也非常有利於日后的業務需求的變更。
持久化
是將程序數據在持久狀態和瞬時狀態間轉換的機制。
通俗的講,就是瞬時數據(比如內存中的數據,是不能永久保存的)持久化為持久數據(比如持久化至數據庫中,能夠長久保存)。
數據持久化
就是將內存中的數據模型轉換為存儲模型,以及將存儲模型轉換為內存中的數據模型的統稱
《Microsoft .NET企業級應用架構設計》
數據訪問層的4種主要職責:持久化、查詢、管理事務、維護並發