从分时到 SaaS
多租户的想法早在数十年前就已诞生。上世纪 60 年代,拥有功能强大且价格昂贵的大型机的多所大学开发出了分时软件,使多个用户能够基本上同时访问计算机。
几十年来,这一想法从未消失。如今,正是多租户的概念让云计算成为可能。公共云中拥有大量共享资源(处理能力和内存),可以将其分配给多个租户。即使每个租户的数据和工作负载恰好在同一台物理计算机或同一组计算机上运行,它们也会保持隔离状态。
如果我们将这一思路进一步应用到软件架构中,现代的 SaaS 概念便应运而生。SaaS 提供商将运行某个应用的单个实例,并为各个客户提供访问权限。即使多个用户在访问同一软件,每个用户的数据仍会彼此隔离。
当涉及 Kubernetes 等容器编排平台时,多租户一词通常是指为多个项目提供服务的单个集群。系统会对集群进行配置,从而让每个项目都独立运行。
多租户与云计算
如前所示,多租户作为一个概念是云计算的一个重要特征,因其是软件应用的单个实例,提供给多个租户。多租户通常和 SaaS 应用相关,与之不同,云被视为平台即服务(PaaS)。
云服务提供商从资源池中为用户提供云计算所需的平台和底层 IT 基础架构,这些资源被分配给多个用户(或租户)。
云架构是指构建云所需的所有组件和功能如何连接起来,以便交付供应用运行的在线平台。
构造云平台要求进行其他层次的开发,以融入容器化、编排、应用编程接口(API)、路由、安全、管理和自动化软件。
公共云架构:一种利用非最终用户所有的资源创建的云环境,可重新分发给其他租户。
私有云架构:可广义地定义为一种专为最终用户而创建,而且通常位于用户的防火墙内(有时也是内部部署)的云环境。
多租户架构的优势
多租户具有很多优势,这一点在云计算中可谓显而易见。
多租户可以节省成本。计算规模越大,成本就越低,并且多租户还允许对资源进行有效地整合和分配,最终节省运营成本。对于个人用户而言,访问云服务或 SaaS 应用所需的费用通常要比运行单租户硬件和软件更具成本效益。
多租户可以提高灵活性。如果您选择自行购置硬件和软件,那么在需求旺盛时可能会难以满足需求,而在需求疲软时则可能会闲置不用。另一方面,多租户云却可以根据用户的需要来灵活地扩展和缩减资源池。作为公共云提供商的客户,您可以在需要时获得额外容量,而在不需要时则无需付费。
多租户可以提高效率。多租户消除了单个用户管理基础架构及处理更新和维护的必要。每个租户都可以依靠中央云提供商(而不用自己组建团队)来处理这些日常琐事。
云的潜力巨大。
什么时候更适合选择单租户架构
尽管多租户有诸多优点,但仍有一些用例更适合单租户计算机系统,例如,私有云或使用您自有的数据中心。
其中,最主要的是涉及高度敏感数据的应用的数据安全。公共云环境和 SaaS 产品的确会隔离工作负载和数据,并且依据设计会妥善保留工作记录。但在受控测试中,研究人员还是发现了可能(至少在理论上)会在云环境中进行跨租户攻击的漏洞。
其实,这些风险相对来说微乎其微。根据美国国家安全局 2020 年有关云漏洞的报告,共享式租赁的漏洞非常少见,而且需要尖端技术才能实现。美国国家安全局(NSA)的报告称,目前还没有任何针对主要公共云提供商的跨租户攻击记录。NSA 认为,这些风险要小于因访问控制不当和配置错误而引起的风险。
Linux 中的多租户环境
任何设置多租户环境的人都将面临是用虚拟机(VM)还是用容器来隔离环境的选择。
如果使用虚拟机,虚拟机监控程序就会启动客户机,而每个客户机都有自己的操作系统及相应的应用和依赖项。同时,虚拟机监控程序还会确保用户之间彼此隔离。
相比虚拟机,容器更加轻便、灵活且易于扩展。通过在单个主机上部署多个应用,并且使用内核和容器运行时来启动每个容器,容器可以简化多租户部署。与虚拟机(每个都包含自己的内核)相比,在容器中运行的应用则共享一个内核(甚至在多个租户之间)。
在 Linux® 中,命名空间使得多个容器可以同时使用同一资源而不会产生冲突。确保容器的安全就等同于确保所有运行中进程的安全。
使用 Kubernetes 进行容器编排时,可以利用单个 Kubernetes 集群来设置多租户环境。您可以将租户分隔到自己的命名空间中,并创建能强制执行租户隔离的策略。