⼤数据云平台Greenplum:多租户篇
Greenplum 是最出⾊的开源MPP数据库,经过15年的发展,从数据仓库发展成了云时代的理想⼤数据平台。
本系列⽂章将从各个⽅⾯介绍Greenplum对云的⽀持。本篇侧重多租户。
1. 什么是多租户
多租户指⼀套系统能够⽀撑多个租户。⼀个租户通常是具有相似访问模式和权限的⼀组⽤户,典型的租户是同⼀个组织或者公司的若⼲⽤户。
要实现多租户,⾸先需要考虑的是数据层⾯的多租户。数据层的多租户模型对上层服务和应⽤的多租户实现有突出影响。本⽂重点介绍数据层多租户及Greenplum数据库对各种多租户模型的⽀持。
权衡不同的多租户实现⽅式时,需要考虑如下因素:
扩展性:租户数量级别,以及未来发展趋势
安全性:租户之间数据隔离级别要求
资源共享:多租户通常有某种形式的资源共享,需要避免某个租户的糟糕SQL吃掉系统资源,影响其他租户的响应时间
灵活性:不同租户可能有不同的需求,对特定租户需求的扩展能⼒
跨租户分析和优化:对全部租户或者多个租户的数据和⾏为进⾏分析的能⼒
运维和管理:运维管理的复杂度和便宜性,包括监控、修改数据库模式、创建索引、收集统计数据、数据加载等
成本:总体拥有成本,包括⽅案实现成本、运维成本等
2. 多租户模型
多租户模型描述了租户和该租户的数据之间的映射关系。不同的多租户模型会影响数据库和应⽤程序的设计、管理和维护。
使⽤较多的多租户模型有三种。 Greenplum 对这三种模型都有出⾊的⽀持。
2.1 ⼀租户⼀数据库
最简单的多租户实现⽅式是为每⼀个租户创建⼀个Greenplum集,如下图所⽰。应⽤程序为每个租户分配⼀个租户id,并为每个租户配置相应的数据库连接信息(包括数据库ip、端⼝等)。应⽤程序根据租户id连接到为其分配的数据库。
这种模型中不同租户的数据物理隔离,安全级别⾼。如果每个租户的Greenplum集使⽤不同的硬件,则他们之间的资源使⽤也是物理隔离的;如果租户的Greenplum集共⽤同⼀套硬件,则需要对资源进⾏合理分配和管理,避免相互影响。由于不同租户使⽤独⽴的数据库,灵活性好,容易满⾜不同租户的特定需求(譬如需要额外的字段)。出现故障时影响⾯⼩。缺点是数据库数量⼤,维护复杂,拥有成本⾼。适合租户数⽬⽐较少的场景。
2.2 ⼀租户⼀名字空间(Schema/Namespace)
多个租户共享同⼀个数据库,每个租户拥有独⽴的名字空间(或模式)。应⽤程序为每个租户分配⼀个id,并把每个租户的所有操作限制在为其分配的名字空间/模式之中。如下图所⽰。
这种多租户模型下,不同租户的数据逻辑上相互隔离,安全控制相对简单。不同租户有不同的模式,可以简便的满⾜不同租户的特定需求,灵活性⾼。对资源管理能⼒要求⾼,以避免不同租户竞争资源。结合 Greenplum 的 filepace 和 tablespace 特性,可以把不同租户的数据存储在不同的磁盘上,降低了对磁盘IO的竞争。运维和管理较复杂,不易实现⼤量租户的跨租户分析。适合租户数⽬适中的场景。
2.3 全共享⽅式
不同租户共享同⼀个数据库、同⼀个名字空间。不同租户的数据在同⼀组表中共存,通过租户id标记和访问不同租户的数据(应⽤需要调整访问数据的SQL以包含租户id)。如下图所⽰。
这种多租户模型中,不同租户的数据物理存储在⼀起,对系统的资源隔离和安全隔离要求很⾼。运维相对简单。扩展能⼒好,可以⽀持较多数量租户。由于租户数据存储在⼀起,跨租户数据分析和优化⾮常简单。成本低,可以较低的代价⽀持更多的租户。
全共享模型中,很多数据库采⽤添加⼤量⾃定义字段的⽅式满⾜不同租户的特定需求,以提⾼灵活性。这种⽅式有诸多局限性,譬如字段数⽬不能太多、管理复杂等。Greenplum ⾃ 5.0 开始⽀持更多半结构化数据,包括JSON、Hstore 等,通过这种半结构化数据,可以更灵活、⾼效、便捷的满⾜不同租户的特定需求。
2.4 混合模型
这种模型不是⼀个新的实现⽅式,⽽是混合前⾯介绍的三种模型以满⾜不同⽤户的服务级别需求。譬如对于最⼤的少数⼏个租户采⽤⼀租户⼀数据库的模型,其他租户采⽤全共享⽅式。或者对资源隔离级别要求⾼、服务响应时间要求⾼的客户采⽤⼀租户⼀数据库的模型,其他租户采⽤⼀租户⼀名字空间⽅式或者全共享⽅式。
2.5 对⽐
下表列出了不同模式的特点。混合模型兼具不同模型的优缺点,不再单独列出。根据不同需求可以采⽤不同的实现⽅式。
特性⼀租户⼀数据库⼀租户⼀名字
空间
全共享
扩展性、
租户数量
低中⾼
安全隔离物理隔离逻辑隔离依赖数据库和应⽤安全控制
资源隔离若⽤不同集,则⾼;否则依
赖数据库资源管理特性
依赖数据库资
源管理特性
依赖数据库资源管理特性
灵活性⾼⾼
通过JSON等半结构化数据
类型提供较⾼灵活性
跨租户分析很难,需要跨库查询
难,需要跨模
式查询
容易
运维管理复杂度⾼复杂度中复杂度低
对应⽤影
低低较⾼
成本⾼中低
3. Greenplum 资源管理
上⾯提到,不管使⽤何种多租户模型(除⾮是不同的物理集),否则都涉及到资源管理的问题,以满⾜不同租户的不同资源使⽤需求,避免某个租户过度使⽤资源,影响其他租户。
Greenplum 5 设计实现了⼀个全新的基于资源组的资源管理器,相⽐之前的资源队列,可以做到灵活⾼效的资源管理。
下表对资源组和资源队列进⾏了对⽐:
特性资源组(Resource Group)资源队列(Resource Queue)
并发控制事务级别语句级别
死锁⽆极端情况下会出现
CPU 管理基于⽐例、基于cgroup基于粗粒度的优先级云数据库服务
CPU 空闲利⽤率可以充分利⽤空闲CPU部分利⽤
内存限制精细粒度粗
组内内存共享是否
动态修改资源配置是部分
排队⽆并发槽位或者内存配额时⽆并发槽位时
管理DDL、Utility语句是否
Segment级别监控管理是否
基于规则的资源管理是否
Greenplum 可以实现细粒度的资源管理,在云上多租户场景下,⾮常适合实现租户的资源隔离,避免某个租户过度占⽤资源,确保资源合理使⽤。
4. 总结
多租户是云数据库的基本要求,本⽂介绍了Greenplum的四种多租户实现⽅式,并对之进⾏了对⽐。还介绍了 Greenplum 新的基于资源组的资源管理器,以实现多租户的资源共享和隔离。