阿里云数据库专家白宸:Redis带你尽享丝滑!

本文仅用于学习和交流目的,不得用于商业目的。非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/art...php

访谈嘉宾:

本名郑明杭,现阿里云NoSQL数据库技术专家。前后从事Tair分布式系统、Memcached云服务及阿里云Redis数据库云服务开发,关注分布式系统及NoSQL存储技术前沿。html

图片描述

做为嘉宾,曾在飞马网&中生代技术嘉年华上发表题为《ApsaraDB for Redis云数据库技术栈详解》的演讲内容,得到观众一致叫好!redis

下图是白宸的演讲图片。数据库

图片描述


邀请白宸作客图灵访谈,咱们主要聊了些:

  • 从事数据库工做的缘由后端

  • 阿里云Redis数据库跟其余有商相比的优点缓存

  • Redis最得意和最痛的点微信

  • 分布式系统存储技术的前沿——NewSQL网络

  • 数据库实现的方法数据结构

  • ......架构

图灵访谈:为何选择数据库方面的工做?

数据库是产品应用的基础。直播、共享单车等每一个火爆产品的背后都是大量关系型数据库、NoSQL类型数据库在支撑。另外,中小企业为了专一自身业务的发展都会选择云计算,将基础设置的建设交给云服务商。云服务商为了提供高性能、高可用的数据库产品须要投入足够多的研发精力。在数据库研发过程当中,数据库研发者既能够深刻内核、网络、存储设备进行深度的优化改进,又可以在数据库层面扩展出分布式、异地容灾等不一样的产品形态,同时结合不一样类型的业务进行不一样的深度优化。

选择数据库开发工做主要是为了可以结合计算机理论知识,实践分布式、存储、数据库、内核,反过来在实践开发过程当中巩固提升本身。

图灵访谈:阿里云的Redis数据库和其余云计算厂商相比,有何优势?

阿里云的Redis云服务总体架构在ApsaraDB上,具备完善的任务管理、监控运维、高可用体系,可以支撑海量的实例管理及不一样的产品需求。阿里云Redis数据库提供了主从双副本、主从单副本、集群双副本等多样的产品供用户选择。

图片描述

主从双副本版本要求主从双机热备,将数据持久化到磁盘,当主库发生故障的时候快速切换到备库上以保证服务的可用性。相比开源Redis及其余厂商的Redis,阿里云对Redis的故障探测进行了更深度地优化:经过专门的探测端口来避免Redis单线程阻塞的影响,经过对磁盘、CPU、内存等硬件的检测提早发现故障隐患进行主动切换,优化原生的主备复制机制,采用增量日志加内存buffer的方式进行同步,避免弱网状况下主备复制频繁断开及全量同步。

图片描述

主从单副本是云数据库 Redis 推出的一种全新系列,采用单个数据库节点部署架构。与双副本版本相比,它只包含一个节点,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于对数据可靠性要求不高的纯缓存业务场景。与其余云厂商相比,阿里云Redis单副本可以保证在主库发生故障的时候快速切换到新节点,可是这个新节点是没有数据的,用户须要在切换完成以后进行数据预热避免数据库的打穿。

图片描述

阿里云Redis集群彻底采用自研的技术体系,设计的时候充分考虑到用户可以从主从版本平滑迁移过来的需求。Redis集群架构引入了Proxy、Config模块,Proxy负责数据的分发及路由,Config负责数据的迁移及路由表管理。多个无状态的Proxy、Config模块能够保证整个链路的高可用,避免单点问题。与其余云厂商相比,阿里云Redis集群可以保证更高的兼容性,用户能够在主从版本和Redis集群之间进行无缝切换,不须要去更改用户的代码。同时,阿里云Redis集群还支持多db的模式,相比大部分开源的Redis集群方案有较大的优点。

为了更好的服务用户,后续阿里云Redis产品还会推出读写分离、异地容灾、异地多活等产品形态供用户进行选择。最近阿里云Redis又推出了256MB的主从双副本实例,适用于PHP缓存、论坛加速、数据库加速等,随着业务的发展用户还能够进一步扩容。活动期间能够享受99元包年的优惠

图灵访谈:前后接触过Tair,Memcached和Redis后,在云服务开发中有哪些深入的体会?

做为基础服务开发工程师,数据库的稳定性、性能是第一要位的。用户对数据库的高可用及稳定性都有很高要求的,咱们在开发过程当中须要选用合理的架构,在架构上避免单点问题,避免故障没法恢复问题。对于云服务须要作到足够的隔离,避免不一样租户的互相影响,同时在设计云服务过程当中须要考虑到可扩展性。公有云服务的每一个业务都有本身的特色,会催生出不一样的业务需求,因此在初步设计的时候须要保留支持多种业务模式的能力。

图灵访谈:在阿里云内部,Redis技术最得意的应用场景是什么?使用过程当中存在哪些痛点?

阿里内部大量使用了阿里云Redis服务,好比手淘、高德、CDN业务、菜鸟等都大量使用了Redis以实现不一样的业务。微淘社区承载了亿级淘宝用户的社交关系链,其中每一个用户都有本身的关注列表,每一个商家都有本身的粉丝信息。我用下面的图来展现整个微淘社区承载的关系链。

图片描述

若是选用传统的关系型数据库模型表达上面的关系信息,业务设计会变得异常繁杂,也不能得到良好的性能体验。使用Redis集群,微淘社区缓存了存储社区的关注链,简化了关注信息的存储,并保证了双11业务丝滑通常的体验。微淘社区使用了Hashes存储用户之间的关注信息,存储结构以下图所示。

图片描述

随着业务规模的壮大,用户须要后端Redis云服务可以作到动态扩容。阿里云Redis集群实例提供了资源变配功能,用户能够在须要的时候进行变配以应对容量的增长。另外,对于淘宝业务来讲,每一年的双11都是重中之重,咱们在双11以前都会跟业务方确认当年的访问量和业务量,同时提早进行双11的全链路压测,保证业务丝滑般的体验。

在使用开源Redis的过程当中,咱们也碰到了不少问题,好比原生Redis的同步依赖于内存buffer,这会带来一个问题:在弱网状况下,若是内存buffer溢出,原生Redis须要进行一次全量同步。为此阿里云Redis对主备同步进行了优化,经过binlog日志加内存buffer的形式解决掉弱网全量同步的缺陷。另外,在云服务开发运维过程当中不免须要对Redis服务进行升级管理,但原生的Redis内核不能很好地支持热升级机制,若是直接重启会对用户的访问产生很大的影响。阿里云Redis经过拆分动态库的形式作到了3ms内对一个实例进行热升级,并且升级过程当中对用户的访问不会有任何影响。

图灵访谈:关系型和非关系型数据库在实现上有哪些主要区别?各自面向的应用领域和做用是什么?

简单来讲,关系型数据库是指采用关系模型来组织的数据库。传统的关系型数据库由二维表模型来组织,表与表之间具备必定联系,业务能够经过SQL语句对数据库进行更新、查找、删除。非关系型数据库(NoSQL)的最初定义是没有SQL的轻量级数据库,而且不保证遵循ACID原则的数据存储系统。

关系型和非关系型最大的区别在因而否保持事务的一致性,虽然像Redis这样的非关系型数据库也有事务的说法,不过Redis事务是相对简单的事务模型,而传统关系型的数据库是要求读写操做来保证事务一致性的,由于关系型的数据库具备更多的应用场景,而且多用于对数据一致性有强烈要求的系统中。非关系型数据库里的key—value结构具备极高的并发读写性能,因此经常用于高速缓存中,做为传统数据库的缓存提供更高的并发访问。

图灵访谈:新手如何选择数据库类型,传统关系型数据库仍是非关系型数据库?

