云计算 10 年后的多租户

云计算 10 年后的多租户

原文:https://medium.com/hackernoon/multi-tenancy-after-10-years-of-cloud-computing-19de782ef899

亚马逊推出 EC2 已经十年了。云是非常真实的。数以千计的系统运行在云中。

多租户从一开始就是与云相关的一个关键概念。它让多个不信任方共享资源,同时给他们一种自己空间的错觉。这种想法的最好例子是一个公寓综合体,它给每个租户自己的空间,同时共享资源,如管道,共享空间,安全,维护等。要使多租户有用,每个租户的资源成本应该低于独家拥有自己的资源(房子)的成本。

云中的多租户应用程序需要管理三种类型的资源:OLTP 执行、数据存储和 OLAP 批处理执行(分析)。举个例子,想象一个有 web 应用程序或移动应用程序的应用程序。该应用程序将有一套服务,为应用程序提供后端,一个数据库和一个系统来处理其分析。由于最先进的架构是使用无状态的服务器、独立的数据库和独立的分析系统构建的,因此我们可以针对数据、执行和分析的各个方面单独处理多租户。让我们来探索这些方面,并讨论支持它们的技术。

执行多租户

云可以实现不同层次的共享。

  1. 给每个租户他自己的机器。
  2. 为每个租户提供自己的虚拟机
  3. 为每个租户提供自己的集装箱(如码头工人)
  4. 让多个租户共享同一个进程(例如 JVM)

随着列表的下降,每一个都获得了更多的资源共享,但更少的隔离(安全性)。IaaS(基础设施即服务)平台提供了上述列表中的第二级。PaaS 和 SaaS 提供商应在 2-3 个中选择。

如果使用得当,云的一个关键优势是用户只需“为她使用的东西付费”。基本上,可用是没有成本的,而是只有在被使用时才需要付费。对于 AWS 等 IaaS,这几乎是免费的,因为它通过虚拟机在用户之间共享硬件。

然而,“按使用付费”对于 PaaS 和 SaaS 来说并不是免费的。让我们假设云提供商“XCloud”拥有 100 万用户,他们已经在 XCloud 中部署了他们的 PaaS/SaaS 应用。

在给定的时间内,只有几百到几千个这样的应用是活跃的。但是,我们不知道哪些应用程序。因此,当用户突然来到 XCloud for AppY 时,我们需要能够为他提供服务。我们有两个选择。

  1. 保持每个应用程序的至少一个实例运行
  2. 当用户到达时,快速启动应用程序。

方案一真的很浪费。想想 AppY 就是 Gmail,谷歌不想一直为每个 Gmail 账户运行一个 VM。如果他们为每个用户运行一个 once 实例,他们很难让用户只在使用应用时付费。

这就是虚拟机与容器或进程内多租户的区别。虚拟机需要几秒到几分钟的时间来启动,除非你的应用非常简单,否则你无法快速启动它来为新用户服务。通常,您需要在不到十秒钟的时间内返回给用户。

像 docker 这样的容器解决了这个问题。它们是轻量级虚拟机,可以在几毫秒内启动。想想 Gmail 的例子,难怪容器来自谷歌,因为它们也有同样的问题。值得注意的是,使用 docker 并不能保证你的应用程序会快速启动,你很可能会在你的应用程序代码中弄糟它。然而,通过仔细编码,您通常可以达到目标。因此,容器消除了基础设施增加的主要开销。

另一个有趣的地方是,这就是微服务和基于 docker 的系统对开始时间如此感兴趣的原因。如果您的系统能够足够快地启动来为用户服务,这将节省大量成本,因为您不需要让每个应用程序的一个实例一直运行。此外,它还将极大地简化自动缩放算法,因为该算法不需要预测负载并保持实例运行的缓冲区来计算启动时间。

比较容器和进程内多租户(我们列表中的第 4 级),后者可能更有效。我们在这方面已经做了很多工作[1,2]。然而,回想起来,共享一个进程看起来很可怕,因为你需要相信平台的程序员没有犯错误。此外,进程内多租户的性能隔离也很棘手。

看起来云计算已经解决了基于容器的多租户执行问题,这是一个中间地带。容器提供可接受的性能和隔离。回想起来,这是个明智的选择。

