网易云数据库架构设计实践(摘要摘录)

竞品分析:网易云音乐与QQ音乐 产品小白一枚,做了一年半的Java后端,不想单纯做码农。在详细了解互联网行业各岗位职能后,遂决定向产品靠拢。其实,在毕业后的第一家单位工作的时候接触过产品,因为第一家公司刚起步,接了很多项目,人又少,刚分到项目组的时候仅有三个人,我就主动向领导请示来做需求调研,与客户沟通,画产品原型等一系列工作。说实话当时压力真的大,时间紧,任务重,还有很多产品的知识要学,天天干到后半夜,还好是熬过来了,也真的学... 阅读详情

完整文章在《程序员》第2013.11期第108页


云计算并不是天生为数据库设计的,在云端使用关系型数据库面临着软硬件可靠性差、可预测性低和控制能力弱等诸多挑战,网易云数据库在架构设计中充分考虑了上述因素影响,并通过相应的技术手段解决了这些问题。


架构设计

图1为网易云数据库的总体架构图,下面将详细介绍各个模块扮演的角色和主要功能。


管理服务器:整个系统的调度控制模块,负责实例管理、备份管理、计划任务、高可用、在线Scale-up、平台管理员、计费相关功能。管理服务器对外负责处理所有来自用户的HTTP管理操作请求,对内通过调用API控制底层的计算、存储和网络资源。

为了实现高可用,通常管理服务器部署在三个物理节点上,利用ZooKeeper提供的分布式锁的功能,只有一个对外提供服务。如果该服务器宕机,则系统利用ZooKeeper提供的选主功能选出一个新的节点对外提供服务。

管理服务器的功能模块主要包括三层:第一层是API层,负责定义数据库资源的封装管理操作,对外提供API接口;第二层是管理流程层,负责实现所有的管理操作业务逻辑;第三层是调度控制和外部通信层,主要负责控制和调度所有的管理业务流程,同时封装对外通信的接口。

系统使用了开源组件ZeroMQ和ZooKeeper。

ZeroMQ:消息队列,负责管理服务器和Agent之间的消息通信。ZeroMQ是一种更为轻量级的消息队列,与传统的AMQP协议的消息队列不同,它不需要独立的消息服务器,只需要引用一个LIB库即可实现节点之间的通信。因为异步传输、LockFree、消息不持久化等特性,ZeroMQ相比其他消息队列具有更高手消息通信效率。ZeroMQ的设计理念是专注于底层消息的通信,所以它不负责消息的持久化和序列化。对于持久化问题,上层应用可以通过消息重发来保证消息的可靠传传输,但需要接收方能够判断重复消息,这个可以通过版本号的机制解决,即每个消息都附带一个版本号字段,重复消息使用相同的版本号,接收方记录当前的版本号,如果出现等于或者小于当前版本号的消息 ,则认为是重复消息。对于序列化的问题,可以使用Google的开源序列化框架protobuf实现。

ZooKeeper:开源的针对分布式系统的可靠协调系统,在云数据库中主要实现多个管理服务器之间的分布式锁、统一配置管理和选主的功能。管理服务器在启动时,会在ZooKeeper上生成一个有序节点,同时如果该节点不是最小节点,则需要watch前一个比它小的节点,只有最小节点的管理服务器对外提供服务。如果该服务器宕机,则watch该服务器对应节点的standby节点被唤醒,成为新的对外服务节点,这样避免了多个standby同时watch对外服务节点造成的“惊群现象”。同时,watch宕机节点的所有Agetn被唤醒后,会从ZooKeeper上获取新的管理服务器节点的信息,完成了配置修改。


高可用性

由于云托管的服务器相比专用的硬件可靠性有显著下降,所以高可用是云数据库首要解决的问题。实现高可用唯一的途径就是增加冗余,实现自动故障切换。目前有以下方案:

DRBD:块级别的同步复制,不仅管理复杂,且存在的性能开销。

共享存储:在主机宕机后,从机通过挂载到主机的文件系统上,在主机的数据上执行恢复操作。宕机时间取决于存储引擎的恢复以及预热的速度,通常难以做到1分钟内故障恢复。

复制:使用标准的MySQL复制实现主从同步,目前有两种实现:MMM和MHA。MMM不保证数据一致性,MHA需要主机宕机后依然能够通过SSH获取到主机的二进制日志。

网易云数据库选择基于MySQL复制实现高可用,面临的技术难点主要包括数据一致性的保证和实时故障切换。

