【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

GoshawkDB:一个分布式、支持事务与容错的对象存储

  • 2016-01-10
  • 本文字数:2428 字

    阅读完需:约 8 分钟

在经过了 10 个月的全力开发后, GoshawkDB 0.1 发布了。这是 GoshawkDB 的首个公开发布版本,但该版本还是 Beta 版,因此不建议在生产环境下使用。同时,GoshawkDB 服务端二进制文件现在已经可以下载,Go 客户端(Go gettable)也可以使用了。

GoshawkDB 是一个对象存储,提供了完全的事务支持、直观的语义、分布式、高性能的 CP 系统、冗余、无模式以及安全等特性。

GoshawkDB 的主要特性列举如下:

对象存储

在编程语言中,你会通过对象而不是行或列来对数据进行建模。GoshawkDB 是个对象存储,因此无需将对象转换为表项目,然后再转换回来:你所使用的只是持久化对象而已。这种直观且简单的做法与编程语言之间形成了非常自然的吻合关系。任何对象图都是可以接受的:它并没有施加什么限制,因此在使用 GoshawkDB 时,你无需改变自己对数据进行建模的方式。对象图的导航以及资源探测都是通过从根对象进行遍历的,根对象是在 GoshawkDB 首次启动时由其所创建的。连接到 GoshawkDB 集群的所有客户端都会知道这个根对象,并且会从这个对象开始进行导航。对象值就是普通的字节数组:GoshawkDB 不要求使用模式,因此无需解释对象值。这意味着你可以自由使用任何对象序列化格式:从 JSON 到 ProtoBuf,再到 CapnProto 等等。这样,对象就是多语言的了,你只需选择一种序列化格式即可。此外,这还表示你可以自由加密对象值,因为 GoshawkDB 根本就不会检测他们:他们对于 GoshawkDB 来说是完全透明的。

完全的事务支持

GoshawkDB 支持完全的多对象事务,事务是原子和隔离的,无论事务中包含了多少对象,无论这些对象存储在哪里都是如此。GoshawkDB 客户端支持嵌套事务,诸如 Retry 等高级特性使得 GoshawkDB 的事务变得异常强大和灵活。

直观的语义

如果语义不明确或是非常复杂,那么使用任何数据存储都是毫无意义的。GoshawkDB 对于事务只支持最强的序列化隔离级别。这是最简单,也是最直观的隔离级别。GoshawkDB 对于在失败的情况下应该如何做进行了明确的保证,这可以确保你的理解与系统的行为之间不会出现任何偏差。

分布式

GoshawkDB 是个分布式数据存储,无论在云端还是自己的数据中心都如此。结点集群会呈现出一种逻辑存储,独特且改进过的一致性哈希形式确保了对象与负载会均匀地散落在各个结点上,同时还提供了可配置的冗余级别。客户端可以连接到任何结点来访问数据存储;所有结点都是等同的。

在传统数据库中,数据是存储在服务器上的,你需要向服务器发送请求。这样,在传统的 SQL 事务中,你对数据库所执行的每个操作都会在客户端与服务器之间形成一个来回的通信。服务器还会追踪你所执行的所有操作,一旦操作完成,它就会以某种方式来验证这些动作不会违背隔离级别的要求。这会导致非常长且复杂的 SQL 查询,从而减小客户端与服务器之间的来回通信以及事务长度,甚至还会要求我们使用存储过程。

GoshawkDB 的设计则是完全不同的。在 GoshawkDB 中,事务只运行在客户端。你可以将客户端看作是服务器所存储的对象的不完整缓存。事务是完全运行在客户端的。所有对象的读、创建与写入都是在客户端累积到一起的,然后一次性发送给服务器进行验证。这样,如果客户端的对象缓存合法,那么无论事务有多么长,客户端与服务器之间只有一次来回通信。如果由于其他客户端的修改导致当前客户端的缓存过期了,那么服务器就会拒绝事务,并要求该客户端重新运行并更新缓存。客户端只需应用更新,然后自动重新运行事务即可。

由于这一点,事务就变成了普通的功能,它会使用客户端 API 来检测并修改对象。我们无需再去使用类似于 SQL 这样的语言。客户端会负责在必要的情况下自动重新运行事务。这也意味着在某些情况下,GoshawkDB 是无锁的:一个事务的动作可能永远不会导致另一个事务被锁定,从而无法继续进行,死锁也就不会发生了。不过,在客户端提交事务修改前,事务可能需要运行多次,这些修改会成功通过验证并应用到数据存储上。

高性能的 CP 系统

GoshawkDB 是个 CP 系统(Consistency,Partition Tolerance)。这意味着当出现失败或是分区状况时不会导致一致性问题;相比于 AP 系统(Availability,Partition Tolerance)来说,它不会欺骗你。有证据表明 CP 系统要做的事情比 AP 系统要多,因此速度上不会很快,不过 GoshawkDB 独特的设计考虑到了性能与网络问题。GoshawkDB 只会在必要时开启事务。与其他很多分布式 CP 数据存储不同,对于不变负载来说,GoshawkDB 的性能并不会随着结点的增加而有所降低,相反性能还会得到提升。

冗余

GoshawkDB 在多个结点上维护了每个对象的副本。它并未使用 leader/follower 设计方式:所有结点都是等同的,每个对象的所有副本也都是等同的。事务只需要与每个对象的大多数副本进行通信即可进行,因此 GoshawkDB 可以在失败的情况下继续处理,只要每个对象的大多数副本依然可以使用即可。每个对象的副本数量可能会比集群中的结点数少:GoshawkDB 是分片的。GoshawkDB 使用了 Paxos Synod 协议来实现一致性。对象的修改会在客户端知道事务结果之前被写到磁盘上。

无模式

GoshawkDB 并不要求对数据使用模式;GoshawkDB 将对象值看作是普通的字节数组,你可以根据自身情况选择适合的序列化格式。唯一的要求就是要显式声明指向其他对象的指针:如果对象 x 包含了对对象 y 的指针,那么你需要让 GoshawkDB 知道这一点。

安全

服务器结点之间的所有通信都是通过 NaCl crypto 库加密的。客户端与服务器结点之间的所有通信也都是通过 NaCl crypto 库加密的,同时客户端连接是需要认证的(使用用户名与密码)。

GoshawkDB 服务器是免费提供的,基于 GNU Affero General Public License 3.0。同时也可以使用商业许可。 GoshawkDB Server 0.1 - Linux 64-bit x86 (10587576 字节)的 sha1sum 是 5084891dcac0d606a0c30df257310fba18e1052a。可以通过 Mercurial 浏览并克隆其源代码。目前,其预构建的二进制文件只针对 64-bit x86 Linux。GoshawkDB 可以在支持 Go 与 LMDB 的平台上进行构建。其源代码在 GitHub 上也有镜像

2016-01-10 09:011697
用户头像

发布了 88 篇内容, 共 258.5 次阅读, 收获喜欢 8 次。

关注

评论

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

HertzBeat入GVP啦,并 v1.0.beta.7 发布,易用友好的云监控系统

TanCloud探云

开源 APM angular java;

Flink 在众安保险金融业务的应用

Apache Flink

大数据 flink 编程 流计算 实时计算

结合实际案例谈谈项目管理经验

云智慧AIOps社区

学习 项目管理 pmp 软考 沟通技巧

京东运动露营活动亮相首钢园,精彩持续整个四月

科技新消息

《数字经济全景白皮书》Z世代用户洞察篇(1)重磅发布!

易观分析

Z世代

一文让你彻底了解Linux内核源码组织结构【建议小白收藏】

简说Linux内核

Linux内核 进程管理 驱动开发 嵌入式开发 设备驱动

玩转LiteOS组件:Openexif

华为云开发者联盟

LiteOS Huawei LiteOS Openexif Exif JPEG文件

为什么企业对私有化部署IM如此青睐有加?

WorkPlus

腾讯WeTest微信小程序上线啦!产品资讯一手掌握!

WeTest

接口自动化的关键思路和解决方案,本文全讲清楚了

Liam

Jmeter Postman API 测试工具 接口自动化测试

PLG公司的机遇和挑战

LigaAI

SaaS LigaAI PLG

中国设计师品牌Le Arome乐欧幕靠什么做到爆款10分钟售罄?

科技大数据

后端开发【一大波干货知识】定时器方案红黑树,时间轮,最小堆

Linux服务器开发

定时器 后端开发 红黑树 时间轮 Linux服务器开发

智能化时代的数据集成技术革新

Apache SeaTunnel

大数据 开源 数据同步 Meetup Apache SeaTunnel

EMAS隐私合规检测专项服务,从确保形式合规及实质合规规避风险

移动研发平台EMAS

阿里云 开发 数据安全 移动开发 隐私合规

TASKCTL产品安装常见问题

TASKCTL

分布式 kettle ETL ETL任务 调度任务

政企上云网络适配复杂,看华为云Stack有妙招

华为云开发者联盟

数据中心 云网络 华为云Stack 政企上云 L3GW服务

在APICloud开发平台使用友盟统计功能教程

YonBuilder低代码开发平台

APP开发 APICloud 友盟

3月月更中奖名单新鲜出炉!快来看有没有你呀!

InfoQ写作社区官方

3月月更 热门活动

专访丨用友网络副总裁邹达:如何应对创新型数字化挑战?

YonBuilder低代码开发平台

软件开发中的风险如何处理?

源字节1号

微信小程序 软件开发

足不出户,搞定交付——独家交付秘籍(第二回)

阿里巴巴云原生

浅谈Java虚拟机(HotSpot)的内存回收相关细节

CRMEB

如何以卫语句取代嵌套条件表达式

华为云开发者联盟

条件表达式 卫语句 嵌套条件表达式 代码结构

龙蜥开发者说:学无止境的 Linux ,以及我的第一个定制版本发布之路 | 第4期

OpenAnolis小助手

Linux 龙蜥社区 开发者说 宝贵经历

Module Federation在客服工单业务中的最佳实践

得物技术

前端 Module 模块 iframe Federation

EMQ 映云科技为抗疫项目提供全托管 MQTT 云服务免费使用

EMQ映云科技

物联网 IoT mqtt emq 抗疫

传统链游的革新,PlatoFarm用实际行动回馈Dao社区

西柚子

jackson学习之三:常用API操作

程序员欣宸

4月月更

想减少代码量,快设置一个有感知的 Aware Spring Bean

华为云开发者联盟

spring bean Aware 接口

机器人流程自动化评估体系全面助力垂直行业智能化转型

王吉伟频道

RPA 机器人流程自动化 信通院

GoshawkDB:一个分布式、支持事务与容错的对象存储_数据库_张龙_InfoQ精选文章