MemSQL分布式架构介绍(二)

接上次的MemSQL分布式架构介绍(一),原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/

首先上张图,是我根据自己的理解画的,如有错误还请大家指出

几个概念

1、MemSQL有两种类型的表:

  • reference table 参照表 数据分布在主 aggregator和每个leaf节点。每个节点的数据都是完整的(没有分区)。 参照表同过复制从 主 aggregator向每个 leaf节点同步数据。另外参照表的写只能在 主 aggregator进行。
  • sharded table 分布表 数据通过hash分片存储在每 个leaf节点, 每 个leaf节点只有部分数据。

Querying MemSQL

注#官方文档里面说的这个query我理解为是增删改查操作,如理解有误,也请大家指出。

MemSQL在第一次执行一条query时将会编译这条语句并cache到内存中。

用户的query总是被指向一个汇聚器。DDL的操作或者向reference table写数据时必须通过主汇聚器,而其他的DML语句则可以通过任意的汇聚器。

只对reference table进行的query只会在汇聚器执行。汇聚器将不会发送这些query到叶子节点因为每一个汇聚器节点或者叶子节点都存有reference table的一个拷贝。

对sharded table进行的query包含更多:

  • 在最简单的情况下,一个query需要的数据只在一个分区中,因此这个query能直接被forward到正确叶子节点,如INSERT INTO db.table VALUES (15)。除非重写数据库名字让其映射到指定的分区,INSERT INTO db_3.table VALUES (15) 。
  • 如果一个query需要的数据在多个分区中,那么汇聚器将会从多个叶子节点中获取数据。比如说,SELECT COUNT(*) from t 将会发送一个COUNT(*)给每个分区,然后汇总返回,最终返回一行给用户。

一些query会有很多的query转换和汇聚逻辑,但他们都遵循了相同的通用流程。可以在一个query语句中使用EXPLAIN关键字来显示汇聚器和叶子节点之间的执行计划,包括将会发送到叶子节点的重写query。

数据分布

MemSQL将会在分布表上通过每一行的主键哈希来分布数据(哈希分区表)。由于每个主键是唯一的同时hash函数一般又是统一的,所以集群能够相对均匀地分布数据和最小化数据倾斜(data skew)

在创建数据库的时候,MemSQL会拆分数据库到几个分区中。每个分区都有自己的哈希范围。你能够显式地指定分区数量通过PARTITIONS=X选项。默认的话分区的总数是叶子节点数的8倍。

每一个叶子节点上的分区是通过database实现的。当一个分布表被创建的时候,它会根据database的分区数量被拆分。这个表被保存于分区的数据切片中。二级索引是通过每个分区和每行主键作为唯一索引的前缀来被管理的。

如果你运行的一个query需要查找二级索引,那么汇聚器会fan out这个query到集群中的所有分区,每个分区都会去找这个二级索引。

精确匹配shard key的的Query将会被路由到一个单一的叶子节点(我的理解是insert语句或者可以确定hash值的增删改查语句,因为确定了hash值MemSQL就知道这条记录放在哪里了)。否则的话,汇聚器将会发送这个query到集群中并收集结果。你可以使用EXPLAIN关键字来测试创建的query,并查看叶子节点和query分布策略。

Availability Groups

一个高可用组是叶子节点的集合,用于存储冗余数据以确保高可用。每一个高可用组包含了每一个分区的拷贝(一些为master而一些为slave)。目前,MemSQL只支持两个高可用组。你可以设置高可用组的数量通过redundancy_level变量在主汇聚器上。后面我们讨论的是redundancy-2的场景(有就是有两个高可用组的情况)。

每一个在高可用组的叶子节点都有对应的pair节点在其他的高可用组中。当有一个分区失效时,MemSQL将会自动将这个分区的slave分区提升为master分区。

时间: 2024-07-29 03:40:01

MemSQL分布式架构介绍(二)的相关文章

(转)OpenStack —— 原理架构介绍(一、二)

原文:http://blog.51cto.com/wzlinux/1961337 http://blog.51cto.com/wzlinux/category18.html-------------OpenStack -- 原理架构介绍(一~九) 一.OpenStack 简介 Openstack是一个控制着大量计算能力.存储.乃至于整个数据中心网络资源的云操作系统,通过Dashboard这个Web界面,让管理员可以控制.赋予他们的用户去提供资源的权限(即:能够通过Dashboard控制整个Ope

KAFKA介绍(分布式架构)

摘要: Kafka将消息以topic为单位进行归纳. 将向Kafka topic发布消息的程序成为producers. 将预订topics并消费消息的程序成为consumer. Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker. 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以topic为单位进行归纳. 将向Kafk

分布式架构设计之电商平台

分布式架构设计之电商平台 何为软件架构?不同人的答案会有所不同,而我认为一个好的软件架构除了要具备业务功能外,还应该具备一定的高性能.高可用.高伸缩性及可拓展等非功能需求.而软件架构是由业务架构和技术架构两部分组成,因为有了业务结构才会催生出软件架构,进而来满足业务上的需求,所以,在做软件架构设计时,需要分为业务架构设计和技术软件架构设计,二者不可分离哦!那么,接下来就以本人实际工作中的电商平台为例,进行说明电商平台架构设计,因为不同行业产品系统不同业务不同,而催生的系统软件的实现要求及架构设计

GlusterFS架构介绍及运维说明

官方网站:http://www.gluster.org/ 下载地址:http://download.gluster.org/pub/gluster/glusterfs/ GlusterFS架构介绍 一.GlusterFS 外部架构 GlusterFS总体架构与组成部分如图2所示,它主要由存储服务器(BrickServer).客户端以及NFS/Samba 存储网关组成.不难发现,GlusterFS 架构中没有元数据服务器组件,这是其最大的设计这点,对于提升整个系统的性能.可靠性和稳定性都有着决定性

Kafka剖析:Kafka背景及架构介绍

<Kafka剖析:Kafka背景及架构介绍> <Kafka设计解析:Kafka High Availability(上)> <Kafka设计解析:Kafka High Availability (下)> <Kafka设计解析:Replication工具> <Kafka设计解析:Kafka Consumer解析> Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分

大型网站技术架构介绍--squid

一.大型网站技术架构介绍 1.pv高  ip高 并发量 2.大型网站架构重点 1. 高性能:响应时间,TPS,系统性能计数器.缓存,消息队列等. 高可用性High Availability   99.99% 7*24 2.衡量标准:假设环境中一台或者多台服务器宕机,服务是否依然可用.解决关键办法:冗余.资源定位,健康检查.负载均衡,关键服务器冗余:web DB ,及时有效的监控和报警 3.高伸缩性[高可维护性] 是否可以用多台服务器构建集群,是否容易向集群添加新的服务器,新服务是否可提供相同的服

分布式架构下的会话追踪实践【基于Cookie和Redis实现】

分布式架构下的会话追踪实践[基于Cookie和Redis实现] 博客分类: NoSQL/Redis/MongoDB session共享rediscookie分布式架构session 在单台Tomcat应用中,通常使用session保存用户的会话数据.面对高并发的场景,一台Tomcat难当大任,通常我们会使用Nginx在前端拦截用户请求,转发给后端的Tomcat服务器群组.在集群环境下,怎么才能做到session数据在多台Tomcat之间的共享呢? 当然我们可以在多台Tomcat之间进行sessi

分布式进阶(十七)分布式设计介绍

分布式设计介绍 前言 分布式设计与开发在IDF05(Intel Developer Forum 2005)上,Intel首席执行官Craig Barrett就取消4GHz芯片计划一事,半开玩笑当众单膝下跪致歉,给广大软件开发者一个明显的信号,单纯依靠垂直提升硬件性能来提高系统性能的时代已结束,分布式开发的时代实际上早已悄悄地成为了时代的主流,吵得很热的云计算实际上只是包装在分布式之外的商业概念,很多开发者(包括我)都想加入研究云计算这个潮流,在google上通过"云计算"这个关键词来查

hadoop分布式架构和设计

引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统的区别也是很明显的.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的.HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的.HDFS是A