3分钟学会如何调度运营海量Redis系统
本文由云+社区发表
作者:冯伟源
作者:冯伟源,高级工程师,腾讯云Redis系统运维负责人。6年DBA经验,一直从事SQL优化、实例调优、数据库架构、海量数据库集群运维、运营平台建设和管理等工作。为 QQ、Qzone、QQ音乐、微云、腾讯云等业务提供数据库服务。
导语:腾讯云Redis自2015年诞生以来,爆发式增长,为上万家客户提供服务。作者作为唯一的运维负责人,面对三大挑战时如何破解?
- 元信息的一致性管理
- 万台设备高效运维
- 如何实现智能调度
解读腾讯云Redis
腾讯云Redis是基于腾讯内部分布式缓存领域在QQ、音乐、Qzone、微云等业务多年的技术沉淀,为客户打造除的一款高可用、高可靠的Redis服务平台。其业务发展迅速,目前有上万台设备,QPS已达亿级。
腾讯云Redis目前分别提供主从版、集群版、新一代三个版本。在使用上,基本兼容 Redis 协议,支持字符串、链表、集合、有序集合、哈希表等多种数据类型,能帮助客户完成不同类型的业务场景开发。腾讯云Redis支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。搜索关注“腾讯云数据库TencentDB"官方微信,最新最热数据库前沿知识和手把手实战教程等你来约,更可在移动端一键管理数据库。


运营问题
我们在运营Redis的过程中,遇到各种各样的问题总结如下:
\1. 环境:网络、TCP参数设置的问题;
\2. 设计:做持久化时,页表复制造成的卡顿;
\3. 开发者:慢查询,连接风暴,缺流控等;
\4. 最终用户:比如电商的秒杀活动,访问陡增导致处理能力到极限。
总的来说,是服务运行过程中,资源的需求与供给不匹配。

三大挑战
在应对这些运营难题过程中,我们陆续地翻越三座大山:
挑战一:元信息的一致性管理

元信息的混乱导致一些运维故障在日常运营中经常碰到?最基本的四类元信息是集群、设备、实例和配置。 我们解决这类问题的时候定3条原则。
- “全”---元信息梳理统计全;
- “准”---和现网各种信息保持一致;
- “一”---统一的入口,提供统一的API,来进行数据的读取与修改,让元数据的变更可以被审计。
首先对所有元信息进行梳理,提取各种元信息的公共特征,分类建模,然后抽象出模板对象的属性与方法,定义数据结构,最后设定数据同步与消费的方式,对外提供API接口。这样一套基本的DB-CMDB子系统就建成了。也就是数据库层统一元信息管理系统。
设计思路上,采用通用框架,可以管理不同数据库类型的信息,也为后面的运维自动化奠定基础。

挑战二:万台设备的作业方式
系统提供服务之初,整体运维规模还不大,很多运维工作可以通过手工解决。在客户量爆发后,1~2个DBA是无法通过手工解决万台设备运营,更无法面对亿级QPS性能冲击。
为了应对规模化的运营,我们打造“作业平台”的系统,来承载我们的运维逻辑。
- 平台化---原子操作,工具托管在平台上
- 流程化---工具串成流程,流程化,可复用
- 可视化---各类运维操作可视化,简单明了
首先将脚本编辑作为工具,托管在平台上。这种工具的原则是原子操作,只有失败与成功两种状态。工具串起来成为流程,每个工具可以被多个流程复用,这样大部分运维操作,包括上下架机器,Redis的迁移,扩缩容都可以通过流程来实施。同时各类操作均通过可视化来展示,简单明了。
目前腾讯云Redis作业平台已建成数百种场景化的工作流程,日调用次数达上千次,覆盖大部分的运维场景,变更导致的事故减少,服务更为稳定可靠,场景化运维工作效率提升300%。通过平台化、可视化、流程化的“作业平台”,整个团队的工作协同,积累,传承做得更好。



挑战三:如何实现智能调度
手工触发的运维流程,只能算是半自动化。我们该如何把整体的运营工作打造成全自动化呢?
- 自动化调度系统
- 决策系统
自动化调度系统:对于按事件和时间调度系统异常时触发的告警,第一是按时间调度,比如每周三下午3点重启一个服务,通过时间来触发。第二是按事件调度,我们把每一种告警,都作为一种事件,注册到调度系统中。调度系统捕获到事件后,可以调用作业平台的任务或者流程去完成一些工作,这就形成一个运维的闭环。
决策系统:在处理一个事情之前,我们还需要获取各种信息,如何根据信息做决策?一个决策系统,先发起决策请求,过程中可能会涉及到一些决策树,或者AI决策等,根据决策的结果,再确定调哪些作业流程,或者是否调作业流程。




总结运营之道
运维成熟度的衡量
运维成熟度在腾讯云的成熟度衡量:从比较原始的方式,到实现一些标准的工具。再到可视化、流程化、平台化,以及实现能基于时间与事件触发的自动调度平台,实现全自动化的运维闭环。智能化解读,通过机器学习,深度学习的方法能帮助我们更好地做一些决策,比如说数据库自动调参,智能分析实现数据的冷热沉降;最后,通过业务画像,数据分析,成本优化等为业务带来更多的价值。
总结:技术支持业务,技术推动业务,技术引领业务。 搜索关注“腾讯云数据库TencentDB"官方微信,最新最热数据库前沿知识和手把手实战教程等你来约,更可在移动端一键管理数据库。

