从实践出发,腾讯云深入解读云端数据库技术

毋庸置疑,数据已经成为信息化社会最关键的基础元素之一。离开数据的支持,大数据、人工智能等技术就都没有了用武之地,信息化、智能化也就成了空谈。而数据库则是存储和承载数据的重要场所,因此,其重要性不言而喻。随着云计算的飞速发展,云端数据库技术开始被普遍应用。云端数据库是在云计算的大背景下发展起来的一种新兴的共享基础架构的方法,它极大地增强了数据库的存储能力,消除了人员、硬件、软件的重复配置,让软、硬件升级变得更加容易,而且具有高可扩展性、高可用性、采用多租形式和支持资源有效分发等特点。可以说,掌握云端数据库技术将是现在以致未来,数据库技术人员所必备的技能。


10月27日,为了帮助数据库技术人员能够更好的掌握云端数据库技术,腾讯云携手中国专业的IT技术社区CSDN在深圳市腾讯大厦2楼多功能厅举办“赋能业务创新-云数据库最佳应用实践”沙龙,以云端数据库具体的应用实践,为与会的众多数据库技术人员分享了包括如何设计出高可用的MySQL系统,解读最流行的Redis缓存类数据库在云端的技术运用以及Elassticsearch调优在内的应用实践,并深度结合小程序和珍爱网在利用腾讯云云数据库过程中的实践经验,介绍如何在降低开发与运维成本的情况下,打造爆款应用程序。


640?wx_fmt=jpeg

     

腾讯高级工程师王甲坤首先为挤满整个会场的观众介绍了如何设计高可用的MySQL系统,王甲坤认为,高可用的关键指标是RPO和RTO,而设计高可用的MySQL系统,通常有三种模式:

模式一,Shared Everthting方式:

基于单机存储的模式,一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力是较差的。

模式二,Shared Disk方式:

基于共享存储的模式,各个处理单元使用自己的私有CPU和Memory,共享磁盘系统。典型的代表Oracle Rac,它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。

模式三,Shared Nothing方式:

基于数据复制的模式,各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。


640?wx_fmt=jpeg

     

对于基础设施的高可用,通常采用同城双活、两地三中心等方式,而对于MySQL系统的高可用,首先备份是最基础最保底的保障,建议必须保留。

MySQL备份分为逻辑备份、物理备份和快照三类。腾讯云主要采用基于xtrabackup开发的实现可并行备份加流式压缩的物理备份,成功率与速度都比较高。另外,腾讯云MySQL基础版,架构于CVM和CBS之上,支持快照备份功能。其次,基于数据复制模式是MySQL高可用的常见热备方案,通过MySQL复制协议和故障自助发现与转移来实现数据在节点间的一致性。 腾讯云MySQL先支持最多挂载5个只读实例,来满足读写分离的场景。


王甲坤还介绍了复制相关的Binlog知识,主从复制的大体流程,以及三种复制方式:异步、半同步、强同步。而对于在复制中SQL线程的瓶颈,通过各个版本MySQL的并行复制功能也能得到解决。但DRBD(Distributed Replicated Block Device),这款基于块设备级在远程服务器直接同步和镜像数据的工具则是MySQL官方文档手册中作为推荐的高可用的方案之一。


640?wx_fmt=jpeg

     

王甲坤提到,由于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,把所有细节都屏蔽到了后端。


640?wx_fmt=jpeg

     

在数据迁移方面,针对大Key和热Key的迁移难题,腾讯云通过采用访问监控、Key分析、指标监控、慢查询、告警配置、流量隔离等手段充分发挥Proxy的作用,从而解决了数据迁移中大Key和热Key的问题,最终的架构如图所示。

       

640?wx_fmt=jpeg

     

邹鹏还介绍了腾讯云CKV,它是一种原生分布式的集群解决方案,突破单线程,时延只有0.2毫秒,但可以使内存使用率提升15~25%。


640?wx_fmt=jpeg


腾讯云产品经理李晓慧以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倍。

 

640?wx_fmt=jpeg

   

第三,通过分片群集,提供灵活可扩展的特性,从而大大减轻了运维人员的负担。

   

640?wx_fmt=jpeg

 

第四,对于令游戏运维非常头疼的库表回档方面, 腾讯云MongoDB是唯一提供库表回档的,而且可以支持细化到一定级别,对运维人员是非常方便的功能。


