teradata是业界知名MPP架构的数据库。简单理解MPP即这样的系统由多个物理上独立的节点通过高速网络互联组成的一个相互协同工作的大规模系统。从用户角度来看,用户的任务将会被透明的分割到多个节点。
teradata架构:
teradata架构由三个组件构成,从上图可以看出分别为PE、BYNET和AMP。上图只有一个PE但实际情况是由多个PE组成的。
那么各个组件都负责什么工作呢?
PE:一个PE也被称为一个vproc( virtual processor),该组件主要完成四项工作
- 会话控制(Session Control)
- SQL解析(Parser)
- SQL优化(Optimizer )
- 任务分发(Dispatcher)
Session Control接受客户端的连接请求,验证用户名和密码
Parser接受客户端的SQL请求,校验SQL的语法,通过查询数据字典确保客户端的操作的对象是存在的并且有权限操作对象
Optimizer 是基于成本的优化器,该组件优化SQL生成最优的执行计划
Dispatcher接受Optimizer组件的执行计划通过BYNET分布到不同的AMP
AMP处理完由PE通过BYNET接受返回结果并最终呈现给客户端
一个PE最大可以处理120个session,PE之间相互通信,自动均衡session
AMP: 也可视为一个vproc,它管理着我们的数据,下图中一个AMP连接着一个DISK,实际中一个AMP可以管理多个DISK,AMP是架在DISK上的桥梁
每个AMP管理着各自的数据,数据的存和取都是AMP的工作。当新建一张表时每个AMP上都会创建表的结构信息,例如表名、列名、索引信息等。
理想状态下我们总希望我们的表平均的分布在所有的AMP上,以更好的利用所有节点并行处理。就像这样
这样当我请求Tabel1的数据4个AMP协同工作,加快处理。假设Table1只分布在了一个AMP,此时请求Table1讲会慢很多
关于teradata的数据分布机制会单独写一篇来讲。
BYNET:也被成为MPL(message-passing layer),是AMP和PE之间的桥梁,通过BYNET网络互联将所有的AMP连在一起。PE和AMP之间所有的消息传递都是通过BYNET完成的
一个典型的teradata数据库一般由两个BYNET
BYNET的特点:
High performance:一般典型的teradata有两个BYNET同时工作
Fault tolerant:每个BYNET都都有多条连接路径,当其中一个不用时,会自动切换到另外一个BYNET上,并重新配置网络,避免将客户端请求发送到不可用的BYNET上
Load balanced: BYNET自动均衡,避免某一个负载太多
实际中我们BYNET是这样的:
DISK最终数据都是存在磁盘中的,teradata都是以磁盘阵列的形式存在的。raid的级别是可配置的
总结:teradata真正的share nothing架构,每个节点拥有自己的资源,如磁盘、内存、cpu等。每个AMP管理着自已的数据,协同工作,通过BYNET告诉网络互联
延伸思考:我们项目中严禁使用IP的方式直接连teradata,当初不理解。后来想下,虽然PE可以均衡session,但我们使用IP连接的那个节点最后结果得返回也是由那个节点完成的,大量任务必会拖慢节点,浪费系统资源