sql-server – 处理赏罚多租户数据库系统布局中越来越多的租户
在民众处事器中处理赏罚适量数目的客户(租户),每个租户的应用措施实例具有单独的数据库,这是相对简朴的,凡是是执行此操纵的正确要领.今朝,我正在研究应用措施的系统布局,个中每个租户都有本身的数据库实例. 然而,题目是这个应用措施将拥有大量租户(5,000-10,000),拥有大量用户,单个租户也许有2,000个.我们必要每周支持几个租户增进体系. 另外,全部租户及其用户将被泛起一个配合的登录进程(即每个租户不能拥有本身的URL).为此,我必要一个齐集登录进程和一种动态添加数据库到体系并注册用户的要领. >怎样妥当地自动注册和数据库建设进程? 办理要领在低端(500个租户/ 10000个用户)这就是我的方法.起首,您有一个全局,中央的“节制”数据库,包括有关租户和用户的全部信息(我真的不以为您想要将这些作为SQL身份验证登录打点).因此,想象一下名为“Control”的数据库,个中包括以下表:CREATE TABLE dbo.Instances ( InstanceID INT PRIMARY KEY,Connection VARCHAR(255) --,... ); INSERT dbo.Instances SELECT 1,'PROD1Instance1'; INSERT dbo.Instances SELECT 1,'PROD2Instance1'; -- ... CREATE TABLE dbo.Tenants ( TenantID INT PRIMARY KEY,Name NVARCHAR(255) NOT NULL UNIQUE,InstanceID INT -- Foreign key tells which instance this tenant's DB is on --,... ); INSERT dbo.Tenants SELECT 1,'MyTenant',1; -- ... CREATE TABLE dbo.Users ( UserID INT PRIMARY KEY,Username VARCHAR(320) NOT NULL UNIQUE,PasswordHash VARBINARY(64),-- because you never store plain text,right? TenantID INT -- foreign key --,... ); INSERT dbo.Users SELECT 1,'foo@bar.com',0x43...,1; 在我们添加新租户的环境下,我们将动态构建数据库,可是当打点员用户在UI中单击OK时…我们有一个靠山功课,每隔5分钟将新数据库从行列中拉出来,将模子配置为single_user,然后按次序建设每个新数据库.我们这样做是为了(a)阻止打点员用户守候数据库建设,以及(b)停止两个打点员用户同时实行建设数据库或以其他方法拒绝锁定模子的手段(建设新数据库时必要) ). 行使名称Tenant000000xx建设数据库,个中xx暗示Tenants.TenantID.这使维护事变变得很是轻易,而不是拥著名为BurgerKing,McDonalds,KFC等的各类数据库.并不是说我们只是以快餐为例,只是以此为例. 我们没有预先分派数千个数据库作为评述提议的缘故起因是我们的打点员用户凡是知道租户会变得多大,他们是否具有高优先级等等.以是他们在UI中有根基的选择.将抉择他们的初始巨细和自动增添配置,他们的数据/日记文件将进入哪个磁盘子体系,他们的规复配置,铰接的备份打算,乃至是关于将数据库陈设到哪个实例的智能,以便最佳地均衡行使(固然我们的打点员可以包围这个).建设数据库后,行使所选实例更新租户表,为租户建设打点员用户,并通过电子邮件将我们的打点员通过电子邮件转达给新租户. 假如您行使单一进口点,则应承多个租户拥有沟通用户名的用户是不行行的.我们选择行使电子邮件地点 – 假如全部用户都为公司事变并行使他们的公司电子邮件地点 – 应该没题目.固然我们的办理方案最终变得越发伟大,缘故起因有二 >我们的参谋处事于多个客户,而且必要会见多个客户 因此,我们最终获得了一个TenantUsers表,应承一个用户与多个租户相干联. 最初,当用户登录时,应用措施将仅知道节制数据库的毗连字符串.登录乐成后,它可以按照找到的信息构建毗连字符串.譬喻. SELECT i.Connection FROM dbo.Instances AS i INNER JOIN dbo.Tenants AS t ON i.InstanceID = t.InstanceID INNER JOIN dbo.TenantUsers AS u ON i.TenantID = u.TenantID WHERE u.UserID = @UserID; 此刻,应用措施可以毗连到用户的数据库(每个用户都有默认租户),可能用户可以从他们可以会见的任何租户中举办选择.然后,应用措施将只检索新的毗连字符串,并重定向到该租户的主页. 假如你进入你提议的这个10MM用户地区,你必定必要更好地均衡这个.您也许但愿连系应用措施,以便它们具有毗连到差异节制数据库的差异进口点.假如您为每个租户提供一个子域(譬喻TenantName.YourApplicationDomain.com),那么您可以在DNS /路由的幕后举办此操纵,而无需在必要进一步扩展时将个间断. 尚有许多对象 – 好比@Darin我只是在这里搔痒.假如您必要非免费咨询,请汇报我. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |