multi-tenant系统在很早很早以前就有,比如微软MSDN,在06年就发表了multi-tenant系统设计方面概述性的文章
在多租户技术中,租户(tenant)是指使用系统或电脑运算资源的客户,但在多租户技术中,租户包含在系统中可识别为指定用户的一切数据,举凡帐户与统计信息(accounting data),用户在系统中建置的各式数据,以及用户本身的客制化应用程序环境等,都属于租户的范围,而租户所使用的则是基于供应商所开发或建置的应用系统或运算资源等,供应商所设计的应用系统会容纳数个以上的用户在同一个环境下使用,为了要让多个用户的环境能力同一个应用程序与运算环境上使用,则应用程序与运算环境必须要特别设计,除了可以让系统平台可以允许同时让多份相同的应用程序运行外,保护租户数据的隐私与安全也是多租户技术的关键之一。
技术上,多租户技术可以通过许多不同的方式来切割用户的应用程序环境或数据。
多租户技术的实现重点,在于不同租户间应用程序环境的隔离(application context isolation)以及数据的隔离(data isolation),以维持不同租户间应用程序不会相互干扰,同时数据的保密性也够强。
在这么多年的发展中,核心的东西不会变化,包括多租户的目的,但是随着技术的发展,比如之前完全没有asp.net mvc只有简易的asp.net 1.1世界还在提供多租户技术,问题的关键是,从一个无此模型,框架的地步发展到采用某个技术,某个方案到某个硬件平台部署,这个整套的积累是一个企业的财富。
租户系统中,还有一个问题,就是能否适应租户的差异化要求,从概念来说,人人多会讲模块化plug-in,通过配置增加模块功能,实际上有这么简单么?是不是开发人员需要为定制化开发不同的 房型分支?
Adding a new customer shouldn't be about changing code, it should be about manipulating configuration, and modifying a customer shouldn't be about changing code, it should also be about manipulating configuration.
In other words, problems should only be solved once - and configuration should be used to give or take features to and from customers.
从网站来说,我觉得最基本是就是分离MVC,所以多租户系统的前台,我是倾向于MVC的,否者请看如下key words:
关于部署,个人认为,完全可以通过手工配置,比如在web.configure中进行配置,设置其中需要显示的某个租户的ID。获取数据就相对简单些。
Deployment becomes a simple case of installing your application onto a server, and setting up the configurations for that application.
如果是完全分离的部署,不用担心某个 租户的数据问题,流量问题导致 整个平台发生问题。
Getting to the point, this is how I personally split up the MVC application concepts into themes and modules.
Themes | Modules |
CSS | Views |
Theme-specific images | Partial Views |
Theme-specific JavaScript | Controller actions |
Master pages | Module-specific JavaScript |
JavaScript
进入技术描述后就完全发撒了,比如js和css的开源,就可以有很多很多选择,but you need to select one!
the structure of the master page IS a part of theming, and that we are using sub-master pages and separate child master pages across the site for different interfaces. I therefore use the OnPreInit method mentioned in the above entry for the greatest amount of flexibility.
remember, our active configuration is per-request because we're attempting true multi-tenancy
看明白得加以时日呢,如何?