两种数据库类型是相辅相成的,关系型数据库能够用于对数据一致性有更高要求的场景,同时可以支撑复杂类型的关联查询,而非关系型的数据库能够用于数据库的缓存,或者用于结构简单的业务场景。另外,因为Redis提供了更多复杂类型的数据结构,因此也能够将Redis用于更丰富的业务场景,好比用List结构来实现推送系统、弹幕系统等。

图灵访谈:数据库的实现至关复杂,若是想要研究如何实现数据库系统,即学习造轮子,您有什么建议?

若是要研究数据库的实现能够先从应用层的应用开始,先熟悉数据库的应用场景,也能够先阅读数据库相关的基础知识,了解数据库的SQL解析、持久化机制、数据同步、数据库索引等掌握数据库实现的设计原理。学习过程当中,咱们能够阅读优秀开源数据库的源码实现,跟踪调试了解整个数据库命令执行的过程;根据数据库命令的每一步执行,在代码跟进过程当中思考如何优化和增长新功能。积极融入开源社区的各类活动,按期查看社区的问题。在解决社区用户汇报问题的过程当中,对数据库知识作到总体地把握,着重深刻某一具体方面的知识。

以NOSQL数据库的学习为例,咱们能够经过阅读Redis数据库源码,了解每种数据结构在内存里的组织方式,思考如何更好地存储复杂类型的数据结构。跟Memcached进行比较,分析两种作法的优劣。

为了更好地研究数据库的实现,咱们须要多动手,在实际项目中了解数据库的实现,经过开发新功能、优化老功能来巩固知识,同时兼顾数据库理论知识的学习。

图灵访谈:如何保证缓存数据和数据库数据的一致性?

在大数据、高并发的状况下,不少业务系统都会采用“缓存+数据库”的方式,对缓存副本和数据库数据作同步处理。同步的方式主要有如下几种。

  • 自动失效: 经过设置过时时间让缓存中的数据自动失效,对数据一致性要求更高的业务,能够将过时时间设置得短一点

  • 定时刷新: 经过后台设置定时刷新的线程,定时将数据库的数据同步到缓存中,这种模式适合对一致性要求不是很高的业务

  • 同步更新:在更新完成数据库以后,直接更新缓存的数据。这样缓存的数据就永远在数据库以后更新,可以保证数据的一致性

  • 中间件更新:经过中间件订阅数据库的binlog服务,感知数据库信息的变化在中间件上对缓存进行更新,这种模式可以快速感知数据库的变化而且不须要业务方去管理缓存,方便业务接入缓存系统

图灵访谈:谈谈分布式系统存储技术将来的方向?

因为传统单机数据库在可扩展性上面临着巨大的挑战,而NoSQL并不能很好地支持关系型的数据库模型,NewSQL成为了目前分布式数据库存储技术最前沿的一个方向。NewSQL具备海量数据的存储管理而且可以保持传统数据库的ACID及SQL特性。

NewSQL采用了大量的新技术。在存储方面,NewSQL采用之内存为主的存储,将主要的数据缓存于内存中,可以维持内存和持久化存储的数据比例,提升系统的性能;为了支持数据库的可扩展性,NewSQL经过数据分片的模式将数据分布到不一样的group中,同时可以支持不一样group的数据进行热迁移以达到数据的负载均衡;NewSQL在复制方面须要保证数据的一致性,事务的写入必须在被确认提交以前被确认并安装到全部副本;要作到高可用就须要从崩溃中恢复,相比传统的故障恢复,NewSQL还但愿尽可能减小故障恢复的时间。

从技术角度来说,NewSQL与传统数据库并非彻底不一样的架构,NewSQL的新特色在于可以融合多方的技术,在一个独立的系统中进行实现,同时随着硬件技术的发展可以提供更可靠更具备扩展性的数据库服务。


——更多访谈


更多精彩,加入图灵访谈微信!

相关文章
相关标签/搜索