什么是多租户?

“软件多租户是指一个软件体系结构,其中一个软件实例在一个服务器上运行,并为多个租户提供服务*租户是一组共享具有软件实例特定权限的公共访问权限的用户。 架构中,软件应用程序旨在为每个租户提供一个包含其数据*,配置,用户管理,租户个人功能和非功能属性的实例共享*多租户与多实例架构形成鲜明对比,其中独立的软件实例运行 代表不同的租户“(维基百科),简而言之,多租户是一种用于创建SaaS(软件即服务)应用程序的技术。

数据库和部署体系结构

有一些不同的多租户数据库和部署方法:

1、多个部署 - 多个数据库

实际上这不是多租户,但是如果我们为每个客户(租户)运行一个具有独立数据库的应用程序实例,则可以在一台服务器上为多个租户提供服务。我们只需确保应用程序的多个实例在相同的服务器环境中不会相互冲突。

对于不是被设计为多租户的现有应用来说,这也是可能的。由于应用程序不知道多租户,创建这样的应用程序更容易。然而,这种方法存在设置,使用和维护问题。

2、单一部署 - 多个数据库

在这种方法中,我们在服务器上运行应用程序的单个实例。我们有一个主(主机)数据库来存储租户元数据(如租户名和子域)和每个租户的单独数据库。一旦我们确定了当前的租户(例如,从子域或从用户登录表单),那么我们可以切换到该租户的数据库来执行操作。在这种方法中,应用程序应该在一定程度上被设计为多租户,但大部分应用程序可以保持独立。我们为每个租户创建和维护一个单独的数据库,这包括数据库迁移。如果我们有许多专用数据库的客户,则在应用程序更新期间迁移数据库模式可能需要很长时间。由于每个租户都有独立的数据库,我们可以将数据库与其他租户分开备份。如果租户需要,我们也可以将租户数据库迁移到更强大的服务器上。

3、单一部署 - 单个数据库

      这是最理想的多租户体系结构:我们只将具有单个数据库的应用程序的单个实例部署到单个服务器上。我们在每个表(对于RDBMS)中都有一个TenantId(或类似的)字段,用于隔离租户的数据。
这种类型的应用程序易于安装和维护,但难于创建。这是因为我们必须防止租户读取或写入其他租户的数据。我们可以为每个数据库读取(选择)操作添加一个TenantId过滤器。我们也可以在每次写入时检查它,看看这个实体是否与当前的租户有关。这是乏味和容易出错的。但是,ASP.NET Boilerplate通过使用自动数据过滤来帮助我们。如果我们有许多拥有大量数据集的租户,这种方法可能会有性能问题。我们可以使用表分区或其他数据库功能来克服这个问题。

4、单一部署 - 混合数据库

      我们可能希望将租户正常存储在单个数据库中,但可能希望为所需租户创建单独的数据库。例如,我们可以将拥有大数据的租户存储在自己的数据库中,但将所有其他租户存储在单个数据库中。

5、多部署 - 单/多/混合数据库

     最后,我们可能希望将我们的应用程序部署到多个服务器(如Web场)以获得更好的应用程序性能,高可用性和/或可伸缩性。这与数据库方法无关。
 
 我所采用的是单部署多数据库的形式,主要是为了数据隔离,我也好维护。但是在多数据库的时候老是抛出错误 (图1)。最后发现网上说开启MSDTC服务。

图1 报错

系统开启MSDTC 服务后、然后使用租户登录、发现还是有问题!

最后问了搞.NET 朋友,说是配置 DTC 安全配置。

  1. 展开-> "应用程序服务器” -> “工具” ->  “组件服务”->右键“本地DTC”
  2. 选择“本地DTC”的“安全选项卡”,做如下设置:

      (1)选中“网络DTC访问”
           (2)在客户端管理中选中“允许远程客户端”“允许远程管理”
           (3)在事务管理通讯中选“允许入站”“允许出站”“不要求进行验证”
           (4)保证DTC登陆账户为:NT Authority\NetworkService 
           (5)单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。   所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。 
       3.关闭网络防火墙(或者开放相应的端口135或用services.msc打开服务启动TCP/IP NetBIOS Helper服务)

