云计算中单租户与多租户的比较

💡 原文中文,约3400字,阅读约需8分钟。
📝

内容提要

过去几年中,单租户架构的多消费者应用程序逐渐转向多租户架构。单租户架构开发速度快、部署影响小,但存在资源和并发操作限制。多租户架构可以减少资源量、降低并发限制,提高部署速度,但也带来新的挑战。文章介绍了单租户和多租户架构的优缺点,并提出了区域或蜂窝设计来减小爆炸半径。选择哪种架构取决于业务环境和优先级。

🔎

延伸解读

单租户的隐性成本:资源配额与并发限制

文章以实际案例说明,单租户架构虽简化了隔离与部署,但会快速消耗AWS账户级配额。例如IAM角色上限5000个,在560个堆栈下每个堆栈仅能分配约8个角色,迫使团队合并角色,牺牲最小特权原则。并发操作限制同样棘手:同时更新100个堆栈会触发Lambda控制平面每秒15次请求的上限,导致CloudFormation更新失败甚至回滚失败。这些限制并非理论风险,而是单租户规模化后的必然瓶颈。

多租户的代价:爆炸半径与运行时配置

转向多租户能减少资源量、降低并发限制并加快部署,但文章指出其代价同样明确。服务无法在部署时配置,需在运行时通过推或拉机制获取最新配置并保持本地状态,增加了复杂性。更关键的是爆炸半径显著扩大,涵盖部署、安全和节流三个维度:一次错误部署或一个吵闹的租户可能影响所有租户。因此,多租户并非免费午餐,而是用隔离性换取可扩展性。

中间道路:区域或蜂窝设计如何平衡利弊

文章强调单租户与多租户并非二元选择。区域、分层或基于单元的架构将大型多租户系统拆分为更小的块,每个块内部仍是多租户,但块之间相互隔离。以EBE为例,团队考虑分层架构:第3层用于测试,第2层为非关键租户,第1层为关键生产负载。部署先覆盖高层,稳定后再推进到下一层。这种方式缩小了爆炸半径并提升隔离性,代价是稍多的资源和更慢的部署速度。

决策依据:业务阶段与优先级决定架构

文章结论指出,架构选择取决于业务环境、应用生命周期阶段和利益相关者优先级。若客户数量有限且稳定,单租户可作为长期方案;若需要无限规模,多租户是云提供商资源限制下服务大量客户的唯一途径。但多租户本质更复杂,影响开发速度和运营开销,并增加事故潜在影响。因此,没有绝对优劣,只有与当前阶段匹配的权衡。

❓

Q&A

单租户架构有哪些优点和缺点?

单租户架构的优点包括:开发速度快、易于理解和维护、部署影响范围小、能最大限度减少吵闹的邻居问题。缺点包括:受AWS账户最大资源数量限制(如IAM角色最多5000个)、受AWS服务最大并发操作数限制(如Lambda控制平面每秒15个请求),导致部署速度慢。

多租户架构有什么优势和挑战?

多租户架构的优势:减少资源量、降低达到并发限制的可能性、提高部署速度。挑战:无法在部署时配置服务,需在运行时检索配置;爆炸半径显著增加(部署、安全、节流);服务复杂性增加,出错风险更高。

为什么单租户架构会遇到可扩展性限制?

单租户架构会遇到可扩展性限制,主要因为AWS账户有最大资源数量限制(如IAM角色最多5000个)和AWS服务有最大并发操作数限制(如Lambda控制平面每秒15个请求)。当堆栈数量增多时,这些限制会导致部署失败和速率限制问题。

如何减小多租户架构的爆炸半径?

可以通过采用区域、分层或基于单元的架构来减小爆炸半径。这些中间方案将大型多租户系统分成更小的块,每个块仍是多租户系统,但具有更好的隔离性。例如,分层架构将租户分为不同层,部署先覆盖高层,稳定后再推广到下一层。

单租户和多租户架构之间如何选择?

选择取决于业务环境、应用程序生命周期的阶段和利益相关者的优先级。单租户适合快速启动、客户数量有限的情况;多租户适合需要无限规模、服务大量客户的场景。也可以考虑区域、分层或基于单元的架构作为中间方案。

什么是区域或蜂窝设计?它有什么作用?

区域或蜂窝设计是一种中间架构方案,将大型多租户系统分成更小的块(如区域、单元),每个块仍是多租户系统,但具有更好的隔离性。作用:减小爆炸半径,限制事件影响,让开发人员及早发现问题,但会增加额外复杂性并减少多租户的一些好处。

🏷️

标签

➡️

继续阅读