Google 分布式关系型数据库 F1

F1是Google开发的分布式关系型数据库,主要服务于Google的广告系统。Google的广告系统以前使用MySQL,广告系统的用户经常需要使用复杂的query和join操作,这就需要设计shard规则时格外注意,尽量将相关数据shard到同一台MySQL上。扩容时对数据reshard时也需要尽量保证这一点,广告系统扩容比较艰难。在可用性方面老的广告系统做的也不够,尤其是整个数据中心挂掉的情况,部分服务将不可用或者丢数据。对于广告系统来说,短暂的宕机服务不可用将带来重大的损失。为了解决扩容/高可用的问题,Google研发了F1,一个基于Spanner 的跨数据中心的分布式关系型数据库,支持ACID,支持全局索引。2012年初已上线。

F1的几个特性

高可用

可以说,几乎都是Spanner搞定的,Spanner通过原子钟和GPS接收器实现的TrueTime API搞定了跨数据中心时钟误差问题,进而搞定了分布式事务的时序问题,从而搞定了对外部的一致性。多个副本的一致通过Paxos搞定。

全局索引

基于Spanner提供的分布式读写事务(严格的两阶段锁+两阶段提交),F1实现了全局索引。索引表和数据表实际上是两张表,这两张表一般来说存在不同的Spanner机器上,两张表的一致性通过Spanner的分布式读写事务解决。在这里,同一个事务中涉及的全局索引不宜过多,因为每多一个全局索引,相当于多一个两阶段提交中的participant,对于分布式事务来说,participant越多,性能越差,并且事务成功的概率越小。

级联Schema

思想和MegaStore类似,表和表之间有层次关系。将相关表中的相关数据存储在一台机器上。比如对于广告系统来说,就是将一个广告客户以及他的compaign等存储在一起,广告客户作为一张表,compaign作为另外一张表,广告客户表中每行代表一个广告客户,广告客户表叫做root表,compaign表叫做子表,广告客户表中的每行叫做root记录,compaign表中行叫做子记录,那么同一个广告客户下所有的compaign和这个广告客户都存储在同一台Spanner机器上。这样做的好处就是一个操作就可以取到所有的相关数据,join很快,不用跨机。

三种事务

  1. 快照读。 直接利用Spanner提供的快照读事务
  2. 悲观事务。 直接利用Spanner提供的读写事务,加两阶段锁
  3. 乐观事务。 基于Spanner的悲观事务实现的。这样的事务分为两个阶段,第一个阶段是读阶段,持续时间不限,不加任何锁,第二个阶段是写阶段,即commit事务阶段。基本思想是在读阶段将访问的所有行的最后一次修改时间保存在F1客户端,写阶段将所有的时间发到F1,F1开启一个Spanner的读写事务,这个读写事务会重新读取这些行的最后一次修改时间进行check,如果已经变了,说明检测到了写写冲突,事务abort。

F1默认使用乐观事务,主要考虑了如下几个方面:

  1. 由于读阶段不加锁,能容忍一些客户端的误用导致的错误
  2. 同样,读阶段不加锁,适合F1中一些需要和终端交互的场景。
  3. 对于一些出错场景,可以直接在F1 Server进行重试,不需要F1 Client参与。
  4. 由于所有的状态都在F1 Client端维护的,故某个F1 Server挂掉后,这个请求可以发给其他的F1 Server继续处理。

当然,这会带来两个问题:

  1. 对于不存在的行,没有最后一次修改时间,那么在其他读事务执行期间,同一条语句执行多次返回的行数可能不一样,这种情况在repeatable read这种隔离级别下是不允许的,这个问题典型的解决方案是gap锁,即范围锁,在F1中,这个锁可以是root表中root记录的一列,这个列代表一把gap锁,只有拿到这把锁,才能往child表中某个范围插入行。
  2. 对同一行高并发修改性能低。显然,乐观协议不适合这种场景。

部署

Google将广告系统使用的F1和Spanner集群部署在美国的5个数据中心,东海岸两个,西海岸两个,中间一个。相当于每份数据5个副本,其中东海岸一个数据中心被作为leader数据中心。在spanner的paxos实现中,5个副本中有一个leader副本,所有的对这个副本的读写事务都经过它,这个leader副本一般就存在leader数据中心中。由于paxos协议的运行只需要majority响应即可,那么一次paxos操作的延时基本取决于东海岸的leader数据中心和东海岸另外一个数据中心,和中间那个数据中心之间的延时。从这里也可以看出,对于写比较多的F1 Client来说,F1 Client和F1 Server都部署在leader数据中心性能最好。在这个配置下,F1用户的commit延时大概在50ms到150ms之间。读延时大约5~10ms。

