毋庸置疑,数据已经成为信息化社会最关键的基础元素之一。离开数据的支持,大数据、人工智能等技术就都没有了用武之地,信息化、智能化也就成了空谈。而数据库则是存储和承载数据的重要场所,因此,其重要性不言而喻。随着云计算的飞速发展,云端数据库技术开始被普遍应用。云端数据库是在云计算的大背景下发展起来的一种新兴的共享基础架构的方法,它极大地增强了数据库的存储能力,消除了人员、硬件、软件的重复配置,让软、硬件升级变得更加容易,而且具有高可扩展性、高可用性、采用多租形式和支持资源有效分发等特点。可以说,掌握云端数据库技术将是现在以致未来,数据库技术人员所必备的技能。
10月27日,为了帮助数据库技术人员能够更好的掌握云端数据库技术,腾讯云携手中国专业的IT技术社区CSDN在深圳市腾讯大厦2楼多功能厅举办“赋能业务创新-云数据库最佳应用实践”沙龙,以云端数据库具体的应用实践,为与会的众多数据库技术人员分享了包括如何设计出高可用的MySQL系统,解读最流行的Redis缓存类数据库在云端的技术运用以及Elassticsearch调优在内的应用实践,并深度结合小程序和珍爱网在利用腾讯云云数据库过程中的实践经验,介绍如何在降低开发与运维成本的情况下,打造爆款应用程序。
腾讯高级工程师王甲坤首先为挤满整个会场的观众介绍了如何设计高可用的MySQL系统,王甲坤认为,高可用的关键指标是RPO和RTO,而设计高可用的MySQL系统,通常有三种模式:
模式一,Shared Everthting方式:
基于单机存储的模式,一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力是较差的。
模式二,Shared Disk方式:
基于共享存储的模式,各个处理单元使用自己的私有CPU和Memory,共享磁盘系统。典型的代表Oracle Rac,它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。
模式三,Shared Nothing方式:
基于数据复制的模式,各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。
对于基础设施的高可用,通常采用同城双活、两地三中心等方式,而对于MySQL系统的高可用,首先备份是最基础最保底的保障,建议必须保留。
MySQL备份分为逻辑备份、物理备份和快照三类。腾讯云主要采用基于xtrabackup开发的实现可并行备份加流式压缩的物理备份,成功率与速度都比较高。另外,腾讯云MySQL基础版,架构于CVM和CBS之上,支持快照备份功能。其次,基于数据复制模式是MySQL高可用的常见热备方案,通过MySQL复制协议和故障自助发现与转移来实现数据在节点间的一致性。 腾讯云MySQL先支持最多挂载5个只读实例,来满足读写分离的场景。
王甲坤还介绍了复制相关的Binlog知识,主从复制的大体流程,以及三种复制方式:异步、半同步、强同步。而对于在复制中SQL线程的瓶颈,通过各个版本MySQL的并行复制功能也能得到解决。但DRBD(Distributed Replicated Block Device),这款基于块设备级在远程服务器直接同步和镜像数据的工具则是MySQL官方文档手册中作为推荐的高可用的方案之一。
王甲坤提到,由于MySQL并没有提供故障转移功能,一般需要借助第三方工具进行故障恢复。业界普遍采用的方案是Keepalived、MMM和MHA,但都有一定的缺点,而腾讯云用的是自己实践的一套故障检测,不存在单点的问题,能做到故障检测恢复到30秒钟以内,大大提高了MySQL的高可用。王甲坤最后还介绍了保证PXC、 MGC、MGR等另外三种MySQL高可用架构。
腾讯云云数据库Redis产品负责人邹鹏针对大规模Redis集群架构设计进行了讲解,他表示,Redis的使命就是更快更简单,遵循这个使命的Redis数据库的排名已经超过了ES了,位列第七。Redis的特点,第一是快,可以达到单核10W QPS,第二是in-memory cache,即Redis不用建表。邹鹏认为,Redis主要场景还是在于缓存,如果抛开游戏的场景,80%的场景都是缓存,所以它还是缓存数据库。
邹鹏接着介绍了腾讯云基于社区4.0版本+自研打造的Redis4.0 Cluster分布式数据库。Redis官方的Cluster具有两个特征:Sharding以及自治管理。而腾讯认为Redis Cluster一定要做一个Proxy方案,第一源生集群版必须有一个智能客户端支持,这是因为智能客户端支持有限,无法直接迁移到集群版,而客户端需要感知后端架构,并进行网络流量隔离,承载更丰富的功能,减少对Redis代码的入侵,而如果没有代理这些都不容易实现。
腾讯云采用的Smart Proxy 方案,后端是官方源生的Cluster,完全是自治的版本,并进行了一些优化。前端的智能客户端会完成代理转发,做大量定制化监控以及数据、节点的选择判断的情况,再往前面就是LB,把所有细节都屏蔽到了后端。
在数据迁移方面,针对大Key和热Key的迁移难题,腾讯云通过采用访问监控、Key分析、指标监控、慢查询、告警配置、流量隔离等手段充分发挥Proxy的作用,从而解决了数据迁移中大Key和热Key的问题,最终的架构如图所示。
邹鹏还介绍了腾讯云CKV,它是一种原生分布式的集群解决方案,突破单线程,时延只有0.2毫秒,但可以使内存使用率提升15~25%。
腾讯云产品经理李晓慧以MongoDB在小游戏中的实践应用,分享了MongoDB在小游戏开发方面为开发者带来的便利。李晓慧表示,游戏开发中一个最主要的特点是需求变化非常快,因为在游戏和开发不同的阶段会加入一些新的元素黏住用户,像一种道具的场景,就需要在游戏上线的不同阶段加载不同的道具,用传统的关系型数据库则需要对表结构进行修改的DDL操作,而MongoDB不需要改变表结构,这对开发者是非常友好的。
李晓慧强调,现在大多数游戏都会添加社交元素增强用户的活跃度,黏住用户。腾讯云提供了地理位置索引以及配套的API,不需要在业务层操作,就可获得数据库层的支持。对于海量数据,腾讯云提供了分片的功能,例如游戏开始上线时,其实并不知道业务上线需要的数据量。而当游戏上线后期,由于数据量的增多,如果用关系型数据库的话,就避免不了进行分部分表扩容,而MongoDB提供了分片集群,可以在不影响业务的同时进行水平的扩容,这对运维来说是非常好的解决方案。至于运营分析,MongoDB源生即支持,开发者可以直接套用。更重要的是,MongoDB支持JavaScript全栈MERN、MEAN。因此,MongoDB特别适合游戏开发场景。
李晓慧还介绍了如何优化MongoDB的连接,她表示,首先,腾讯云对MongoDB的连接进行了优化。MongoDB的连接其实分为两部分,第一部分是Mongos对前端的连接,第二部分是Mongos对后端的连接,有两个关键参数,最小连接数参数minConnections 和连接IdleTime参数refreshRequirement的设置对于MongoDB的连接效率非常重要,针对这两个参数,腾讯云为开发者提供了可计算的公式,并建议对于refreshRequirement的参数设置至少是包含两个连接峰值的头。
其次,腾讯云MongoDB通过读写分离策略减少了慢查询, 从而将MongoDB的读延时从官方版的85毫秒左右缩短到10毫秒左右,效率提升了将近9倍。
第三,通过分片群集,提供灵活可扩展的特性,从而大大减轻了运维人员的负担。
第四,对于令游戏运维非常头疼的库表回档方面, 腾讯云MongoDB是唯一提供库表回档的,而且可以支持细化到一定级别,对运维人员是非常方便的功能。
第五,在监控方面,腾讯云MongoDB也是唯一支持表级监控,表级监控内容比较分散,有CRUD操作监控,请求时延监控,包括10毫秒到50毫秒,50毫秒到100毫秒,以及超过100毫秒三种力度。请求个数也有监控,还有比较重要的容量和记录监控,腾讯云MongoDB都支持。
针对目前火热的小程序开发,李晓慧介绍了腾讯云的TCB小游戏解决方案,该方案可以为开发者提供完整的云端流程,弱化后端和运维概念,无需开发者搭建后端服务。开发者可以直接使用小程序的 JS-API 进行核心业务开发,即可实现小游戏快速上线和迭代,还可以根据自身需求创建多个环境,以用于开发、测试及生产等多种场景,并且每个环境的资源是独立且相互隔离的。这种方案特别适合个人开发者、初创团队,对于成熟团队的项目的话,可以立即使用。
腾讯高级工程师陈曦则分享了Elasticsearch的调优经验,陈曦首先介绍了Elasticsearch的基本原理。Elasticsearch是一个搜索引擎,它具有高性能、高可靠、易管理、易使用的特点,有很强大的综合分析能力,可以通过脚本进行复杂的计算。Elastic Stack是集数据采集、清洗、存储、可视化为一体的完整解决方案。ES有比较广泛的应用领域,主要的应用场景是日志分析、数据分析统计,还有全文检索,功能比较强大。Elasticsearch的数据模型如下图所示。
陈曦表示,Elasticsearch的调优主要基于三个层面:降低存储成本、提升集群稳定性和提高集群性能。
在降低成本方面,也包括两方面,一方面是对字段存储的优化,另一方面是对字符串字段的优化,在对倒排索引、行存、列存三个字段的存储中,对于CPU监控这种场景,可以通过关闭索引字段来进行存储优化,对于统计分析场景,只需列存即可。而对于日志类场景,则仅需行存即可。通过这样的优化,行存的成本能够降低40%左右。
对于字符串字段的优化,也是分两部分,text和keyword,text可以做分词,然后对每个词都可以高排索引,拿一个词可以搜到一整段话。如果仅仅是想把文本存进去并且取出来的话,后面都是可以去掉的。至于keywork,可以模糊匹配,但不能拿一个词搜索整段话,由于它不需要做分词,所以速度会比较快。
要提升集群稳定性方面,最有效的方法就是控制index的分片数,陈曦介绍,一个index是由多个shard组成的,一个index有三个shard,分布在不同节点上,一个请求写几百个几千个文档在里面,当请求到达ES某个节点的时候,会计算对于几千个文档,分别属于哪个shard,然后这个时候会放到BulkQueue存储中。BulkQueue的默认值是100,如果shard数量过大BulkQueue就很容易被填满,shard数值过小的话,就无法充分利用节点资源,陈曦给出的建议是100GB以下的index设置3-5个shard,但这并不是可以适用每个场景,具体还要看业务的实际情况。
在提升集群性能方面,分为四方面,一方面是控制index的副本数量,另一个是优化持久性参数,第三方面是写入方式优化,第四方面是查询优化。
而腾讯云是通过云管平台、降低存储成本、提升集群稳定性和提高集群性能等四方面对ES进行优化。
首先,腾讯云的云管平台是一套自动化运维系统、它本身可以预装一些插件,包括中文分词插件、SQL插件、数据导出插件等,系统会自动按照一定时间间隔创建index,而不需关心有多少index。此外,还通过Kibana、跨机房容灾、Dedicated Master等方式,提升集群的稳定性。
在降低存储成本方面,通过倒排索引内存优化、冷热分离对存储成本进行优化。实际上,在查询过程中,有一个词典和一个倒排表,ES为了加速查询过程,把词典华分成一个个的block,前缀相同的词可以放到block里面,前缀相同的前缀数会指向block,而实际上,在这个小范围内一个匹配词典就可以了,这样就可以快速加大性能。
冷热分离是指,ES本身可以对于每个NODE加一些属性在里面,通过ES的一个命令可以强制把一个表所有数据搬迁到指定的一个属性的节点上面,所以在集体上架的时候可以同时上两个,用户可以在WEB界面配置哪类的index多久之后降低使用成本,腾讯云后台就有这样一个调速器,会发送命令,从而降低用户的使用成本。
在提升集群稳定方面,通过集群均衡策略优化、自研限流功能,使得集群稳定性得到较大的提升。 集群均衡策略是指在通常情况下随着业务的增长,ES默认会把大的Shard放在小的节点上面,新增的shard读写压力就会比较大,这种情况下就会造成单点过热的问题,腾讯云对此进行了优化,去掉重复上报的shardfailed信息,从而大大降低了Master的压力。
自研限流功能主要针对ES本身对于JVM判断不准,在写入量大的情况下会导致OOM的情况而推出的,为此,腾讯云做了一个曲线限流的功能。通过这个优化,有效避免了OOM情况的出现。
在查询优化方面,腾讯云ES系统可以根据查询到的数据量进行预估,超过一定量就不做缓存,从而避免了加载过大缓存,拖慢查询速度的问题。
来自珍爱网的DBA周耀荣最后一个登场,他分享了珍爱网云数据库的使用经验,周耀荣首先谈了自己对于云数据库与DBA之间关系的看法,并以几个实例说明了云数据库的作用,他认为, 云上提供的服务就是重复性高的工作的标准化和自动化。
对于DBA来说,周耀荣认为应该考虑六方面的问题,第一是从业务整体运维的角度,就是说当购买云服务的时候差异性体现在哪里,需要考虑清楚。第二是异常的处理,就是DBA需要具有异常处理的能力,这样才能在云数据库时代仍然有竞争力。第三是性能容量管理,DBA要从整个业务的视角,对性能容量进行管理。第四是故障透视能力,故障的透视能力,是作为DBA管理员很重要的能力。第五,架构规划,比如高可用架构,要怎么拆分,容灾如何考虑,这都是需要DBA考虑的问题。第六,SQL上线审核。当公司业务发生变更的时候,怎么把控上线的风险会不会对数据造成误删除,这些都是需要DBA考虑的。
周耀荣总结到,规划类的、优化类、主动管理类的工作,在未来比较长的一段时间内还是需要DBA解决的,因此,DBA大可不必担心失业问题。
周耀荣最后给到场的观众分享了珍爱网目前在数据库方面正在做和计划要做的事情,谈到了涉及的相关技术,并为到场的观众展示了珍爱网在数据库建设方面的成果。
最后,沙龙活动在一片热烈的掌声中落下了帷幕,而腾讯云+社区技术沙龙活动将会继续延续下去,而下一站将是,对此感兴趣的朋友们可千万不要错过啊!