海量的题库、音视频答题资料、用户数据以及日志,对猿辅导后台数据存储和处理能力都提出了严峻的要求。而因为教育辅导行业的业务特色,猿辅导也面临着业务峰值对于数据库能力的巨大挑战。本文就为你们介绍阿里云POLARDB如何帮助猿辅导打造“孩子喜欢老师好”的网课平台。数据库
猿辅导业务背景
猿辅导是国内知名在线教育机构,旗下有猿辅导、猿题库、小猿搜题、小猿口算、斑马英语五款核心在线教育APP,为学生和家长提供在线辅导、拍照答疑、智能题库、自动批改等相关的智能教育服务。猿辅导拥有百亿级的K-12学习行为数据库,并率先将AI、大数据等前沿技术应用于教育场景。后端
猿辅导自建数据库方案所面对的挑战
猿辅导以前采用的是自建数据库的解决方案,可是由于自身业务特色,在周末或者在线模考的时候,同时在线人数会瞬间激增,而本来的自建数据库方案难以应对这样的访问峰值,所以会有大约三分之一的学生没法正常进入在线考试。而答题的延时也从正常状况下的1秒以内增加到平均5秒,使得学生用户的答题体验急剧降低。与此同时,猿辅导的用户量每一年飞速增加,自建MySQL数据库的CPU利用率已经达到了70%以上。此外,猿辅导的DBA本来由运维人员兼职,可是面对这样纷繁复杂的数据库管理任务,兼职DBA力不从心,而招聘专职DBA却预计会须要每一年至少100万的成本。总之,自建数据库方案难以应对访问峰值,难以知足业务高速发展的需求,而且难以管理,且会增大人力成本等问题,这些都是摆在高速发展的猿辅导面前的巨大挑战。服务器
猿辅导基于POLARDB数据库解决方案
面对上述的诸多挑战,猿辅导基于阿里云POLARDB实现了新的数据库解决方案。猿辅导之因此选用阿里云POLARDB数据库,除了POLARDB数据库具备较高的性能,而且可以MySQL实现100%兼容以外,更加看重POLARDB的弹性伸缩能力和容量最高可达100T的能力。由于猿辅导的业务特色,用户访问量在平时能够轻松应对,可是在周末以及考试期间达到业务访问的高峰,所以应对数据库问题的主要难点在于用户的高并发访问所形成的读写争用,进而使得I/O较高,而若是一直购买高配置的MySQL数据库,成本难以接受。而猿辅导经过使用阿里云POLARDB,借助其快速弹性的能力,在业务的高峰期临时增长数据库配置和集群规模,与以前的方案相比总体成本大大下降。网络
猿辅导基于阿里云POLARDB分钟级弹性数据库集群
对于猿辅导这样具备明显业务峰值特征的产品而言,最为看重的就是POLARDB的分钟级弹性能力。而在其强大的弹性能力的背后实际上是POLARDB存储与计算分离设计。所谓分离就是计算节点(DB Engine)和存储节点(DB Store)在不一样的物理服务器上,任何落地到存储设备的I/O操做均为网络I/O。并且,借助PolarFS通过网络访问PolarStore的测试性能效果基本可以与本地单副本SSD持平。而POLARDB的存储与计算分离的架构,除了能够下降存储成本,保证主备数据强一致、不丢数据以外,还带来了一个巨大的优点,就是让数据库的弹性伸缩变得极为简单、便捷。session
阿里云POLARDB分层架构图
正如上图所示,POLARDB采用了分层架构,从上层的代理PolarProxy提供了读写分离、SQL加速等功能,到中间的数据库引擎节点POLARDB构造了一写多读的数据库集群,再到底层的分布式存储PolarStore为上层提供多节点挂载的数据共享,每一层各司其职,共同构建了POLARDB云数据库集群。多线程
从POLARDB产品定义上看,用户购买的节点数和规格大小(好比4核16G)指的是中间这一层POLARDB的配置,上层PolarProxy能够根据POLARDB的配置自适应调整,用户不需购买也不用关心性能和容量。底层PolarStore的容量是自动扩容,只须按照实际使用容量付费。架构
一般意义的扩展性,通常有纵向(Scale up)和横向(Scale out)和两种方式,纵向是指提高配置,横向是指配置不变,但增长节点。对于数据库来讲,都是先纵向,好比4核不够升到8核。但终归会遇到瓶颈,一方面性能提高非线性,跟数据库引擎自身的设计和应用访问模型有关(好比MySQL的多线程设计,若是只有一个session,那么很难体现出多核的优点),另外一方面,计算物理服务器配置有上限,存在天花板。所以终极手段仍是横向扩展,增长节点数。并发
阿里云控制台POLARDB升降配操做示意图
对于POLARDB而言,其弹性能力能够归纳为“横向最多能够到16个节点,纵向最高可到88核,而且存储容量动态扩展,毋须配置”。那么,在这样强大的弹性能力的背后,POLARDB的底层技术到底是怎样实现的呢?接下来就从纵向、横向和存储三个方面介绍。运维
纵向扩展(升级/降级配置):得益于存储与计算分离,POLARDB数据库节点的配置能够单独升级或降级,若是当前服务器资源不足,还能够快速地迁移到其余服务器,整个过程目前只须要5-10分钟,中间不须要任何的数据搬迁,只是若是涉及到跨机迁移,将来还能够经过PolarProxy消除升级对业务应用的影响。由于目前同一集群内的全部节点必须绑定升级,所以POLARDB采用了Rolling Upgrade滚动升级的方式,经过控制升级的节奏、搭配主备切换来进一步减小不可用时间。分布式
横向扩展(增/减节点):因为存储是共享的,所以能够快速增长节点,而不须要任何的数据COPY。整个过程也只须要5-10分钟,若是是增长节点,对业务应用没有任何影响,若是是减小节点,那么仅对落到该节点执行的链接有影响,从新链接便可。当增长节点以后,PolarProxy能够动态感知并自动加入到读写分离后端的读节点中,对于使用集群访问地址(读写分离地址)链接POLARDB的应用程序能够立马享受到更好的性能和吞吐。
毋须管理的存储空间:POLARDB的存储空间不须要关心,按量付费,每小时自动结算。在目前的设计中,I/O能力与数据库节点的规格有关,规格越大,IOPS和I/O吞吐量越高,在节点上对I/O有隔离和限制,可以避免多个数据库集群之间的I/O争抢。本质上,数据是被保存在由大量服务器构成的存储池中,因为可靠性要求,每一个数据块复制出3个副本,保存在不一样机架的不一样服务器上。而存储池可以进行自我管理,动态扩容、平衡,避免存储碎片和数据热点。
使用POLARDB为猿辅导带来的收益猿辅导将数据库迁移到阿里云POLARDB以后,在业务平峰的时候,可以同时支撑大致量学生在线进行课程学习,而且业务根本不会感受到压力。而当应对业务高峰的时候,只须要提早一小时进行准备,就可以将业务能力临时提高至足以应对100万学生并发访问的等级。并且,因为POLARDB数据库资源能够按需弹性伸缩,所以在猿辅导从MySQL迁移到POLARDB以后节省了5个只读库的容量,节省了近70%的数据库费用支出。此外,在线数据库维护工做量可以下降95%,无需资深的专业DBA坐镇,所以大大下降了数据库维护的人力成本。最后,若是从业务维度来看,猿辅导在迁移到POLARDB以后,大大提高了用户体验。