第五,在监控方面,腾讯云MongoDB也是唯一支持表级监控,表级监控内容比较分散,有CRUD操作监控,请求时延监控,包括10毫秒到50毫秒,50毫秒到100毫秒,以及超过100毫秒三种力度。请求个数也有监控,还有比较重要的容量和记录监控,腾讯云MongoDB都支持。


针对目前火热的小程序开发,李晓慧介绍了腾讯云的TCB小游戏解决方案,该方案可以为开发者提供完整的云端流程,弱化后端和运维概念,无需开发者搭建后端服务。开发者可以直接使用小程序的 JS-API 进行核心业务开发,即可实现小游戏快速上线和迭代,还可以根据自身需求创建多个环境,以用于开发、测试及生产等多种场景,并且每个环境的资源是独立且相互隔离的。这种方案特别适合个人开发者、初创团队,对于成熟团队的项目的话,可以立即使用。


腾讯高级工程师陈曦则分享了Elasticsearch的调优经验,陈曦首先介绍了Elasticsearch的基本原理。Elasticsearch是一个搜索引擎,它具有高性能、高可靠、易管理、易使用的特点,有很强大的综合分析能力,可以通过脚本进行复杂的计算。Elastic Stack是集数据采集、清洗、存储、可视化为一体的完整解决方案。ES有比较广泛的应用领域,主要的应用场景是日志分析、数据分析统计,还有全文检索,功能比较强大。Elasticsearch的数据模型如下图所示。


640?wx_fmt=jpeg


陈曦表示,Elasticsearch的调优主要基于三个层面:降低存储成本、提升集群稳定性和提高集群性能。


在降低成本方面,也包括两方面,一方面是对字段存储的优化,另一方面是对字符串字段的优化,在对倒排索引、行存、列存三个字段的存储中,对于CPU监控这种场景,可以通过关闭索引字段来进行存储优化,对于统计分析场景,只需列存即可。而对于日志类场景,则仅需行存即可。通过这样的优化,行存的成本能够降低40%左右。

     

640?wx_fmt=jpeg


对于字符串字段的优化,也是分两部分,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等方式,提升集群的稳定性。

   

640?wx_fmt=jpeg

 

在降低存储成本方面,通过倒排索引内存优化、冷热分离对存储成本进行优化。实际上,在查询过程中,有一个词典和一个倒排表,ES为了加速查询过程,把词典华分成一个个的block,前缀相同的词可以放到block里面,前缀相同的前缀数会指向block,而实际上,在这个小范围内一个匹配词典就可以了,这样就可以快速加大性能。

     

640?wx_fmt=jpeg


冷热分离是指,ES本身可以对于每个NODE加一些属性在里面,通过ES的一个命令可以强制把一个表所有数据搬迁到指定的一个属性的节点上面,所以在集体上架的时候可以同时上两个,用户可以在WEB界面配置哪类的index多久之后降低使用成本,腾讯云后台就有这样一个调速器,会发送命令,从而降低用户的使用成本。

     

640?wx_fmt=jpeg


在提升集群稳定方面,通过集群均衡策略优化、自研限流功能,使得集群稳定性得到较大的提升。 集群均衡策略是指在通常情况下随着业务的增长,ES默认会把大的Shard放在小的节点上面,新增的shard读写压力就会比较大,这种情况下就会造成单点过热的问题,腾讯云对此进行了优化,去掉重复上报的shardfailed信息,从而大大降低了Master的压力。

     

640?wx_fmt=jpeg


自研限流功能主要针对ES本身对于JVM判断不准,在写入量大的情况下会导致OOM的情况而推出的,为此,腾讯云做了一个曲线限流的功能。通过这个优化,有效避免了OOM情况的出现。

     

640?wx_fmt=jpeg


在查询优化方面,腾讯云ES系统可以根据查询到的数据量进行预估,超过一定量就不做缓存,从而避免了加载过大缓存,拖慢查询速度的问题。


640?wx_fmt=jpeg

     


来自珍爱网的DBA周耀荣最后一个登场,他分享了珍爱网云数据库的使用经验,周耀荣首先谈了自己对于云数据库与DBA之间关系的看法,并以几个实例说明了云数据库的作用,他认为, 云上提供的服务就是重复性高的工作的标准化和自动化。