数据一致性:官方版本的复制是异步的,主机发生故障时容易出现主从数据不一致。MySQL5.5版本以后推出了半同步复制,虽然将返回客户端成功与发送从机同步起来,但还是没解决丢失数据的问题。为了保证主从的数据一致性,网易MySQL技术组修改了主机事务提交次序,在内部我们称为虚拟同步复制(Virtual Sync Replication)。Oracle官方MySQL5.7也已经支持类似同样的功能,相信这会成为今后MySQL数据库高可用的一种标准手段。此外,为了保证主机写入性能不受影响,我们在二进制日志层做了Group Commit以fsync的次数,提高了二进制的写入性能。需要注意的是,考虑到从机SQL单线程回放效率的问题,我们这里仅是将主机上的更新写入从机的relaylog后即返回,而不是等到从机完全apply该更新(全同步复制),所以从机可能无法立即读到这部分更新。这就需要在主从切换后,需要将人机所有未apply的relaylog全部回放完毕后,再提供给用户读写,这就引入了第二个问题:实时切换。

实时切换:由于MySQL复制的过程中,从机是单线程回放主机上的更新,所以往往会出现从机落后的情况。而为了保证数据的一致性,在主从切换后从机落后的时间里,服务是不可用的。所以要实现实时切换,从机使用多SQL线程并行复制是一种有效解决方案。MariaDB提供了基于行的并行复制,要求是Row格式的二进制日志。我们采取了类似MariaDB的实现方式,根据表的主键判断两个事务是否冲突,从机按照事务分发线程,如果一个事务的更新中包含上一个事务更新涉及的主键,必须等待上个事务执行完毕后才可以执行,否则或并发执行。更重要的是,网易MySQL技术组还实现了并行复制的crash safe功能,保证在意外宕机情况下,依然能保证主从数据一致性。

主从切换后,需要对原先的宕机数据库实例进行修复操作,首先就是要重启。但我们从图2的的事务提交流程可以看出,虚拟同步复制主机事务提交先写入二进制日志,然后再发送给从机,如果在这个过程中主机宕机,就会出现主机上有一部分未提交的二进制日志,而这部分日志中涉及的事务更新也未在从机执行。

对于未提交的二进制日志中的事务,MySQL会在系统启动时自动提交,这样就会出数据不一致的问题。所以在重启前,先对二进制日志进行修剪,去掉这部分二进制日志,这样就保证了启动后的该实例和当前服务的实例数据一致性,然后再建立到当前对外服务实例的复制关系即可。如果重启失败,则系统会将该实现提交给重建队列进行重建。



Scale-up与Scale-out

数据库的扩展主要分为两类:Scale-up和Scale-out。Scale-up是指通过增加一台服务器的资源来增强数据库实例的处理能力。资源的动态伸缩是云计算最显著的优势,所以在云计算环境下Scale-up将会变得非常容易。但在底层资源的伸缩过程中,会出现服务的中断,造成数据库的不可用,所以云数据库的Scale-up需要解决的是资源扩展过程中服务可用性的问题。

借鉴高可用的设计思路,可以通过创建冗余,在从机上先进行Scale-up,然后通过一次主动的主从切换,将服务切换到已完成Scale-up的实例上,从而完成不停服务的在线Scale-up过程。

Scale-out是指通过将用户的请求分布到多个数据库实例上来提供整体的处理能力。按照网易私有云的规划,网易云数据库并不直接提供用户的Sharding的功能,而是作为另外一个私有云PaaS服务分布式数据库的底层节点对外提供服务。分布式数据库服务直接利用云数据库提供的API实现数据库实例的操作和管理,然后在上层实现Sharding功能。


读后感

MySQL复制使用虚拟同步技术,等到主机二进制日志传送到从机relaylog后,主机再commit,这种会增加主机事务提交的响应速度,如果网络或从机出现问题,则事务提交失败。如果从机relaylog成功后,而网络出现问题,或者主机的问题,导致主机commit失败,还是会发生数据不一致的现象,而且情况会更复制。

从库即使使用多线程的SQL,在主机高并发写的情况下,它依然会落后于主机,因为从机不可能比主机执行的更快。

在主从的实时切换上,感觉到目前为止,还没有一种可靠的工具能完全自动化的并且保证一致性的情况下,自动实时切换。


我想关于主从一致的问题上,还是应该结合具体的应用,对主从一致性的容忍程度上,在应用层来避免主从不一致情况下从库的读写问题。但云数据库无法灵活的结合应用层业务来实现这一点,因为它是个统一的架构来面向服务的。


【笔试面试】网易云音乐 后端一面复盘 8月15日下午三点10分参加了网易云音乐的秋招面试,这里来进行复盘下,总结面试中不足的地方。也希望能给读者一些启发。 刚开始时出了一些波折,面试官迟迟没有叫号。大概在面试开始后十几分钟,终于叫号了。可能是前面面试的同学耽误了比较久。 面试开始,自我介绍,项目介绍等常规操作,这块不展开了。 基础知识开始问的是数据库索引。 问: InnoDB是用什么实现的索引 答: 使用B+树实现。 问: 为什么使用B+树呢? 答: B+树的优势主要有以下几点: 1)只在叶子节点存储数据,其他节点只存索引。相对来说,一个磁盘页 阅读详情

相关推荐

php音乐 高仿网易云,包含数据库

php音乐 高仿网易云,自己做的项目,运用的是TP5框架,只有播放器不是也别完善,其他都已实现

SpringBoot+vue仿网易云音乐网站(二)-数据库设计

一、需求分析 仿网易云,那么需求的话就照着网易云音乐来做了。 首先可以听歌,可以查看歌手,歌手又有对应的专辑,有用户,用户可以新建歌单,收藏歌单,歌单可以增删歌曲,用户还可以评论歌曲、专辑、歌单,还有粉丝功能,首页还有一个轮播图等…。 二、数据库设计详解 综合需求可以得出,共有以下11张表。 1). 歌曲表 2). 歌手表 3). 专辑表 4). 歌单表 5). 歌单歌曲表 6). 用户表 7). 用户收藏歌曲表 8). 用户收藏歌单表 9). 粉丝表 10). 评论表 11). 轮播图表 下面对每一张表做

weixin_44764019的博客 8066

cloudmusic:模仿网易云音乐出的数据接口

Cloud Music 项目主页: 文档地址: 云音乐是模仿网易云音乐的一个项目 个人闲来无事,一段时间不写代码手痒痒,来分析分析网易云音乐的信息架构,模仿者做了类似的api出来。 并且站在产品的角度来尝试分析分析网易云音乐这款产品,欢迎拍砖。 项目目标 开发标准的RESTful APIs TDD最佳实践 高测试覆盖率 持续集成(Jenkins) 持续部署(Jenkins) Bug反馈系统建立 实现日版本发布 实现周版本发布 最新版本是 V0.0.2 Pre-alpha 完成音乐,艺术家,专辑,歌单等接口 完成用户注册,登录,注销 搭建jenkins持续CI(服务器内存太小(1G,1核),跑一段时间,服务器就蹦了。T.T) 刚刚建立了项目,完善项目基础 推送代码到GitHub 申请https证书 在服务器部署项目 项目状态 项目基础搭建完毕,开始分析数据结构 #联系我 邮箱: 博客:

[附源码]java毕业设计网易云音乐推荐系统

项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:SSM + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。

计算机毕设程序设计 2520

仿网易云做的简单播放器

新手易懂 含有数据库 有较详细的代码注解 使用myeclipse2014版 orecle数据库

基于QGIS的DEM地形数据精细化处理:从裁剪、合并到成果输出

本文详细介绍了使用QGIS进行DEM地形数据的精细化处理流程,包括数据获取、裁剪、合并及成果输出等关键步骤。通过实战技巧和注意事项,帮助用户高效处理地形数据,适用于GIS分析、三维建模等应用场景。

weixin_29093017的博客 450

你想知道的网易云音乐推荐架构解析,都在这里!

本文选自网易云音乐推荐算法负责人-肖强前辈在全球人工智能峰会上的分享,主要介绍了三方面:关于网易云音乐,AI算法在音乐推荐中的应用和AI场景下的音乐思考。这里拿来分享给大...

小小挖掘机 1339

Materials Studio与LAMMPS联合作战:如何用msi2lmp.exe完美转换聚合物模型(含PCFF力场配置)

本文详细解析了如何利用msi2lmp.exe工具将Materials Studio中的聚合物模型高效、准确地转换为LAMMPS可识别的data文件,并重点配置PCFF力场。文章提供了从MS模型构建、文件导出到命令行转换、参数调整及转换后验证的全流程实战指南与避坑技巧,旨在帮助研究者解决模型转换中的常见问题,实现跨平台分子动力学模拟的无缝衔接。

weixin_29228781的博客 519

[docker] - Docker简介

Docker 是一个开源,轻量级的应用容器引擎,基于GO语言开发,用于创建、管理和编排容器。与VMware 虚拟机相比,Docker 使用容器承载应用程序,而不使用操作系统,所以它的开销很少,性能很高。但是,Docker 对应用程序的隔离不如虚拟机彻底,所以它并不能完全取代 VMware。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

weixin_72760965的博客 141

iPhone用户必看:不装App也能搞定GitHub 2FA验证的3种方法(附恢复码管理技巧)

本文为iPhone用户提供了无需安装第三方App即可完成GitHub双重身份验证(2FA)的三种原生方案:利用相机扫码与iCloud钥匙串自动填充、使用iCloud钥匙串内置的TOTP验证码生成器,以及借助Safari浏览器扩展。文章详细解析了每种方法的操作步骤、适用场景,并重点强调了恢复码的安全管理与多层备份策略,帮助开发者在提升账户安全的同时,享受苹果生态的无缝便捷体验。

weixin_29324401的博客 652

VT System故障排查指南:从License验证到硬件连接全解析

本文详细解析VT System故障排查全流程,从License验证、Real Bus模式设置到硬件连接与VT6000组网配置。针对VT7900板卡等特殊设备提供专业解决方案,并分享系统级故障的二分法排查技巧,帮助工程师快速定位和解决CANoe环境下的各类硬件识别问题。

weixin_29269441的博客 255

DeepSeek R1生活效率升级:40种零代码AI落地场景

大语言模型正从技术概念走向日常生产力工具,其核心价值在于将模糊的生活需求转化为可执行、可验证的智能服务。DeepSeek R1凭借细粒度中文理解、长文本段落级记忆与本地化知识快速更新三大能力,在信息处理、决策辅助、内容创作等真实场景中展现出强鲁棒性。尤其在微信对话提炼、发票OCR归集、PDF合同条款识别、健康报告趋势分析等高频刚需任务中,无需编程基础即可实现分钟级响应与结构化输出。本文聚焦‘普通人能立刻上手’的40个经过3个月实测验证的生活效率方案,覆盖职场、育儿、健康、消费等六大维度,突出中文语义解析与多

weixin_33898876的博客 312

项目实训(四)——SAM模型的学习与部署

这里的show_mask就是我们用mask的prompt进行分割,show_points就是我们用points进行分割,show_box就是通过box进行分割,这是SAM的三种prompt的方式。总的来说,Meta AI 的 Segment Anything 模型为我们提供了一种全新的物体识别和分割方式,其强大的泛化能力和广泛的应用前景将极大地推动计算机视觉领域的发展。这里有vit_h、vit_b、vit_l三种权重模型,这里可以根据自己的需要下载相应的权重模型。我们是下载的vit_h权重模型。

yyyyyyyx_的博客 1421

个性化视频彩铃推荐算法的应用研究(支持资料参考_相关定制)

个性化视频彩铃推荐算法的应用研究 目录 2 相关技术 2 2.2彩铃列表推荐技术 2 3 语义增强型协同过滤算法的研究 2 3.1用户彩铃下载数据分析(现在的彩铃都是视频彩铃试听版的,不要按以前的彩铃彩铃写) 2 3.2语义增强型的协同过滤算法基本原理 4 3.2.1当前主流彩铃推荐算法的不足 4 3.2.2语义增强型协同过滤算法的基本原理和流程 5 3.3彩铃歌词的隐语义分析 6 3.3.1彩铃歌词在推荐系统中的研究意义(研究意义篇幅理应简短干练突出重点意思即可) 6 3.3.2歌词语料库的建立 6 3.

qq_40828705的博客 642

qPCR定量方法在肠道微生物特定种属定量应用

大家都知道肠道中有上千种细菌,肠道微生物可参与人体代谢,促进营养物质的消化吸收,肠道微生态均衡关系到身体健康,肠道微生态失衡可能会导致疾病产生。此外有文献指出肠道微生物可能与人体免疫及炎性反应等有关。目前也越来越多人关注到疾病与肠道微生物的关系,也做了很多研究及实验,一般高通量结果得到的是每个物种在样本中的相对百分含量,而不同微生物的绝对含量其实也对疾病有很重要的影响。在此分享几篇有采用qPCR方法研究疾病与肠道微生物关系的文章。 早在2013年Kim-Anne Lê1、Yan Li等人发表文章Alter

tinygene的博客 2143

别再死记硬背GNN公式了!用PyTorch Geometric从零实现一个GraphSAGE(附完整代码)

本文通过PyTorch Geometric从零实现GraphSAGE模型,深入解析图神经网络的核心原理与实战应用。文章提供完整代码示例,涵盖环境配置、邻居采样、信息聚合等关键步骤,帮助开发者掌握图表示学习技术,避免陷入公式推导的困境。适合希望将GNN应用于实际项目的中级开发者和学生。

weixin_42530570的博客 345

网易云数据结构- Maximum Subsequence Sum

题目 题目地址 思路 显然是最大子列和的进化版,那就先思考下经典的最大子列和。这也是道思维题,啥算法也没用到,全是思维技巧,真心不知道考试遇到这种题该怎么办了。 存放答案的一个类,我把它看成一个袋子,需要什么都可以“.”出来 class ans { static int maxsub = 0; static int firstElement = 0; static i

Sundy的日记 304

树莓派通过TTL3.3转485 Modbus采集水表

所需道具 树莓派0,我用的是树莓派zero wh; 具有光电直读功能的有线水表,我用的是咸鱼淘的埃美柯LXSY-20E1; TTL3.3 转 485模块,带隔离的贵些; 5V转12V升压模块。 原理 树莓派有UART(GPIO14 Tx 和 GPIO15 Rx)串口通讯功能,电器特性是3.3V TTL,直读远传水表支持M-Bus/485通讯接口,我买的光电直读水表485要求12V供电(根据仪表厂家说明书)。TTL和485虽然都是串口通讯,但电器特性不一样,不能直接接!我已经烧掉一个树莓派...

xhydongda的博客 3441

网易云数据库架构设计实践

网易云数据库架构设计实践 云计算并不是天生为数据库设计的,在云端使用关系型数据库面临着软硬件可靠性差、可预测性低和控制能力弱等诸多挑战,网易云数据库在架构设计中充分考虑了上述因素影响,并通过相应的技术手段解决了这些问题。 阅读全文 和小伙伴们一起来吐槽

拟声的主扬在江湖 777

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

网易云失败的原因

网易云音乐的兴起在于1.把握了当代音乐圈好久没有脍炙人口的优秀歌曲出现,出现断代的间隙(选拔机制和传媒巨头的垄断),推广了一批草根小众音乐,满足了用户的新鲜感。2.通过音乐诱发的情感,通过歌单和评论表达的欲望。3.推荐系统,相比豆瓣音乐更杂,但符合普通音乐听众(而非专业的音乐爱好者)的使用习惯。 目前看来网易云音乐的发现趋势是音频电台收费和电子唱片,还有新曲的分发渠道。 1. 音频收费喜马拉雅fm...

callmeyourdaddy的博客 2679

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

为知笔记登录提示“打开数据库失败”解决方法

Win10下为知笔记登录提示“打开数据库失败”解决方法

ZT's Blog 4931

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【开源项目学习】源码剖析,学习仿网易云音乐app代码

【前言】 这篇文字不全是讲app代码,而是博主怎么根据代码系统学习梳理的过程,非专业,如有不对,欢迎指出 仿网易云音乐app源码地址:https://github.com/aa112901/remusic 代码分析过程用的代码地图工具参考链接: https://blog.youkuaiyun.com/weixin_39020940/article/details/80633835 【基础知识】 A...

杉杉的博客 1万+

网易云音乐接口+vue全家桶开发一款移动端音乐webApp

项目介绍 网易云音乐接口+vue全家桶开发一款移动端音乐webApp项目还在develop中,感兴趣想要参与的小伙伴可以私我 效果图: 骨架屏 首页 侧边 每日推荐 歌单 播放器(小) 播放器(大) 详细信息 测试地址 开发总结 项目结构 vue-cli搭建 新增目录如下: ---src ------api ...

weixin_33815613的博客 1363

网易商业化项目分享|网易云音乐-评论系统后端架构设计

​截止2019年二季度,网易云音乐用户数已经突破8亿,成为最活跃的音乐社区,位居在线音乐行业第一阵营。 相信大家或多或少都使用过网易云音乐,不知道有没有人跟我一样,在云音乐听歌的时候喜欢打开评论看一看,有时发现评论比歌曲还精彩! 话不多说,今天就带大家对网易云音乐评论技术进行一番探秘,其中很多场景的实现方法可以应用到大部分互联网系统。 该专题分为上下两篇,本文(上篇)主要讨论以下两个主题: 了解云音乐评论的业务场景 熟悉云音乐评论的基础架构 云音乐评论的业务场景 首先最常见的就是歌曲评论,每一首

好记性不如烂笔头 2263
上一篇: 《神秘的程序员们》
下一篇: 关于session variables 和 global variables
笑天居士
博客等级 码龄24年 292粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值