一、 基本概念
多租户( Multi-Tenancy)技术是一种软件架构模式,在这种模式下,单一的软件实例为多个独立的租户(Tenant)提供服务。每个租户的数据和配置被逻辑上隔离,确保安全性和隐私,但物理上共享同一套硬件和软件资源。多租户技术包括以下几个基本概念:
· 租户( Tenant) :指使用同一软件实例的独立实体(公司、部门或个人用户)。每个租户的数据和配置逻辑上隔离,确保安全性和隐私。
· 共享资源( Shared Resources) :通过共享计算资源(服务器、存储、网络)降低成本和提高资源利用率。
· 逻辑隔离( Logical Isolation) :通过数据库分区等技术手段实现数据和操作的严格隔离。
· 可定制性( Customizability) :允许租户根据需求定制软件,如界面风格、功能模块和权限配置。
二、 多租户与 Redis
在 Redis中,多租户指的是单个服务器高效地管理各个租户的需求,每个租户都安全地、独立地维护其数据。操作效率和成本效益是这种方法的几个关键优势。因为它最大限度地利用资源,不需要为每个新租户增加额外的物理基础设施,从而简化和扩展业务运营。
通过 Redis,可以在本地或任何受控的云基础设施中创建多租户环境。这一功能对于使用微服务开发内部应用程序特别有价值。通过采用多租户方法,避免了为每个开发、测试或生产环境构建和维护单独基础设施的复杂性和费用。意味着可以并行构建和测试,大大减少了工作量。
三、 Redis的多实例部署
1、 多实例部署
多租户和多实例架构有明显差异。在多实例架构中,每个租户安装一个新的软件实例。下图展示了 Redis多实例架构的示例。在这种情况下,为每个租户部署一个新的Redis实例,以满足租户数据隔离的需求。但是随着租户数量的增加,部署、监控、维护和升级多个软件实例的复杂性也随之增加。
2、 通过虚拟化 /容器化实现多租户
在这种情况下, Redis作为一个容器或虚拟机部署,底层管理系统负责根据需要启动新的Redis实例。多租户在服务器或基础设施级别进行处理,确保每个租户的操作保持隔离和安全。这种方法与多实例设置非常相似,尽管管理层简化了新Redis服务的配置和启动,但需要监控和管理的Redis实例数量没有改变。
许多常见服务如 Amazon ElastiCache采用这种模式。这些服务根据使用的Redis实例数量收费。虽然这种定价模式和服务的可扩展性通常会带来规模效益,但这些效益的获利者往往是服务提供商而非终端用户。
3、 Redis中的多租户
Redis提供软件级别的多租户,单次部署(通常是多节点的集群部署形式)能高效地支持数百个租户。每个租户都被分配到一个独立的Redis接入端点,且与其他租户完全隔离。此举最大化了效率,同时提高了数据库设置的安全性和性能。
在数据中心、私有云或虚拟私有云中部署 Redis,可以充分利用多租户架构的效益优势。只需要准备少量Redis节点的单个集群,就可以支持从开发和测试再到完整生产线上环境的各种业务。此种设置允许在同一基础设施中高效地满足不同租户的不同需求。
四、 Redis的多租户架构是如何工作的
Redis的架构在多层抽象上实现多租户、高可用性、线性扩展和高吞吐量等功能。以下是主要组件的分解:
1、 节点
节点是 Redis软件运行的硬件基础,可以是物理服务器、虚拟机、容器或云实例。
2、 数据管理组件
分片 : Redis的核心是分片,运行在单个CPU核心上的核心实例。管理整个数据集的一个子集,独立运行,以提高性能和可扩展性。
数据库 : 每个数据库都是租户数据的逻辑端点。可以根据数据大小和吞吐量需求,为一个数据库分配多个分片。持久性、复制、驱逐策略以及使用闪存扩展 RAM 等功能都可以在数据库级别进行配置。数据库通过在不同节点上分布主数据库和辅助数据库来确保高可用性。数据库类型包括:
· Simple数据库 : 单个主分片
· 高可用( HA)数据库 : 一个主分片与一个或多个副本分片
· 集群数据库 : 多个主分片,每个分片处理数据集的一个部分
· HA集群数据库 : 多对主分片和副本分片
3、 集群控制组件
零延迟代理( Zero latency proxy) :集成到每个节点的多线程代理,会将 Redis操作从客户端路由到正确的数据库分片。保障了请求将被定向到适当的分片,提供高效操作的基础。
集群管理器( Cluster manager) :由一组分布式进程组成,负责管理整个集群生命周期。与数据平面组件分离,集群管理器负责:
· 数据库调配和取消调配 :确保最佳的资源利用率
· 自动扩展( Automatic scaling) :调整资源以处理高峰工作负载
· 自动重新分区( Automatic resharding) :确保高吞吐量和低延迟性能
· 自动重新平衡( Automatic rebalancing) :保持高吞吐量和实时性能
· 资源管理 :监控整个系统的健康状况
· 节点看门狗( Node watchdog): 监督每个 Redis 节点上的进程,必要时触发分片故障事件
· 集群看门狗( Cluster watchdog): 确保 Redis 集群节点的健康,必要时触发节点故障事件
部署功能非常强大,唯一的限制是集群中可用的总内存。每个数据库端点都被分配一个完全限定域名( FQDN),所有节点上的零延迟代理能有效地将客户端请求重定向到正确的主分片。
五、 通过多租户降低成本并提升效率
Redis的多租户解决方案带来了一些显著的价值:
1、 降低基础设施成本 : Redis通过允许在单个集群中运行多个Redis数据库端点,最大化基础设施利用率。例如,可以在一个简单的三节点集群上运行数百个数据库端点。由于底层的时间片切分机制,运行的数据库实例数量可以远超可用核心数量。Redis在发出需要添加更多资源的信号之前,会利用所有可用的物理资源。相比之下,ElastiCache 等其他解决方案只能为每个节点或集群提供一个数据库端点,与我们的方法相比,这将导致显著的 额外成本 。
2、 无缝扩展 :可以通过添加更多分片并在多个节点上扩展来扩展 Redis数据库。Redis架构确保在此过程中其他租户(此处为数据库)不会受到影响。
3、 针对高可用性、持久性、淘汰和数据大小的微调 :并非所有应用程序对数据持久性和高可用性都有相同的要求。在 Redis中,可以根据应用程序需求调整数据库,而不影响同一节点上运行的其他数据库。
4、 在开发、测试和生产环境中的敏捷性 :一旦设置了 Redis集群,应用程序开发人员可以按需配置Redis数据库端点,而无需担心底层物理或云基础设施。
Redis是一种经过市场验证的多租户解决方案。这可保证所有数据库满足其性能要求,同时保持与其他业务数据库的隔离,并在分布式环境中保持高可用性。Redis易于扩展,在主要云平台(如AWS、Azure和Google Cloud)上运行了超过50,000个数据库端点,近10,000家企业信任我们,并使用Redis来处理其最重要的应用程序。
六、 Redis的无共享架构带来的收益
Redis采用无共享架构,清楚地将数据路径组件(如代理和分片)与控制和管理组件(如集群管理进程)分开。这种架构提供了显著的优势,并解决了关键的多租户挑战:
1、 性能 :该架构允许数据组件实体专注于处理用户请求,提高整体性能。每个分片独立运行,类似于独立的 Redis实例,无需监控其他实例或管理网络分区,这种隔离减少了其他租户带来的干扰。
2、 可用性 :在分片、重新分片重新平衡等工作任务的期间内,应用程序均保持对数据的一致访问,这种无缝的数据可用性由系统自动管理,无需人工干预,保证操作在后台活动中不中断。
3、 安全性和数据隐私 : Redis通过将配置命令限制在安全的CLI、UI或API接口上,并使用基于角色的授权来增强安全性。我们的代理架构确保每个分片仅与经过身份验证的实体连接并处理经过验证的请求,从而防止未经授权的访问并增强租户间的数据隐私。
4、 可管理性 :数据库配置、配置更改和软件更新等管理任务通过单个命令流畅执行,也可通过 UI或API执行。这些任务在不中断用户流量的情况下在集群中执行,确保操作顺畅和资源分配有效。
5、 可扩展性和资源分配 :该架构支持水平扩展,有效地将数据集分布在多个节点、服务器和集群中。这种方法不仅适应增长,还战略性地分配资源,防止任何单个租户独占系统能力。结果是资源在所有租户之间公平分配。
结语
多租户技术从共享计算时代起源,经过多年的发展和演进,已成为现代云计算和 SaaS架构中的关键技术。Redis Enterprise通过高效的多租户支持和创新的架构设计,提供了强大的性能、灵活性和安全性,为企业提供了可靠的解决方案。通过不断优化和改进,Redis Enterprise将在未来继续引领多租户技术的发展。