时间: 2024-08-07 23:58:10

Google 分布式关系型数据库 F1的相关文章

基于分布式关系型数据库,实现轻松应对百亿级数据分析场景解决方案

MyCat是什么? 从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库读写分离,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里.也可以指定多个写库多个读库. MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端

世界级的开源项目:TiDB 如何重新定义下一代关系型数据库

著名的开源分布式缓存服务 Codis 的作者,PingCAP 联合创始人& CTO ,资深 infrastructure 工程师的黄东旭,擅长分布式存储系统的设计与实现,开源狂热分子的技术大神级别人物.即使在互联网如此繁荣的今天,在数据库这片边界模糊且不确定地带,他还在努力寻找确定性的实践方向. 在数据库的平行世界里,黄东旭以不同的方式在追随着自己的内心.他认为,通常传统的关系型数据库无法满足海量数据处理和分析时,新一轮的窗口期也随之需求开启,但是各类劣势架构.内存架构. NoSQL 等方案都不

分布式 NewSQL 数据库 UCloud TiDB Service 是如何炼成的?

TiDB 是 PingCAP 公司研发的开源分布式关系型数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性.TiDB 兼容 MySQL,具备「分布式强一致性事务.在线弹性水平扩展.故障自恢复的高可用.跨数据中心多活」等核心特性,是大数据时代理想的数据库集群和云数据库解决方案. UCloud 于今年 8 月 将 TiDB 公有云化并推出 UCloud TiDB Service,当前使用的 TiDB 版本为 3.0.5 .UCloud TiDB Service 相比裸机部署性能并无损耗,提

Cobar是提供关系型数据库(MySQL)分布式服务的中间件

简介 Cobar是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明. 产品在阿里巴巴稳定运行3年以上. 接管了3000+个MySQL数据库的schema. 集群日处理在线SQL请求50亿次以上. 集群日处理在线数据流量TB级别以上. 下载 cobar-server cobar-manager cobar-driver 文档 快速上手 用户手册 测试报告 交流 旺旺群:1362117836 邮箱组:[email pro

关系型数据库横向扩展的三种方法

本文是 Oracle Coherence 3.5一书,第一章: Achieving Performance, Scalability, and Availability Objectives,第二节:Achieving scalability中,数据库横向扩展部分的读书笔记. 传统的关系型数据库很难扩展,通常是纵向扩展,但到达一定程度时只能横向扩展. 数据库的横向扩展支持三种方法,即主从复制,集群和分片(sharding). 主从复制 主从复制(Master-slave replication)

MongoDB非关系型数据库开发手册

一:NoSql数据库 什么是NoSQL? NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称. NoSQL用于超大规模数据的存储.(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据).这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展. 为什么使用NoSQL ? 今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据.用户的个人信息,社交网络,地理

Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transformation,Sink.其中Source即为Flink计算的数据源,Transformation即为进行分布式流式计算的算子,也是计算的核心,Sink即为计算后的数据输出端.Flink Source原生支持包括Kafka,ES,RabbitMQ等一些通用的消息队列组件或基于文本的高性能非关系型数据库.而

安装关系型数据库MySQL 安装大数据处理框架Hadoop

安装关系型数据库MySQL 安装大数据处理框架Hadoop 简述Hadoop平台的起源.发展历史与应用现状. 列举发展过程中重要的事件.主要版本.主要厂商: 国内外Hadoop应用的典型案例. (1)Hadoop的介绍: Hadoop最早起源于Nutch,Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能.但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题.2003年.2004年谷歌发表的两篇论文为该问题提供了可行的解决方案,即

选型宝访谈:当业务炸裂式增长 ,如何让关系型数据库平滑扩展?

当业务炸裂式增长,如何让关系型数据库平滑扩展? 爱奇艺.饿了么.摩拜单车.....这些国民级应用的疯狂增长背后,是怎样一款国产的分布式NewSQL数据库,在做平滑支撑? 对话内容 选型宝:您怎么理解数据库技术的发展历程,分几个阶段?黄东旭:其实整个大的背景大概是这样,上世纪六七十年代就有关系数据库概念了,一直发展到90年代,基本都是以IBM DB2. Oracle,微软的SQL Server等单机关系型数据库为主的行业现状.但是在2000年以后,随着互联网行业数据量爆发性的增长,同时最近这5-1