第八章 多租户和通用硬件入门
本入门指南介绍了多租户和通用硬件,并解释了云平台为何使用它们。
云平台以成本效益为目标进行优化。这种优化部分源于对运行在经济高效硬件上的服务的充分利用,例如运行在通用硬件上的多租户服务。
构建云平台时做出的决策也会影响运行在其上的应用程序。云原生应用程序的架构会受到水平扩展和故障处理能力的影响。
多租户
多租户是指多个租户共享一个系统。通常,该系统是一个软件应用程序,由一家公司(主机)运营,供其他公司(租户)使用。每个租户公司都有各自的员工访问该软件。租户公司的所有员工都可以连接到该应用程序,而其他租户则不可见;这让每个租户感觉自己是唯一使用该软件的客户。
在云端,多租户服务已成为标准配置:数据服务、DNS 服务、虚拟机硬件、负载均衡器、身份管理等等。云数据中心针对高硬件利用率进行了优化,从而降低了成本。
安全性和性能管理是两个常见的关注点。
安全性
在多租户服务中,每个租户都会被置于一个安全沙箱中,该沙箱限制了其了解其他租户信息的能力,甚至包括其他租户的存在。不同的服务采用不同的方式处理安全问题。例如,虚拟机管理程序负责管理虚拟机的安全,关系数据库具有强大的用户管理功能,而云存储则使用加密密钥作为控制手段。
与公寓楼里的住户不同,您不会遇到邻居,也不需要记住他们的名字。如果租户隔离成功,您就会感觉自己是唯一的租户。
性能管理
多租户环境中的应用程序会竞争系统资源。云平台负责公平地管理租户之间相互竞争的资源需求。目标是在所有服务实例中实现高硬件利用率,同时不影响租户的性能或行为。一种策略是对单个租户强制执行配额,以防止它们占用过多的共享资源。另一种策略是将资源需求高的租户与资源需求低的租户部署在一起。当然,资源需求是动态的,因此也难以预测。云平台会持续监控、重组(迁移租户)并横向扩展服务实例——但这一切都是透明进行的。请参阅自动缩放模式(第 4 章)。
这种自动化性能管理在非云环境中并不常见,但了解这种方法至关重要,因为它会影响您的云原生应用程序。
多租户对应用逻辑的影响
虽然云平台能够很好地监控活跃租户并持续重新平衡资源,但在某些情况下,突发的活动可能会暂时使服务实例不堪重负。当多个应用程序突然变得非常繁忙时,就会发生这种情况。会发生什么呢?云平台会主动决定如何根据需要重新分配租户,但在此期间(通常为几秒到几分钟),尝试访问这些资源可能会遇到瞬态故障,表现为忙音。有关如何响应瞬态故障或忙音的更多信息,请参阅忙音模式(第 9 章)。
通用硬件
云平台使用通用硬件构建。与低端硬件或高端硬件不同,通用硬件处于中间位置,之所以选择它,是因为它具有最具吸引力的性价比;它是性价比最高的硬件。高端硬件比通用硬件更昂贵。内存和 CPU 核心数量翻倍,总成本通常也会翻倍以上。成本效益是使用云数据中心的主要驱动力。
这是一个有助于优化云成本的经济决策。应用程序面临的主要挑战是,通用硬件的故障率远高于高端硬件。
从平均故障间隔时间 (MTBF) 到平均恢复时间 (MTTR) 的转变
传统应用开发理念强调尽可能缩短平均故障间隔时间 (MTBF),这意味着我们竭尽全力确保硬件不发生故障。这体现在高端硬件、冗余组件(例如 RAID 磁盘驱动器和多个电源)以及冗余服务器(例如,对于最关键的系统,只有在主服务器发生故障时才会启用备用服务器)。有时,一旦硬件发生故障,应用程序就会停机,直到人工修复问题。构建能够轻松应对硬件故障的软件成本高昂且复杂,因此我们主要通过硬件来解决这个问题。
云原生领域的新理念强调尽可能缩短平均恢复时间 (MTTR),这意味着我们竭尽全力确保即使硬件发生故障,也只会影响部分应用程序功能,应用程序仍能继续运行。与本书中的模式以及主流云平台提供的服务相一致,这种方法不仅可行,而且由于其大幅降低复杂性和带来新的经济效益,也极具吸引力。
云平台假定大部分平均修复时间 (MTTR) 的工作都通过自动化完成,但同时也对您的应用程序提出了要求,从而在故障处理方面与您建立某种合作关系。
通用硬件对应用逻辑的影响
云原生应用预期会发生故障,并且能够检测并自动从常见故障场景中恢复。某些故障场景的出现是因为应用依赖于通用硬件。
故障可能仅仅是由于特定物理服务器的问题,例如内存故障、磁盘驱动器崩溃或咖啡洒在主板上。其他情况则源于软件故障。有关如何响应单个节点级别故障的更多信息,请参阅节点故障模式(第 10 章)。
刚才描述的故障场景可能显而易见:您的应用程序代码运行在通用硬件上,当该硬件发生故障时,您的应用程序会受到影响。但不太明显的是,您的应用程序所依赖的云服务(数据库、持久文件存储、消息传递等)也运行在通用硬件上。当这些服务因硬件故障而中断时,您的应用程序也可能受到影响。在许多情况下,云平台服务可以恢复,不会出现任何明显的性能下降,但有时容量会暂时降低,迫使调用应用程序处理瞬态故障。有关如何应对调用云服务期间遇到的故障的更多信息,请参阅第 3 章。
同构硬件
云数据中心也致力于使用同构硬件,以简化资源管理和维护。大规模采购同构硬件可以通过价格低廉且易于获取的通用硬件来实现。
只要虚拟机中分配的容量保持可预测性,硬件的同构程度不太可能直接影响应用程序。
总结
云平台供应商在成本效益方面做出的选择会直接影响应用程序的架构。应对故障的架构设计是云原生应用程序区别于传统应用程序的关键所在。云原生应用程序并非试图完全避免故障,而是将故障处理作为云平台和应用程序的共同责任。