可扩展性
HANA支持Scale-Up和Scale-Out。
Scale-Up(纵向扩展)是指在计算单元内增加资源。而Scale-Out(横向扩展)是指添加其它的计算单元,并逻辑上形成一个整体。
纵向扩展(Scale-Up)
最常见的纵向扩展方式就是添加CPU(内存也相应添加了),也即NUMA架构。由于每个socket都有自己的内存控制器,访问本地和远程的内存性能是不一样的额,因此称为Non-Uniform。
软件方面,与NUMA配合的特性为并行执行(parallelism),或任务分派(dispatcher)。
横向扩展(Scale-out)
是将系统扩展到多个服务器,而非一个更大的单服务器。
多个服务器(节点)形成逻辑整体,但物理分布。
横向扩展突破了单个服务器的硬件限制,如内存,CPU。
横向扩展需要考虑数据分布和负载分布。
需要注意的是:
* 横向扩展需要对硬件,数据和应用有充分的了解,特别是后二者。
* 横向扩展管理起来更复杂
* 节点之间的互通讯对可扩展性有影响。
HANA是Share-Nothing架构,每个节点有自己的本地数据(data和log), 因此可以减少节点之间的通讯。
但是节点间通过内部的HDB协议也是可以通讯的。为了错误切换,还需要共享文件系统如GPFS, XFS。
Data distribution aims to find the best balance between data model, data usage and actual workload to minimize inter-node communication
数据分布时,需要先考察:
* Data Model - 数据类型,如主数据,交易数据,参照数据等;数据的参照一致性(关联)
* Data Usage - 数据依赖性,数据访问路径
* Workload - 读/写,交易/查询,更新频率
数据分布的手段有:
* Table co-location - 为参照一致性,将相互依赖的表放在同一节点。对同一语句中涉及到的表,如JOIN,放在同一节点。
* Horizontal Partitioning - 将相互关联的表的分区放在同一节点。
* Table Replication - 比如主数据,参照数据,可以复制到每一个节点,以避免节点间通讯。
结论
首先Scale-Up, 最简单,最常用。
HANA的并行化可以很好的支持Scale-Up。
需要对数据和工作负载有很好的理解,才能使Scale-Out达到很好效果。
对于OLAP环境,Scale-Out很适合。
对于OLAP/OLTP混合环境,Scale-Out比较困难。
优化Scale-Out的性能是持续性的工作。
参考
- BW on HANA and Very Large Tables - SAP HANA
- SAP HANA - Scale-up or Scale-out Hardware? - SAP HANA
- SAP HANA SPS09 - HANA Scalability.pdf