写点什么

天涯新款 key-list 类型内存数据引擎——Memlink

  • 2010-11-19
  • 本文字数:2032 字

    阅读完需:约 7 分钟

天涯社区最近开发了一款数据引擎—— Memlink ,并将其开源。对于为什么会出现这样一款开源项目、它的能力和市面上的其他款同类型项目相比有怎样的优势,InfoQ 中文站特地采访了天涯社区在北京研发中心的技术负责人冯勇先生。

1. 您好,能请您先自我介绍一下吗?您最近在做哪些有趣的事情呢?

大家好!我是天涯技术中心系统平台部负责人冯勇,系统平台部是今年刚组建的部门,旨在优化天涯线上产品的系统架构。天涯是一个有十二年历史的网站,对于一个累积了十二年补丁的系统进行重构、优化,本身就是一件很有趣、很有挑战的事情。

2. 是出于什么初衷,天涯会开发出这样一款数据引擎出来呢?并且最后要开源出来。

近些年,Nosql 系统非常流行,也确实对 sql 系统进行了合理补充,为 Web 应用提供多种数据解决方案。但是在开源 Nosql 系统中,key-value 系统可选择较多,而 key-list/queue 系统可选择较少,因此我们开发了 memlink 来满足我们自己的需要。

在这里,需要强调一些 key-list 的概念,在实际场景中有大量需要 key-list 的地方。比如:论坛中的主题列表、回复列表,微博中的用户关注列表、用户 feed 列表、用户关注 feed 列表等等。如果使用 key-value 中的 value 来存储 list(比如:list 打包成 json 放入 value 中),其操作性能是非常低效的。

理想的 Key-list 通常需要如下特点:

  1. list 是海量的、且操作性能高效
  2. list 是有序的、且可动态调整顺序

至于为什么开源?一方面,我们很多工作都得益于已有的开源系统,所以回馈开源社区是我们应做的义务;另一方面,技术分享也有利于公司本身技术的成长,并吸引更多的技术人才。

3. 能介绍一下 Memlink 的特性吗?

Memlink 是一个高性能、持久化、分布式的 Key=>List/Queue 数据引擎。正如名称中的 Mem 所示,所有数据都建构在内存中,保证了系统的高性能,同时使用块链进行内存压缩,使用 redo-log 技术保证数据的持久化。此外,Memlink 还支持主从复制、读写分离、数据项过滤操作等功能。

特点:

  • 内存数据引擎,性能极为高效
  • List 中的 Node 采用块链组织,精简内存,优化查找效率
  • Node 数据项可自定义 Mask 表,支持多种过滤操作
  • 支持 redo-log,数据持久化,非 Cache 模式
  • 分布式,主从同步
  • 读写分离,写优先处理。

4. 我们知道市面上还有一些其他基于内存的数据引擎,比如 Redis 和 Scalaris,跟它们相比 Memlink 解决了什么特别的问题吗?

在设计和开发 memlink 之前,我们也认真分析对比了 Redis。最终没有采用 Redis 原因有以下四点:

  1. Redis 持久化策略 (redo-log) 不能完全满足线上生产的需求。对于一个成熟的互联网应用应该有足够的容错能力。比如系统统重启、宕机等而不丢失数据。Redis 持久化策略一:定时同步磁盘(此期间重启会丢失部分数据);持久化策略二:不断追加 log,这样容易使 log 膨胀,性能降低。Memlink 持久化策略是同时借鉴 Redis 两种策略,在非创建快照期间追加 redo-log,在完成快照后清除 redo-log。
  2. Redis 主从同步策略不够完善。比如:slaver 因为某原因丢失了部分同步数据,则需要重新完全获取一份主节点的所有数据。在大数据量的情况下,不太合适线上生产的需求。
  3. Redis 单线程模式,读写没有分离,只能使用单核。Memlink 为多线程,充分利用多核,并进行了读写分离,优先保证写。
  4. 在内存消耗和性能上 Memlink 要优于 Redis。

Memlink 是 key=>list/queue 引擎,Scalaris 是 key-value,两者功能出发点上不一样。

5. Memlink 在天涯内部的哪些系统中得到了采用?可以提供一下 Memlink 带来的性能变化的数据吗?

Memlink 主要应用于天涯论坛类型产品 (论坛、来吧) 中。比如论坛的主题列表,当数据达到百万、千万量级,采用 Mysql 系统进行分页浏览时,基本上不能响应,而 Memlink 则性能提升了上百倍。具体可见 Benchmark

6. 能向广大的开发者朋友们介绍一下,如何来选择一款适用自己的 NoSQL 产品呢?

首先需要确定业务需求,是否需要 NoSQL 产品。对于大多数百万量级、千万量级的应用,MySQL 也能支持。

其次在明确需要 NoSQL 产品后,应根据业务需求抽象出数据模型,比如:有些数据是需要采用 key-value 系统存储,有些数据是需要采用 key-list 系统存储,有些数据是采用文档数据库存储等等。

对于 NoSQL 产品候选列表的选项,可以从如下维度进行考虑:

  1. 系统的容量、性能、软硬件环境是否符合需求?
  2. 数据的安全机制如何?各种异常是否会丢失数据?
  3. 具备主从复制功能?何种一致性策略?
  4. 可扩展性?自动扩展 or 程序进行扩展?
  5. 系统的可控性?系统的成熟度、对开发者的支持度、bug 谁来修复等等

7. Memlink 现在的版本号是多少?未来的发展计划是怎样的?

Memlink 现在的版本号为 0.2,具备基本 key-list/ 主从复制等功能,目前正在测试中。

在 0.3/0.4 版本中,Memlink 会增加双向队列、用户认证等功能。具体可以见 Memlink 的 RoadMap

长远而言,Memlink 专注为一个高性能、持久化、分布式的 Key=>List/Queue 数据引擎,不会增加其他数据存储模型。

更多关于 Memlink 的信息,请参考 Memlink 的介绍文档设计文档

2010-11-19 08:2013893
用户头像

发布了 127 篇内容, 共 44.0 次阅读, 收获喜欢 5 次。

关注

评论

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

ironSource开通业内首家微信客户服务平台, 为中国客户提供本地支持

Geek_2d6073

为什么要上云,您的团队适合上云吗?Atlassian白皮书给你答案

龙智—DevSecOps解决方案

Atlassian atlassian云版

达人专栏 | 还不会用 Apache Dolphinscheduler?大佬用时一个月写出的最全入门教程【三】

白鲸开源

Apache 大数据 开源 DolphinScheduler workflow

IP归属地火了,IP地址黑灰产浮出水面 要如何预防?

郑州埃文科技

网络安全 IP地址 网络灰黑产

OpenCloudOS 云原生演进之路

OpenCloudOS

《银行保险机构消费者权益保护管理办法》,如何影响行业与个人?

易观分析

金融消费

关于2022年12代C/C++Linux服务器开发高级架构师课程体系分析

C++后台开发

后端开发 Linux服务器开发 C++后台开发 Linux后台开发 服务器开发架构师

7 款最棒的 React 移动端 UI 组件库 - 特别针对国内使用场景推荐

蒋川

UI 前端框架 React 移动端 组件库

勇往直前,做全能开发者,华为伙伴暨开发者大会2022精彩活动正式解锁!

华为云开发者联盟

云计算 量子计算

ShardingSphere 在金融支付场景下的实践与调优

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

域成员服务器怎么会突然脱域?

BUG侦探

脱域 域信任关系 windows更新

云原生架构及演进

云智慧AIOps社区

云原生 k8s 构架

云启资本宣布加入 OpenCloudOS 操作系统社区,将自身在开源领域近十年的经验贡献社区

OpenCloudOS

中兴通讯宣布加入OpenCloudOS操作系统社区,为自主操作系统做出重要贡献

OpenCloudOS

微信小程序和 uniapp 的区别是什么?

CRMEB

如何提高团队的工作效率?

ShineScrum

Scrum 敏捷 团队效率

Jira工时管理插件线上安装量过百,龙智产品赢得全球企业信赖

龙智—DevSecOps解决方案

Jira插件 龙智 龙智自研插件

一文了解游戏美术开发流程,以及可能遇到的问题

龙智—DevSecOps解决方案

perforce Helix Core Helix DAM

敏捷团队教练工作坊 (Coaching Agile Teams) | 6月11日

ShineScrum

敏捷 教练 敏捷教练 cat 高管教练

面试题:关于HDFS,你的沉淀是什么?

Joseph295

物联网时代,如何保障嵌入式系统安全?

龙智—DevSecOps解决方案

klocwork perforce Helix QAC

手把手教你如何高效落地单项目管理 | 一看既会

阿里云云效

云计算 阿里云 项目管理 敏捷开发 单项目管理

如何 DIY 一款属于自己的【3D 重力感应 动态壁纸 】,看完这篇文章你也可以学会

呆呆敲代码的小Y

android Unity 壁纸 动态壁纸

AIRIOT物联网低代码平台如何配置Modbus RTU协议?

AIRIOT

驱动配置

千万奖金的首届昇腾AI创新大赛来了,OpenI启智社区提供开发环境和全部算力

OpenI启智社区

人工智能 昇腾AI大赛

英特尔宣布加入OpenCloudOS操作系统社区

OpenCloudOS

2022年中国互联网母婴行业年度分析

易观分析

母婴产品

卷入上海疫情,被封40天,我的一点心得

大数据梦想家

程序员 程序人生 疫情防控

百度吴甜提出大模型落地关键路径 业内首发行业大模型

百度开发者中心

市场份额不断提升,百度智能云稳居金融云解决方案市场第一阵营

百度开发者中心

编写实用有效的产品帮助文档,提升客户满意度

小炮

帮助文档

天涯新款key-list类型内存数据引擎——Memlink_架构_张凯峰_InfoQ精选文章