最后,有一个更简单的解决方案,在某些情况下有效。

值得注意的是,如果您的服务器是无状态的,这是大多数企业部署中的情况,那么您完全可以不使用多租户。如果服务器是无状态的,它可以查看请求,找出租户,并及时执行该租户所需的操作,那么就不需要多租户。相反,你可以运行一个所有租户共用的服务器池,并在用户到达时为每个应用分配一个服务器。对于数据,您可以使用多租户数据库,如下一节所述。如果这种解决方案可行,它将显著降低您架构的复杂性。

数据多租户

重启后,虚拟机和容器都会丢失磁盘。因此,多租户有状态服务器(如数据库、消息代理等)比在容器中运行它们要复杂得多。一种选择是使用装载的磁盘,如 S3 或块设备。然而,这可能会很慢。对于大多数应用程序,我们需要使用运行在适当硬件之上的数据库系统。

即使在硬件之上,我们也需要跨租户共享存储。有几种选择。文章多租户数据架构提供了这些选择的一个很好的概述,除了下面的选择#5,在撰写本文时它还不存在。

  1. 每个租户一台数据库服务器
  2. 每个租户一个数据库(多个租户共享同一个服务器)
  3. 每位房客一张桌子
  4. 房客共用的桌子
  5. 多租户感知数据库

共享数据库服务器或数据库的方法#1 和#2 在 IaaS 设置中是可以接受的,但是对于 PaaS 或 SaaS 设置来说过于昂贵。例如,为每个租户保留一百万个数据库是不现实的。

方法#3,为每个租户提供一个表,比方法#1 和方法#2 好,但是如果我们讨论的是百万租户,这仍然是禁止的。

方法#4,在许多租户之间共享一个表,提供了必要的性能。然而,所有租户都需要使用这种方法共享相同的模式,这对于大多数 PaaS 和 SaaS 场景来说是可以接受的。就像进程内多租户一样,为了隔离,我们需要相信数据库系统的程序员不会犯任何错误。然而,验证 SQL 过滤比验证与进程内多租户一起使用的 Java 或 C++代码更容易。

第五种方法(例如 Oracle 现在有一个多租户数据库服务器)将提供最好的结果。如果仔细实施,它可以在数据库级别提供#4 级别或更好的性能和隔离。尽管我们不得不相信 RDBMS 开发人员不会出错,但我相信在 RDBMS 中有更好的机会处理隔离。此外,数据库开发人员可能会更好地理解该领域,这将让他们做得更好。

分析多租户

多亏了大数据,一切都必须有分析。对于大多数 SaaS 应用程序来说,分析已经成为一种竞争优势。分析的多租户需求不同于我们迄今为止考虑过的 OLTP 用例。在 PaaS 或 SaaS 环境中实施它们需要解决几个挑战。

分析包括数据收集、数据存储、运行分析,并提供对结果的受控访问。云提供商可以采取以下措施来促进数据收集。

  • 添加仪器以跟踪交易
  • 提供用户可以放入其应用程序的数据收集器操作符
  • 提供一个数据接收器 API(例如 REST/JSON API ),用户可以向其发布事件

每种方法都应该跟踪每个事件的租户和用户信息。

在处理其余部分时,存储、分析和数据收集的解决方案相互交织在一起。在我看来,答案取决于用户需要什么的几个问题。

  1. 所有租户共享同一个模式吗?他们应该能够定义自己的事件类型吗?
  2. 用户需要用户级的数据隔离吗,或者他们能接受租户级的隔离吗?
  3. 用户和租户需要运行他们自己的查询(分析)吗,或者他们可以接受预先设置的查询吗?

基于这些需求,解决方案会发生变化。让我们来看看每个解决方案。

使用超级租户空间

如果 PaaS 控制数据生成、数据分析和最终结果的呈现,那么系统可以将数据推送到超级租户存储中,并自己处理权限。虽然这可能是一个无聊的解决方案,但这是大多数 SaaS 应用程序的常见用例,它提供了用户的预煮分析,仅此而已。如果用户想自己做分析,系统可以提供一种导出数据的方法。

按列过滤的共享表

就像数据存储一样,如果所有用户都可以共享同一套表(模式),那么我们只需向表中添加一个用户和租户列就可以存储数据。这工作得很好。然而,将所有权分配给由分析计算出的数据的结果有一些复杂性。因此,分析逻辑(例如 Hadoop 作业)必须通过添加所有权数据作为数据记录的一部分来解析每个记录的所有权。另一个优势是,使用这种方法,PaaS 可以对使用“group by”操作符分区的所有数据运行一次单一的分析查询集。

租户自己的空间

给每个租客提供一个私人空间是最灵活的。它为最终用户提供了大部分控制。每个租户都可以拥有自己的模式和分析查询。

像往常一样,这种灵活性需要付费。由于几个原因,它很贵。

  1. 如果有很多租户,那么如果使用传统的数据库,为每个租户提供一个数据库表是一个问题,因为它们不是为处理数百万个表或数据库而设计的。如前所述,一种解决方案是使用本机多租户数据库(例如 Oracle 12 )。否则,PaaS 需要处理许多数据库服务器和这些服务器之间的分区表,这将非常复杂。
  2. 与早期的方法不同,在早期的方法中,SaaS 可以运行单个分析作业来处理所有租户的数据(例如,使用“分组依据”进行分区),拥有一个租户自己的空间将需要每个租户的分析作业。通常,启动分析作业会产生巨大的开销。因此,与运行单个作业相比,运行多个作业会明显变慢。在这种情况下,SaaS 需要一个更大的计算集群。另一个挑战是,用户可能会运行繁重的任务,这会占用集群并降低其他集群的速度。因此,SaaS 需要一种方法来限制单个租户使用的计算能力。

有可能实现混合解决方案,其中 SaaS 为共享数据提供共享模式,并为用户定义的数据提供租户自己的空间。PaaS 会向用户收取私人空间的额外费用,从而限制用户数量。无论哪种情况,成本都将与租户生成的数据成比例,因此需要相应调整成本结构。

结论

经过十年的云计算,有成千上万的系统运行在云中。本文探讨了多租户,这是云中的一个关键概念。多租户是指在同一系统中运行多个租户(用户)的能力。在实现多租户时,云可以在多个隔离级别之间进行选择,从使用虚拟机共享相同的硬件到通过巧妙的编程共享相同的进程。我们探索了如何构建多租户应用程序。云中的多租户应用程序需要管理三种类型的资源:执行、数据存储和 OLAP 批处理执行(分析)。我们研究了每一个,发现执行正在向容器和数据库聚合,向多租户数据库聚合。此外,本文讨论了支持多租户分析的几种解决方案。

参考

  1. 米林达·帕蒂拉格、斯里纳斯·佩雷拉、桑吉瓦·威拉拉娜、印迪卡·鸠摩罗王,《业务流程执行的多租户架构》,第九届国际网络服务大会(ICWS),2011 年
  2. 阿夫卡姆·阿泽斯、斯利纳特·佩雷拉、迪穆图·加马热、婉如·林顿、普拉巴斯·西里瓦尔达纳、迪穆图·利拉拉特纳、桑吉瓦·威瓦拉纳、保罗·弗里曼特尔,《云计算的多租户 SOA 中间件》,第三届国际云计算大会,佛罗里达州,2010 年

希望这是有用的,如果你喜欢这篇文章,你可能也会发现下面的内容很有趣。

[## 掌握微服务架构中的四种平衡行为

微服务是使用简单、轻量级、松散耦合的服务构建系统的新架构风格…

medium.com](/systems-architectures/walking-the-microservices-path-towards-loose-coupling-few-pitfalls-4067bf5e497a) [## 大数据编年史:一部技术喜剧

第一幕:谷歌不喜欢数据库

hackernoon.com](https://hackernoon.com/story-of-big-data-a-technical-comedy-98630e9bd6bf)

黑客中午是黑客如何开始他们的下午。我们是 @AMI 家庭的一员。我们现在接受投稿,并乐意讨论广告&赞助机会。

要了解更多信息,请阅读我们的“关于”页面在脸书上点赞/给我们发消息,或者简单地说, tweet/DM @HackerNoon。

如果你喜欢这个故事,我们推荐你阅读我们的最新科技故事趋势科技故事。直到下一次,不要把世界的现实想当然!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除