谈一谈文件系统的多租户实践

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 为了保证多租户场景下,单个用户可以获得与独占资源时相同的体验,云服务需要综合利用负载均衡、请求优先级调度、实例隔离等多项技术,让用户流量恰当地分布在整个集群中。

多租户是云服务的重要属性。通过集群级别调度云服务实例,亦或是机器级别调度来自不同云服务实例的请求,云服务既要保证整个集群的物理资源都得到高效的利用,同时也要保证每个租户都能达到预期的性能指标。


1.多租户与QoS的必要性


云作为一种通用资源,为各行各业提供了强大的计算与存储能力,避免了用户自建基础设施、自行维护各类服务等所带来的开销。云服务通过负载均衡、隔离及QoS等技术,以及有限的物理资源服务了海量的用户。同时,从单个用户的视角看来,其性能与独占物理资源时的相比,没有明显的差异。


为了保证多租户场景下,单个用户可以获得与独占资源时相同的体验,云服务需要综合利用负载均衡、请求优先级调度、实例隔离等多项技术,让用户流量恰当地分布在整个集群中。另外,处理多个云服务实例请求的单个服务节点,需要公平地处理来自所有云服务实例的请求,避免请求饥饿及大负载实例对小负载实例的影响,保证每个云服务实例都能够达到其相应的服务等级。


2.多租户与QoS的一般技术


多租户与QoS的一般技术包含两个维度:一是集群维度,一是节点维度。


从集群维度来讲,云服务需要使用最少的资源来服务最多的云服务实例。云服务会通过动态负载均衡技术,将若干云服务实例调度到同一服务节点上,保证此服务节点不过载,且能够满足运行在其上的云服务实例的负载。云服务实例的压力是动态变化的,当某些云服务实例压力变大,导致某一个服务节点过载时,云服务的负载均衡器需要及时识别出来,并将部分压力迁移到闲置的服务节点上。如果服务节点不足,需要对整个集群进行扩容。在进行调度时,除了尽量均衡地分散压力,还需要限制某个用户的所有云服务实例或者单个云服务实例的若干分区的分布,以保证某个服务节点异常时,受影响的用户数尽可能少。从节点维度来讲,多租户的核心是保障每个租户的服务质量,使其延时和吞吐不受其他租户负载的影响。


总体而言,多租户系统需要具有保护底层资源的能力,同时,保证租户的公平性和服务质量的优先级。而这其中,便涉及资源保护、公平调度和优先级调度三个问题。


(1)资源保护

资源一般有两个属性。


· 容量:指底层资源提供的最大能力,例如NVMeSSD可以提供100万次的IOPS和2Gbps的数据吞吐量。当达到资源的容量上限时,资源的访问延时会加长,性能变差。

· 并发度:指资源支持的若干并发度。当提交的并发请求超过系统所能承受的上限时,也会导致资源的访问延时加长。


资源保护也是从对以上两个属性的限制入手的:限制容量即以一个非常小的时间片来限制IOPS;限制并发度即通过限制资源上的请求数的方式来达到保护资源的目的。


限制容量一方面可以保护底层资源,另一方面也可以显示限制租户的配额,从而明确地衡量与限制某个租户的资源占用。然而,当底层资源由于种种原因出现性能抖动时,如果多租户系统无法及时感知并阻断新请求的提交,那么等待使用资源的请求会持续堆积,导致整个系统出现雪崩现象。


限制并发度可以很好地处理底层资源的性能抖动。同时,为了限制租户的配额,还需要额外添加一层应用层的容量限流。


(2)公平调度

给定若干租户的任务后,调度决定了何时执行某一条请求,公平意味着不同租户的请求可以以相同的概率得到执行,从而达到所有租户平均排队时间最短、平均延时最小的目标。


为了解耦请求的接收与处理,一般请求被接收后,会被插入一个任务队列中,等待业务模块去执行。单个共享的任务队列和多租户是矛盾的,当所有租户的请求在一个任务队列中排队时,很难将一个租户的负载与其他租户的负载隔离,为了达成“所有租户延时最坏只与租户数T线性相关,与其他租户负载无关”的目的,多租户系统需要为每个租户提供一个自己的任务队列,这是公平调度的基础。


在请求被插入任务队列中后,调度器会以特定的策略来将队列中的任务提交到业务模块执行,如FIFO、Round Robin、Priority等典型策略。通过多任务队列,以及恰当的调度策略,单个服务节点上的不同租户的请求可以得到公平的调度与执行,从而给予单个租户独占系统的假象。


(3)优先级调度

在进行调度请求时,第一目标是公平调度。然而,某些租户具有一些特殊属性,如延时敏感、业务重要性高等。对于此类租户,多租户系统在调度时会给予资源倾斜,以保证他们延时更短,或者在资源被用满时,优先保证他们的服务质量。


3.文件存储的多租户实践


不同租户间的负载情况千差万别,同一租户低峰时段与高峰时段之间的压力差异也十分巨大。同时,文件操作是不等质的,不同类型请求对服务资源的消耗显著不同,例如,获取单个文件的属性与将一个文件重命名到另外一个目录下,这两者的开销相差极大。为了高效服务各式负载与各类请求,文件存储实现了集群负载均衡,同时引入了节点QoS机制。


(1)集群负载均衡

为了充分使用集群能力,文件存储通过一个集群负载均衡器来对元数据节点进行负载均衡。当检测到某个元数据节点过载时,负载均衡器会负责将过载节点上的部分实例迁出,保证单个元数据节点上的所有文件系统实例都能够获取足够的资源来完成请求处理。


(2)节点QoS机制

文件存储单个元数据节点上采用了如下图所示的架构进行多租户的QoS控制,具体说明如下:


· 外部接口层:QoS对外提供提交任务(Submit Task)接口。租户请求进入Qos系统时,系统为每个租户维护一个任务队列(Task Queue),任务请求进入对应队列的尾部。

· 调度层:对若干任务队列进行调度,保证每个租户可以公平地使用底层的共享物理资源。对于特殊租户,调度层会给予一定优先级进行优先调度。

· 资源保护层:资源保护层封装底层的共享物理资源,通过对并发度的控制来主动控制下发到底层资源的流量。当底层资源空闲时,主动从调度层获取任务来执行。

文件存储元数据节点架构.png

文件存储元数据节点架构


在这样的架构设计下,首先,将请求按照租户粒度抽象成多个队列,每个租户维护自己的请求队列,避免单个租户打爆系统资源队列引起的毛刺;其次,通过调度层对租户任务队列进行调度,将请求的任务队列控制在QoS系统内,实现租户的公平调度,避免因底层的共享物理资源排队过深而导致延时和优先级无法得到保证的情况发生;再次,控制单个租户任务队列对底层的共享物理资源的占用,避免单个租户用尽底层的共享物理资源;最后,通过资源保护层控制请求下发,避免在底层的共享物理资源性能退化时,因请求无限堆积而引发系统崩溃。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
存储 索引
操作系统基础:文件系统基础【上】
操作系统基础:文件系统基础【上】
|
4月前
|
Cloud Native Devops 数据库
云原生架构:未来软件开发的引擎深入理解操作系统的虚拟内存管理
【7月更文挑战第30天】在这篇文章中,我们将深入探讨云原生架构的概念,以及它如何改变软件开发的世界。我们将从云原生的基本概念开始,然后深入到它的关键技术和实践,最后讨论它对软件开发的未来影响。无论你是软件开发者,还是IT专业人士,这篇文章都将为你提供深入理解和掌握云原生架构的重要信息。 【7月更文挑战第30天】在数字世界的构建中,虚拟内存是操作系统不可或缺的一环。本文将探索虚拟内存的核心概念、工作机制及其对现代计算环境的重要性,同时揭示其背后的技术细节和面临的挑战。
40 3
|
6月前
|
数据安全/隐私保护 索引 Windows
操作系统基础:文件系统基础【下】
操作系统基础:文件系统基础【下】
|
6月前
|
运维 Cloud Native 持续交付
构建未来:以云原生为基石的分布式系统架构深入理解操作系统的内存管理机制
【4月更文挑战第30天】 随着企业数字化转型的不断深入,传统的IT架构已难以满足市场对于敏捷性、可扩展性和成本效益的需求。云原生技术作为推动这一变革的关键因素,其设计理念和实现方式正在重塑软件开发和运维模式。本文将探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)、以及无服务器计算等,并分析其在构建分布式系统中的作用与挑战。通过实际案例,我们将展示如何利用云原生技术构建高效、弹性和可维护的分布式系统。
|
6月前
|
存储 分布式计算 Hadoop
带你了解文件系统架构的演变:从传统到分布式
带你了解文件系统架构的演变:从传统到分布式
378 0
|
存储 分布式计算 运维
大白话讲讲分布式存储系统的架构设计以及容错架构
分布式存储系统的架构设计旨在实现数据的分布式存储和负载均衡,通常采用数据分片和多节点存储的方式。容错架构则是为了提高系统的鲁棒性和可用性。在分布式存储系统中,容错架构常采用数据的冗余备份来应对节点故障或网络异常问题。通过复制数据到多个节点,即使某个节点发生故障,系统仍可以提供数据的可靠访问。此外,容错架构还包括故障检测和自动故障转移机制,用于及时检测节点故障,并将故障节点的任务转移给其他正常节点。这样可以保证系统在故障情况下仍能正常运行,并提供不间断的数据访问。通过合理的架构设计和有效的容错机制,分布式存储系统可以实现高可用性和数据可靠性,满足大规模数据存储和访问的需求。
1043 0
大白话讲讲分布式存储系统的架构设计以及容错架构
|
存储 测试技术 块存储
阿里云块存储团队软件工程实践【对外版】
作者:晴筱、石超、张小路序“我背上有个背篓,里面装了很多血泪换来的经验教训,我看着你们在台下嗷嗷待哺想要这个背篓里的东西,但事实上我给不了你们”,实践出真知。 这是阿里云块存储团队内部的一次新人培训材料,内容源自老同学们的踩坑经验,总结成案例和方法分享公示,实践和方法论不限于分布式系统,希望对读者有启发。本文主要包括以下三个方面:编码习惯(开发、测试、Review,Bad/Good Case)研发
898 5
阿里云块存储团队软件工程实践【对外版】
|
API 数据库 数据安全/隐私保护
分布式系统中,权限设计实践
采用合理的策略去管理资源的权限并不是一件简单的事,通常随着业务和系统的不断扩展,对权限体系都会带来直接的影响,所以在做结构设计时,需要相对复杂但又要避免过度复杂。
466 0
分布式系统中,权限设计实践
|
存储 缓存 Kubernetes
Longhorn 云原生分布式块存储解决方案设计架构和概念
Longhorn 云原生分布式块存储解决方案设计架构和概念
1298 0
Longhorn 云原生分布式块存储解决方案设计架构和概念
|
存储 机器学习/深度学习 分布式计算
学习分布式存储应该从哪几方面着手?
学习分布式存储应该从哪几方面着手?