写点什么

Facebook 公布 Apollo,一种新的用于在线低延迟存储的 NoSQL 数据库

  • 2014-06-15
  • 本文字数:1321 字

    阅读完需:约 4 分钟

来自 Facebook 核心数据组的 Jeff Johnson 周三在 QCon 纽约的演讲中公布了 Apollo,它是 Facebook 的一种类似于 Paxos 的 NoSQL 数据库。Apollo 构建于 Apache Thrift 2 RPC 框架,采用 C++11 开发,是一种分层存储系统,所有数据被划分到 Shard,非常类似于 HBase 中的区域服务器。Johnson 表示它最大的好处是在线低延迟存储,特别是在 Flash 和内存中。

区别于面向文档和键值的存储,Apollo 是一种修改的数据结构,允许你存储 Map、队列、树以及键值等等。系统中每个单独的数据块都非常小,从 1 字节到 1MB,而所有的总大小则从 1MB 到 10+PB。它支持的服务器从最少三台到数千台之多。

每个 Shard 有四个组件。第一个是 Quorum 一致性协议,它基于来自斯坦福的强 Leader 一致性协议 Raft 。Johnson 说他的团队非常喜欢 Raft 的一个原因是 Leader 的故障恢复非常好定义,因为就是 Quorum 视图的变化。话虽如此,他说这真的不比 Multi-paxos 简单:

我们不得不做大量的工作,从让你异步读写磁盘到处理 Follower 忙于后台事务等场景,因为服务器上有其它东西或者磁盘非常慢,错误检查等等。

第二个组件是存储。目前主存储基于 RocksDB ,是一种构建于 Google LevelDB 的 Key/Value 存储结构。虽然它是 Key/Value 存储,Facebook 使用它来模拟其它数据结构。Apollo 被设计为可以存储未知的结构,团队也正在增加对 MySQL 的支持以作为一种替代存储引擎。

第三个组件是客户端 API,它拥有 read() 和 write() 方法。Apollo 在 Shard 层执行的所有操作都是原子操作,因此你可以描述前置条件,如果满足,它返回 reads 或 writes。代码示例如下:

复制代码
read(conditions : {map(m1).contains(x)},
reads : {deque(d2).back()})

上面的代码表示“如果 Map m1 包含 x,就返回双端队列(Deque)d2 的 back 上的值。”

你能将任意多个条件和任意数量的 Read 结合在一起。

Write 也非常类似,同样允许你描述条件:

复制代码
write(conditions : {ver(k1) == v}, reads : {},
writes : {val(k1) := x})

最后一个组件是容错状态机(Fault Tolerant State Machine,FTSM)。它们主要由系统代码使用,但也可以被用户代码使用。每个 FTSM 都属于 Shard,例如,在一个有三台机器的 Shard 中,它们全部同时执行相同的代码。它们能存取每台机器的持久化存储。最重要的是,如果一个节点故障,代码将按所有节点都同意的正确顺序继续执行。

状态机还被用于负载均衡、数据迁移、Shard 创建和销毁,以及协调跨 Shard 事务。状态机也存在外部副作用,例如它们能发送 RPC 请求到远程机器,但不论何时它们要变更持久化状态,都必须提交给 Raft 以取得所有服务器的同意。

Facebook 目前将 Apollo 用于替换 Memcached 的一些应用场景,同时 Johnson 也明确表示 Facebook 大规模地使用了 Memcached。该公司同时正在尝试使用它作为一种可靠的队列系统,用于发送 Facebook 消息到 iOS、Android 和运营商 SMS。它也可能用于更快速的分析。

Apollo 仍处于开发阶段,还没有开源,但 Johnson 说那是 Facebook 寻求并乐意去做的方式。Johnson 的演示稿已经提供给 QCon 纽约的参会者,在适当的时候会发布给所有人。

查看英文原文: Facebook Announces Apollo, a New NoSQL Database for On-line Low Latency Storage

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2014-06-15 10:384325

评论

发布
暂无评论
发现更多内容

图灵奖得主Yann LeCun走进百度,与世界研究工作者展开交流

百度大脑

面向智能合约、区块链、Web3、以太坊开发工具指南

devpoint

Ethereum infura Solidity Web3.0 3月月更

在线JSON转toml工具

入门小站

工具

使用关键点检测打造小工具Padoodle,让涂鸦小人跟随真人学跳舞

百度大脑

吉利控股集团与百度深化战略合作

百度大脑

Linux之telnet命令

入门小站

Linux

Spring cloud 之 CircuitBreaker篇

邱学喆

Spring Cloud circuit break Resilience4j

有温度的人工智能,零门槛助力企业“鲤跃”智能化“龙门”

百度大脑

[算法练习]2 二进制中1的个数

暖蓝笔记

3月月更

Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器

Jerry Wang

eclipse ide 开发者 abap 3月月更

关于云端应用开发语言选择

穿过生命散发芬芳

3月月更

LeetCode刷题笔记:数组中重复的数据

OpenHacker

JavaScript 算法 LeetCode

持续集成工具篇:Jenkins与流水线管理

自动化 持续集成 jenkins 持续交付 构架

报名啦!中小企业如何借力AI逆势突围?飞桨中国行定档3月23日!

百度大脑

建设领先的AI原生云,百度智能云落地新一代高性能AI计算集群

百度大脑

纯CSS 神奇的边框特效

德育处主任

css3 纯CSS 前端可视化 css动画

AI语音识别-我给浏览器加了个语音搜索功能

DS小龙哥

语音识别 3月月更

模块化编程及LCD1602调试工具

謓泽

3月月更

微博评论的高性能高可用计算架构

AragornYang

架构训练营 架构实战营

实用机器学习笔记二十六:NAS

打工人!

学习笔记 NAS 机器学习算法 3月月更 神经网络架构搜索

Web 键盘输入法应用开发指南 (7) —— 开发实战(二)

天择

JavaScript 键盘 实战 输入法 3月月更

IntellJ IDEA诺依开发部署文档

北极的大企鹅

开源 开源技术

一文彻底搞懂原型链

CRMEB

做一个小程序到底要多少钱?都有哪些费用?

源字节1号

开源 前端开发 后端开发 开发小程序

【建议收藏】Kafka 面试连环炮, 看看你能撑到哪一步?(上)

王江华

大数据 kafka 面试 中间件 消息队列

12个iOS技术面试题及答案总结

原来是泽镜啊

ios 程序员 架构师 ios开发

架构训练营毕业总结

Geek_e6f7f6

架构实战营

微博评论系统的高性能高可用计算架构

阿卷

架构实战营

百度连续四年亮相全球量子信息处理顶会QIP 宣布量子战略规划升级

百度大脑

RENO: Netflix的快速事件通知系统

俞凡

架构 netflix 大厂实践 3月月更

口腔数字化时代:AI牙医的防御基建与攻坚

脑极体

Facebook公布Apollo,一种新的用于在线低延迟存储的NoSQL数据库_语言 & 开发_Charles Humble_InfoQ精选文章