当前位置: 首页 > 工具软件 > multi-tenant > 使用案例 >

多租户技术在服务器端 multi-tenant

巫马化
2023-12-01

multi-tenant系统在很早很早以前就有,比如微软MSDN,在06年就发表了multi-tenant系统设计方面概述性的文章

在多租户技术中,租户(tenant)是指使用系统或电脑运算资源的客户,但在多租户技术中,租户包含在系统中可识别为指定用户的一切数据,举凡帐户与统计信息(accounting data),用户在系统中建置的各式数据,以及用户本身的客制化应用程序环境等,都属于租户的范围,而租户所使用的则是基于供应商所开发或建置的应用系统或运算资源等,供应商所设计的应用系统会容纳数个以上的用户在同一个环境下使用,为了要让多个用户的环境能力同一个应用程序与运算环境上使用,则应用程序与运算环境必须要特别设计,除了可以让系统平台可以允许同时让多份相同的应用程序运行外,保护租户数据的隐私与安全也是多租户技术的关键之一。

技术上,多租户技术可以通过许多不同的方式来切割用户的应用程序环境或数据。

  • 数据面(data approach):供应商可以利用切割数据库(database),切割存储区(storage),切割结构描述(schema)或是表格(table)来隔离租户的数据,必要时会需要进行对称或非对称加密以保护敏感数据,但不同的隔离作法有不同的实现复杂度与风险。
  • 程序面(application approach):供应商可以利用应用程序挂载(hosting)环境,于进程(process)上切割不同租户的应用程序运行环境,在无法跨越进程通信的情况下,保护各租户的应用程序运行环境,但供应商的运算环境要够强。
  • 系统面(system approach):供应商可以利用虚拟化技术,将实体运算单元切割成不同的虚拟机,各租户可以使用其中一至数台的虚拟机来作为应用程序与数据的保存环境,但对供应商的运算能力要更要求。

多租户技术的实现重点,在于不同租户间应用程序环境的隔离(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:

 

  • Module: A discrete set of functionality  ===这个就是功能点,就是model&controller& view
  • Theme: The look and feel   ====〉这个就是view的装饰,view根据configuration的改变而改变
  • Configuration:  A selection of modules, and a single theme ===>overall的设置,可以改变功能点的多少,可以改变界面的显示

关于部署,个人认为,完全可以通过手工配置,比如在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.

 

ThemesModules
CSSViews
Theme-specific imagesPartial Views
Theme-specific JavaScriptController actions
Master pagesModule-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

 

看明白得加以时日呢,如何?

 

 

 类似资料: