前言我们经常在云领域听到一个词:多租户。这个词在不同的上下文中有不同的含义。接下来,我将从理论到实践对以往的项目进行总结,同时练习一个demo。本文首先从理论上介绍了云平台中多租户的概念以及实现多租户支持的思路。什么是多租户多租户技术(Multi-TenancyTechnology)也叫多租户技术:是一种软件架构技术,实现如何共享同一个系统或程序组件,并保证用户之间的数据隔离。简单地说:应用程序的单个实例运行在单个服务器上,该服务器为多个租户(客户端)提供服务。从定义上我们可以理解,多租户是一种架构,目的是让同一套程序在多用户环境下使用,并保证用户之间的数据隔离。那么重点就很好理解了。多租户的关键点是实现同一套程序下多用户数据的隔离。需求分析传统的软件模型是指买卖软件产品,是一种简单的买卖关系。客户通过买断方式获得软件使用权,软件源代码归客户所有。因此,传统软件部署在企业内部。每个企业都部署了一套自己的软件系统。Saas模式是指由服务商提供的一种软件服务。应用统一部署在服务商的服务器上,客户可根据实际需要按需付费。用户购买基于WEB的软件,而不是在自己的电脑上安装软件,用户不需要定期对软件进行维护和管理。在SaaS平台中,需要通过一个共享的数据中心,以单一的系统架构和服务为大多数客户提供相同甚至可定制的服务,同时仍然保证客户数据的正常使用。这就带来了新的挑战,即如何设计应用数据来支持多租户,而这种设计的思路是在数据共享、安全隔离和性能之间取得平衡。多租户数据库解决方案分析目前通常有三种基于多租户的数据库设计方案:独立数据库IndependentSchemaShareddatabase共享数据库和共享数据表Independentdatabase对于独立数据库,首先业务层需要能够支持多个数据源配置,并为每个租户创建或初始化一个数据库。应用程序和数据库都是单独的实例,因此它不与任何其他单独的实例交互。只为一个租户提供服务,独立的服务,独立的数据库,独立的请求处理。独立数据库:每个租户一个数据库。优点:为不同租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果发生故障,恢复数据相对简单;缺点:增加数据库安装次数,会带来维护成本和购置成本的增加。该方案类似于传统的一个客户、一套数据、一套部署,唯一不同的是软件统一部署在运营商。可见该方案对用户数据隔离度高,安全性好,但成本相对较高。Shareddatabase,independentschema共享数据库,独立模式模式是将多个或所有租户的数据放在一个数据库服务中,但为每个租户创建一个独立的模式。租户之间的数据在逻辑上相互不可见,上层应用的实现就像独立的数据库一样简单。(补充:mysql数据中的schema比较特殊,不是数据库的下一级,而是相当于数据库。)优点:对于安全性要求高的租户来说是一个选择。提供一定程度的逻辑数据隔离,但不是完全隔离;每个数据库可以支持更多的租户。缺点:一旦发生故障,数据恢复困难,因为恢复数据库会涉及到其他租户的数据;如果需要跨租户统计,有一定的困难。该方案是方案一的变体。只需要安装一个数据库服务,就可以通过不同的schema隔离不同租户的数据。由于数据库服务是共享的,成本相对较低。该方案是方案一的变体。只需要安装一个数据库服务,就可以通过不同的schema隔离不同租户的数据。由于数据库服务是共享的,成本相对较低。共享数据库、共享数据表共享数据库、共享数据表:即租户共享同一个数据库,共享同一套数据库表(所有租户的数据都存储在一个数据库的同一套表中)。在表中添加租户标识字段,如租户ID,以表明该记录属于哪个租户。优点:所有租户使用同一个数据库,成本低。缺点:隔离级别低,安全性低,设计开发时需要增加安全开发量,数据备份恢复困难。该方案与基于传统应用的数据库设计没有区别,但是由于所有租户使用同一张数据库表,因此需要做好每个租户数据的隔离和安全,增加了系统设计和数据管理。的复杂性。选择合理的实现模式,衡量三种模式主要考虑的是隔离还是共享。成本因素隔离得越好,设计和实施的难度和成本就越高,初始成本也越高。共享越好,同样运营成本下支持的用户越多,运营成本越低。安全因素应考虑业务和客户的安全要求。安全要求越高,越倾向于隔离。在考虑租户数量时,应考虑以下因素:系统应支持多少个租户?数百?几千还是几万?可能的租户越多,共享的可能性就越大。每个租户存储数据所需的平均空间。存储的数据越多,它就越孤立。每个租户同时访问系统的最终用户数。你越需要支持,你就越倾向于孤立。您是否要为每个租户提供额外的服务,例如数据备份和恢复。这方面的需求越多,越倾向于隔离技术储备,共享度越高,对技术的要求也越高。