对于DBA来说,周耀荣认为应该考虑六方面的问题,第一是从业务整体运维的角度,就是说当购买云服务的时候差异性体现在哪里,需要考虑清楚。第二是异常的处理,就是DBA需要具有异常处理的能力,这样才能在云数据库时代仍然有竞争力。第三是性能容量管理,DBA要从整个业务的视角,对性能容量进行管理。第四是故障透视能力,故障的透视能力,是作为DBA管理员很重要的能力。第五,架构规划,比如高可用架构,要怎么拆分,容灾如何考虑,这都是需要DBA考虑的问题。第六,SQL上线审核。当公司业务发生变更的时候,怎么把控上线的风险会不会对数据造成误删除,这些都是需要DBA考虑的。


周耀荣总结到,规划类的、优化类、主动管理类的工作,在未来比较长的一段时间内还是需要DBA解决的,因此,DBA大可不必担心失业问题。

周耀荣最后给到场的观众分享了珍爱网目前在数据库方面正在做和计划要做的事情,谈到了涉及的相关技术,并为到场的观众展示了珍爱网在数据库建设方面的成果。

       

640?wx_fmt=jpeg

     

最后,沙龙活动在一片热烈的掌声中落下了帷幕,而腾讯云+社区技术沙龙活动将会继续延续下去,而下一站将是,对此感兴趣的朋友们可千万不要错过啊!


1.微信群:

添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


2.征稿:

投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。


推荐阅读

  • 技术争鸣!七大主题报告,四大技术专题,AI开发者大会首日议程全回顾

  • AR热度不在? NO! 三星开发者大会将聚焦AR

  • 人工智能进行时:人类的未来与未来的人类

  • 为了释放AI在边缘计算的力量 英特尔又出手了

  • 全面梳理百度世界大会,李彦宏又新吹了几个牛!

  • 腾讯将创办腾讯云启商学院,马化腾任荣誉院长

  • 扎堆出海的抖音、今日头条、UC 头条们后来怎么样了?

  • 创业者老板被程序员「割」了韭菜?

  • 唇语识别技术的开源教程,听不见声音我也能知道你说什么!

  • 月薪30k+项目分红,哥大教授带你探索“区块链+AI”,抓紧时间投简历吧!手慢无

  • 她说:真的,没事别嫁程序员

640?wx_fmt=jpeg


扫描以下二维码即可参与“2018 年 CSDN 软件开发者大调查活动”!我们还为你准备了精美的礼品,华为 nova3 智能手机、小爱智能音箱、CSDN 背包、CSDN 定制T恤、数百本技术图书等你来拿!参与即有机会获赠,还等什么,快来试试吧!

640?wx_fmt=jpeg


↓↓↓  点击【阅读原文】查看「CSDN云计算」往期精彩内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python input 函数 - Python零基础入门教程

目录 一.前言二.Python input 函数简介三.Python input 函数实战四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.前言 Python 内置函数其实挺多的,其中 input 和 eval 算得上比较特殊,input 属于交互式内置函数…

Python map 函数 - Python零基础入门教程

目录 一.前言二.Python map 函数语法简介三.Python map 函数实战 1.使用 map 函数2.map 函数配合 lambda 匿名函数一起使用 四.Python map 函数效率对比五.Python map 函数总结六.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.前言 截…

马克!程序员必须收藏的 10 类工具库,助你提高效率变大神

对程序员和IT专业10个有用的工具和库橙色的扩音器挂在橙色的墙上”Oleg Laptev在Unsplash网站上写道。每一个行业都有它自己的一些工具。软件行业也不例外。一个好的程序员比其他人更加熟悉那些工具,也能比一般的程序员更善于使用那些工具。但是,有一些工…

BugkuCTF-Reverse题特殊的Base64

知识点 换表的base64特点: 1.出现64个字节的字符串(其实应该叫做表)作为数组取值,并且(经常,不是一定)出现“/”和“”符号 2.作为补位,体现为对3求余(%3) …

Cloud一分钟 |亚马逊市值被微软反超;GKE全球大宕机长达19小时;苹果市值跌破9000亿美元...

Hello,everyone:11月15日早,星期四,新的一天祝大家工作愉快!CSDN一分钟新闻时间:云计算要“凉凉”?亚马逊市值被微软反超,巨头云计算支出放缓亚马逊下跌、Alphabet下跌、微软下跌。苹…

BugkuCTF-Reverse题游戏过关多解法

解题流程 下载程序 运行: 翻译为: 玩游戏 n是灯的序列号,m是灯的状态 如果第n个灯的m是1,它就亮,如果不是,它就灭 起初所有的灯都关上了 现在您可以输入n来更改其状态 但是你应该注意一件事,如…

10 张有关程序员的趣图,图图扎心