云时代下对DBA的全面要求
云时代下,DBA应该对自身能力提出更高更全面的要求。我们不但要保证系统高效稳定,协助好使用者,还要在产品打造方向、架构设计的细节、组件的源码,社区的跟进甚至是引领上进行沉淀,并建立个人影响力。
我们既是运维,也是开发,也是产品。这也是云时代下,服务化、DO合一的趋势!
此文已由腾讯云+社区在各渠道发布
获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号
3分钟学会如何调度运营海量Redis系统的更多相关文章
- 如何运营亿级QPS的Redis系统
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:冯伟源,高级工程师,腾讯云Redis系统运维负责人.6年DBA经验,一直从事SQL优化.实例调优.数据库架构.海量数据库集群运维.运营 ...
- 5分钟学会使用Less预编译器
5分钟学会使用Less预编译器 Less是什么? LESS CSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法为CSS赋予了动态语言的特性,如变量.继承.运算.函数等,更方便 ...
- 【grunt第二弹】30分钟学会使用grunt打包前端代码(02)
前言 上一篇博客,我们简单的介绍了grunt的使用,一些基础点没能覆盖,我们今天有必要看看一些基础知识 [grunt第一弹]30分钟学会使用grunt打包前端代码 配置任务/grunt.initCon ...
- 《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)
http://www.matlabsky.com/thread-43937-1-1.html <量化投资:以MATLAB为工具>连载(3)基础篇-N分钟学会MATLAB(下) ...
- 《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)
http://blog.sina.com.cn/s/blog_4cf8aad30102uylf.html <量化投资:以MATLAB为工具>连载(1)基础篇-N分钟学会MATLAB(上) ...
- [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...
- 50分钟学会Laravel 50个小技巧
50分钟学会Laravel 50个小技巧 时间 2015-12-09 17:13:45 Yuansir-web菜鸟 原文 http://www.yuansir-web.com/2015/12/09 ...
- 10分钟学会Linux
10分钟学会Linux有点夸张,可是能够让一个新手初步熟悉Linux中最重要最主要的知识,本文翻译的英文网页在众多Linux入门学习的资料中还是很不错的. 英文地址:http://freeengine ...
- PHP学习过程_Symfony_(3)_整理_十分钟学会Symfony
这篇文章主要介绍了Symfony学习十分钟入门教程,详细介绍了Symfony的安装配置,项目初始化,建立Bundle,设计实体,添加约束,增删改查等基本操作技巧,需要的朋友可以参考下 (此文章已被多人 ...
随机推荐
- maven项目如何手动打包
1.确定打包对象:dubbo-admin 2.进入打包对象目录,复制目录路径(D:\H\dubbox-master\dubbo-admin). 可以看到该对象为典型的maven目录,此时没有“targ ...
- jQuery(一)
jquery介绍 jQuery是目前使用最广泛的javascript函数库.据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. ...
- Docker安装ngnix使用ping报错
最近在学习docker时,由于docker维护的dockerHub远程仓库的镜像文件比普通的文件小得多,所以经常碰到的情况是,一般常用的命令,会出现no command的情况.今天安装ping的时候就 ...
- Scanner,Random,匿名对象-------------------java基础学习第七天
1.API 2.Scanner 功能:通过键盘输入数据到程序中. 引用类型的一般使用步骤: 导包 Import 包路径.类名称 只有java.lang 包写的类不需要导包,其他都需要 2.创建 类名称 ...
- 在浏览器输入URL时发生了什么
浏览器器检查cache,如果请求对象已经缓存并且是最新的,执行第9步. 浏览器询问操作系统,请求服务器的IP地址 操作系统进行DNS查找,然后告诉浏览器服务器的IP 浏览器和服务器简历一个TCP连接( ...
- MySQL语句技巧
1.查询时间的格式: (1) 查询时将时间戳格式化 SELECT FROM_UNIXTIME(eventtime) FROM table_name SELECT FROM_UNIXTIME(e ...
- threejs立方体贴图产生边缘锯齿问题
threejs立方体贴图产生边缘锯齿问题 立方体贴图边缘锯齿 解决后 经过试验测试发现, textureGrass.wrapS和 textureGrass.wrapT属性导致的. 解决方法1: 删掉t ...
- React Native 填坑之神奇的报错,已解决
下面对报错进行一下详细描述: 在debug时,点着点着,就会发生: 1.手机显示如下 : Attempted to transition from state `RESPONDER_INACTIVE_ ...
- Android 音视频开发(三):使用 AudioTrack 播放PCM音频
一.AudioTrack 基本使用 AudioTrack 类可以完成Android平台上音频数据的输出任务.AudioTrack有两种数据加载模式(MODE_STREAM和MODE_STATIC),对 ...
- Redux源码学习笔记
https://github.com/reduxjs/redux 版本 4.0.0 先了解一下redux是怎么用的,此处摘抄自阮一峰老师的<Redux 入门教程> // Web 应用是一个 ...