ABP 多租户 对应多数据库 租户启动报错的更多相关文章

  1. undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库坏块导致

    本文转自 惜纷飞 大师. 模拟基表事务未提交数据库crash,undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库 ...

  2. ubuntu系统中出现mysql数据库无法启动报错2002该怎么处理,具体报错信息如正文所示

    python@ubuntu:~$ mysql -uroot -pmysqlmysql: [Warning] Using a password on the command line interface ...

  3. oracle数据库启动报错,不能启动ASM实例

    数据库rac启动时报错,日志例如以下,后来使用 Sat Jun  7 06:02:11 2014 GATHER_STATS_JOB encountered errors.  Check the tra ...

  4. Oracle启动报错ORA-27102解决

    环境:RHEL5.5 + Oracle 10.2.0.4 此错误一般是因为数据库的初始化参数文件的内存设置不当导致.本例是因为操作系统参数设置问题导致. 当前现象:Oracle启动报错ORA-2710 ...

  5. ssh启动报错:org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection timed out: connect

    ssh项目启动报错: org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection t ...

  6. Hbasewindows系统下启动报错及解决办法

    今天在本地windows电脑上,装pinpoint时,需要先安装一个Hbase数据库,按照教程下载启动Hbase数据库时,却启动报错:java.io.IOException: Could not lo ...

  7. 启动报错:Access denied for user 'root'@'localhost' (using password:YES)

    项目启动报错:Access denied for user 'root'@'localhost' (using password:YES) 原因:root帐户默认不开放远程访问权限,所以需要修改一下相 ...

  8. SpringBoot2 启动报错 Failed to auto-configure a DataSource

    今天Spring Boot 2.0正式版发布,寻思着搭个小demo尝试一下Spring Boot的新特性,使用idea创建项目.在选择组件时添加了mysql.mybatis 然后在第一次启动的时候启动 ...

  9. zabbix启动报错:Connection to database 'xxx' failed解决方法

    Zabbix 分布式系统监视系统 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通 ...

  10. 【报错】spring整合activeMQ,pom.xml文件缺架包,启动报错:Caused by: java.lang.ClassNotFoundException: org.apache.xbean.spring.context.v2.XBeanNamespaceHandler

    spring版本:4.3.13 ActiveMq版本:5.15 ======================================================== spring整合act ...

随机推荐

  1. HDU 2503 a/b + c/d(最大公约数与最小公倍数,板子题)

    话不多说,日常一水题,水水更健康!┗|`O′|┛ 嗷~~ a/b + c/d Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768 ...

  2. (a == 1 && a == 2 && a == 3),何时为true?

    今天浏览一些技术网站,看到这个题目.虽然觉着代码这么写的可能性低之又低,但是却也考验对js了解的程度. 在 JavaScript 中 (a ==1 && a== 2 && ...

  3. linux下vi编辑某文件时,操作出现 错误提示: E325: ATTENTION 2, Found a swap file by the name ".p1.c.swp"

    当我在linux下用vi打开p1.c文件时 root@iZ2zeeailqvwws5dcuivdbZ:~/1/01/指针# vi p1.c 会出现如下信息: E325: ATTENTION Found ...

  4. RPM包效验

  5. Personal Learning Path of Java——Java语言基础

    Java语言是面向对象编程语言,Java程序的基本组成单元是类,类体中又包括属性和方法两部分.每一个程序都必须包含一个main()方法,含有main()方法的类称为主类. 如下面代码: package ...

  6. Spark应用_PageView_UserView_HotChannel

    Spark应用_PageView_UserView_HotChannel 一.PV 对某一个页面的访问量,在页面中进行刷新一次就是一次pv PV {p1, (u1,u2,u3,u1,u2,u4-)} ...

  7. 如何用SVN版本控制器将提交的文件还原到以前的版本

    工具/原料 SVN乌龟软件和相关的文件 方法/步骤 在相关的文件中右击鼠标,按右图进行选择 在弹出框的地方点击我标记的地方,查看下曾经提交过的版本文件 在弹出框的地方,上面就是有版本号,下面就是我们文 ...

  8. dedecms列表页有图调用缩略图无图留空的方法

    默认情况下,织梦的文章列表页会调用出当前栏目下的文章列表,并且调用出每个文章的缩略图:如果文章本身就有图,会调用出一张小图,如果没有,则会显示默认的织梦图片.这种处理方式有时候比较影响美观,其实可以修 ...

  9. Python3 的列表

    1:列表: Python的列表比C语言的数组强大的多,数组只能存放相同类型的数据,而列表则像一个大集装箱可以存放整形.浮点型.字符串.对象等 2:创建列表的方法 #创建一个普通列表 list1=[1, ...

  10. Linux的软件安装(JDK安装,Mysql安装,Tomcat安装)

    1.JDK安装 注意:rpm与软件相关命令 相当于window下的软件助手 管理软件 步骤: 1)查看当前Linux系统是否已经安装java 输入 rpm -qa | grep java ps:博主这 ...