0、没事,我已经全部注释掉了1、好好的现有库你不用,非得造轮子了!2、HR 和程序员都是如何看简历的?3、程序员的灾难曲线图4、用钉钉子解释软件测试5、听说你是 CSS 高手6、客户需求 vs 最终实现7、程序员的 8 种层级↓↓↓8、多线…

CTF-汇编语言归纳

内容更新是由低向高递增的 内容如下: xor rax, rax #xor rax,rax是对rax的清零运算操作 条件跳转(一般配合cmp使用) 下表展示了基于零标志位、进位标志位、溢出标志位、奇偶标志位和符号标志位的跳转。 此表为1) 相等性的比较 无符号数比较 基于无符号数比较的…

Cloud一分钟 |谷歌总裁李佳离职;三星将为5G网络投220亿美元;人人网6000万美元贱卖...

Hello,everyone:11月16日早,星期五CSDN一分钟新闻时间:谷歌总裁李佳离职,未来投入AI与医疗领域 谷歌折损一员大将,不知作何感想。 三星将为5G网络投220亿美…

OD(Ollydbg)简介

ollydbg简介: Ollydbg 通常称作OD,是反汇编工作的常用工具,OD附带了200脱壳脚本和各类插件,功能非常强大,可以过SE,VMP3.0,深受逆向圈内人士的喜爱 OD,是一个反汇编工具,…

CTF-Bugku逆向题Android方法归纳

1.signin题目: reverse() 功能:反转数组里的元素的顺序 语法:arrayobject.reverse.() 这类方法会改变原来的数组,不可逆转 tostring() 功能:将各类进制的数字转化为字符串 语法:number.toString(radix)&#xff08…

八折进行中 | 暌违一载,2018 中国大数据技术大会(BDTC)首轮讲师阵容震撼来袭!...

暌违一载,今又相约。作为年度技术趋势与行业应用的风向标,2018 中国大数据技术大会(BDTC 2018)携主题“大数据新应用”再度强势来袭,稳踏技术时代浪潮,势将引爆今冬技术圈。2018 年12 月 6-8 日&#xff0c…

BugkuCTF-WEB题web16备份是个

知识点 ini_set — 为一个配置选项设置值 PHP ini_set用来设置php.ini的值,在函数执行的时候生效,脚本结束后,设置失效。无需打开php.ini文件,就能修改配置,对于虚拟空间来说,很方便 strstr — 查找字符串…

中国云计算的十年江湖

本文经授权转自公众号企服行业头条(ID:wwwqifu)有云的地方,就有江湖。有江湖的地方,就免不了战乱纷争。盘古开天地前,宇宙混沌一片。云计算在国内诞生之际也是如此。没有先例,没有规矩。一切都从…

BugkuCTF-WEB题速度要快

此题小结: 用python脚本获取网页内容以及post数据 主要函数: s requests.session() url’’ return s.get(url). # 可以获取header等信息 data{} 最后传值:s.post(datadata) 解题流程 打开网页,只看到一句话:我感觉你得快点!!! F12查看源…

BugkuCTF-WEB题秋名山车

打开网页,题目让我们计算车速,限时2s,并且通过POST方式传递结果 再刷新几次,显示: 手动计算并传值一定会超过2s的时间限制,因此我们编写python脚本实现(参考车速脚本.py) 编写python脚本并运行&#xff0…

想在“双十一”做“爆款”?你的数据库存能支撑吗?

火热的“双十一”剁手节刚刚过去,阿里巴巴、京东们继续往年的辉煌,有趣的是,线下传统零售百货们今年也不甘寂寞,诸如北京的新世界百货、上海和杭州的银泰百货等大商场也适时推出各种活动,赚了个盆满钵满。有些消费者今…

BugkuCTF-WEB题需要管理员

提示:好像需要管理员 御剑扫描一下后台,发现robots.txt,访问 提示/resusl.php,继续访问,发现要传入一个参数x,并且x的值是要等于password,采用burp爆破 得到密码是admin,其实题目好像需要管…

Cloud一分钟 |小米与美图战略合作;新东方在线通过港交所上市聆讯;工信部审批首个“.cloud”顶级域名...

Hello,everyone:11月20日早,星期二CSDN一分钟新闻时间:小米与美图战略合作,将获得美图手机品牌和影像技术等全球独家授权 小米要收购美图的节奏? …

BugkuCTF-WEB题file_get_contents

知识点 empty() 函数用于检查一个变量是否为空。empty() 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。 extract()函数从数组里将变量导入…