微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

处理多租户连接的最有效方法是什么?

如何解决处理多租户连接的最有效方法是什么?

我正在创建一个多租户SaaS产品,该产品由相当基本的PHP / MysqL连接组成。我正在使用单个数据库,并将所有租户映射到数据库中的tenantId列。

我还使用子域为每个租户提供软件的前端/后端,因此在注册时,将为他们提供类似company1.mysaas.dev的信息。它们的子域也映射到数据库中的tenantId

所有租户的域都指向一个代码库/应用程序的相同入口点,因此在访问其域时,它需要映射到其配置文件/连接到数据库中的tenantId以仅加载他们的文件

这是我在每个子域正在加载的index.PHP文件上正在做的事情:

// Connect to Database
$db = new MysqLi('localhost','root','','saas');

// Check Connection
if ($db->connect_error) {
  die("Connection Failed: " . $db->connect_error);
}

$domain = $_SERVER['HTTP_HOST']; // Get current domain
$stmt = $db->prepare('SELECT `tenant_id` FROM `domains` WHERE domain = ?');
$stmt->bind_param('s',$domain);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();

$tenantId = $row['tenant_id']; // Get Tenant ID based on current domain

if ($tenantId) {
  $serverConfig = "tenants/$tenantId/config.PHP";
  if (file_exists($serverConfig)){
    return require($serverConfig);
  } else {
    header("Location: https://mysaas.dev"); // No config file found,redirect back to app homepage
  }
} else {
  header("Location: https://mysaas.dev"); // No tenant ID found,redirect back to app homepage
}

在大多数情况下,当我仅测试一堆充满子域的内容时,上述方法就起作用了。

我的问题是,这是否是处理基于子域的传入请求的正确方法,还是在扩大规模时有更有效的方法

如果有成千上万的人都从不同租户的子域中进入该应用程序的入口点,将会扩大规模吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。