RDS平台介绍

本文整理自美团点评技术沙龙第10期:数据库技术架构与实践。

美团点评技术沙龙由美团点评技术团队主办,每期沙龙邀请美团点评及其它互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域。

本次沙龙主要围绕数据库相关的主题,内容包括美团数据库自动化运维系统构建、点评侧MySQL自动化服务平台RDS、美团数据库中间件、和小米高级DBA带来的Redis Cluster的大规模运维实践。

今天我就给大家讲一下我们这边做的数据库运维的自动化平台,他是怎么样子的。首先我会给大家简单介绍一下我们做平台的背景,以及平台的一些技术架构,以及针对我们DBA和开发的需求的全套解决方案。

首先是背景,我们为什么要做RDS,在做RDS之前其实我们也有一套自己的自动化系统,可是我们有了这套自动化系统我们发现有了之后我们DBA还是很忙,每天忙于工单处理,大表DDL,集群搭建,扩容,数据迁移等等。这些东西不能说没有价值,但是对于DBA来说,每一次的重复操作,都会让这个价值指数级下降,并且不能带来成长。所以我们对这些需求做了一个简单的分析。

首先第一个,工单审核,大表DDL,数据权限,都是与数据相关的需求,我们看另一部分,集群扩容,数据迁移,故障转移是与数据库相关的。所以我们这边有一个理念我们一定要让数据相关的全部让他们自助化,让开发去做,而不是让我们DBA去做,而跟DBA相关的全部让他自动化。这就是我们现在的理念。

Alttext

接下来我们面临一个问题就是改造原系统还是重建一个。老系统很符合一个传统运维系统的“特点”:运维开发自己搭服务器,自己上线,自己维护。这会带来一系列问题,比如自己维护的成本很高,还有就是因为这一套与线上业务应用完全不同,所以无法享用业务成熟的组件以及各种自动化服务。所以我们改变了以前的思路,我们以前自己搭的系统全部废掉,全部用线上的系统,我们从整个系统维护搭建以及我们使用的组件全是线上一模一样的一套,甚至包括我们数据库这些东西,全部托管到我们DBA来,还有对服务器这块交给业务运维他们去管,他们更专业,管得肯定也更好。还有就是原来系统面向DBA的,就是我让你DBA工作稍微不再繁琐,自动化工具,你去点一下做完了,现在我们的理念是面向开发,什么叫面向开发呢?就是我们希望开发与我们DBA的整个交互,靠这个系统来交互,你不要老找我说这说那,你就跟我系统打交道好了,有什么错我们系统会告诉你,告诉你怎么去做,让DBA完全从我们整个平台的日常需求里面脱离出来,这就是我们整个的设计理念。 接下来说说我们的基础架构:

Alttext

因为我们说了,我们要跟线上业务一样,所以我们前面有了一层slb,做均衡负载的。然后是RDS主体部分,主要由RDS主程序和、动态配置管理中心Lion,数据迁移工具Puma和数据访问层中间件zebra组成,其中zebra中间件是一个基于jdbc的数据库动态链接池。

数据库则是MHA+MySQL的架构。最后有一个轻量级的jobCenter,主要用于执行系统级的命令。

最后是一个Job Center,因为我们DBA需要跟资源打交道,会去做一些资源维护,你需要操作系统级别的权限,我们要实现他,其实我们当时有三种方案,第一个我们在自己的管理服务器之上搭一个服务提供API,你来调度,但这就回到我们以前的老路上,你需要去维护这服务,成本很高。第二个就是我们在我们自己的机器上,去装这些脚本,或者给他一些操作系统级命令他自己去执行,这里面又有一个问题,这样装了之后,我们自己的服务器和线上应用服务器就不一样,当他不一样之后你就无法让业务运维进行统一化管理了,所以我们也抛弃了。我们就选了第三种方案,把我们的命令写在这个MySQL里面,我们专门的管理机去取这个命令去执行,而且这层特别薄,薄到几乎无需维护,这样就跟线上业务一模一样,而且还可以进行水平扩展,所以整个系统下来全部可以水平扩展。

然后我们还有一个无状态任务流中心:

Alttext

这个主要分为process和task。每个process由多个task组成,每个task可以分成多个并发的子task,每个子task我们都会尽量做成幂等。

整个流程由start开始,并由流程中心的doNext控制,最后的每个任务进入到一个任务队列中,最后jobcenter会取出任务,并fork出新进程具体执行相关任务,并进行回调。为了支持jobcenter的分布式扩展,我们用mysql的任务队列做了一个很轻量级的互斥锁来达到多任务中心的互斥功能。主要是我们给每个task一个初始状态UNDO,然后task center拿到任务后会回去update这个任务,并将UNDO作为条件,然后得到MySQL的匹配行数返回值,如果为1则执行,否则放弃,给其它task center执行。

RDS系统实现了DBA的一键集群搭建,扩容/缩容,备份还原,流量控制,动态迁库/拆库,以及单表拆分等功能。我们主要来看看动态数据迁移。

Alttext

动态迁库/拆库在可靠性和自动化程度相较之前都有了一个很大的提升。而动态迁库/拆库主要分为四个步骤:1.种子数据的迁移;2.增量数据迁移;3.账号权限迁移;4.数据源切换。而增量数据迁移和数据源切换是关键点。其中增量数据迁移我们支持中间机(搭建MySQL中间机,通过配置过滤规则进行数据同步)和puma两种方式,因为各有优缺点(前者快但繁琐且只能有一个源,而后者虽然稍慢,但是支持多源同目标)。

Alttext

在切换数据源时,我们采用:校验权限→锁表→校验数据一致性→切换动态数据源→kill被阻塞query→renametable…→resetslave这样一个流程来保证整个流程的安全可靠。其中对于锁表,我们必须在一个事务中进行lock tables,数据一致性校验我们采用官方的checksum算法来check每张表的最后1000条数据(1000是我们的一个经验值),然后针对迁移过程中被阻塞的sql,我们采用直接kill的方式来让业务报错重试,以避免数据的不一致。

而对于单表的自动分库分表,我们采用:配置分表规则→根据规则dump数据→配置增量同步任务→业务开启双写→关闭老表写入这样几步来实现单表的动态拆分。

Alttext

针对开发人员,我们提供了一个SqlEditor的模块来支持。这个模块集查询,修改、权限配置和数据模糊于一身。它相对于以前的临时权限方案主要有这样几个优点:

Alttext

1.统一的系统级访问账号

2.从向数据库申请权限变成向系统申请权限

3.从根源上规范了用户的访问行为(默认访问运营库,主库查询严格控制,返回结果1w行,60秒kill)

4.审计、安全控制更加方便(读写权限分离,column级别的密级设置以及数据模糊)

作者简介

柯任,美团点评开发DBA。主要负责点评侧自动化平台的搭建以及Mongodb的维护工作。

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

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

相关文章

你已经是一个成熟的地图了,该学会帮我...

文 | 小戏当我们打开百度地图,选定到达目的地,导航软件里的小姐姐马上就用不紧不慢的语调告诉我们“准备出发,全程12公里,预计需要30分钟……”但一看手表上显示的不风驰电掣铁定迟到的时间,肯定不允许我们和导航软件里…

LeetCode 427. 建立四叉树(递归)

1. 题目 我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络。网络中每一格的值只会是真或假。树的根结点代表整个网络。对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相同的. 每个结点还有另外两个布尔变量: isLeaf 和 val。isLeaf 当这个节点是一个叶子…

基于 KIF 的 iOS UI 自动化测试和持续集成

客户端 UI 自动化测试是大多数测试团队的研究重点,本文介绍猫眼测试团队在猫眼 iOS 客户端实践的基于 KIF 的 UI 自动化测试和持续集成过程。 一、测试框架的选择 iOS UI 自动化测试框架有不少,其中 UI Automation 是 Apple 早期提供的 UI 自动化测试解决…

论文浅尝 | 利用冻结语言模型的多模态少样本学习

笔记整理 | 李磊,浙江大学硕士,研究方向为自然语言处理链接:https://arxiv.org/abs/2106.13884动机大规模的自回归语言模型(如GPT)在预训练阶段学习到了大量的知识,具有很好的学习新任务的能力&#xff0c…

ACL’21 | 对话系统也要进军多模态了!

文 | 胡煌,梁祖杰编 | 小轶对于一个对话Bot来讲,拥有对视觉信息的感知和联想能力是非常重要的。比如,我们人类在对话中谈到大海的时候,就会自然地联想到蓝天、白云和飞翔的海鸟。然而,当前的对话模型,如 Me…

x86系统与arm64系统不兼容的linux服务器问题

一键离线安装命令: pip install --no-index --find-links/home/digital_package -r requirements.txt --ignore-installed 1 cython 2 gensim:

LeetCode 541. 反转字符串 II

1. 题目 给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保…

HDFS NameNode内存全景

一、概述 从整个HDFS系统架构上看,NameNode是其中最重要、最复杂也是最容易出现问题的地方,而且一旦NameNode出现故障,整个Hadoop集群就将处于不可服务的状态,同时随着数据规模和集群规模地持续增长,很多小量级时被隐藏…

OpenKG开源系列|首个多模态开放知识图谱OpenRichpedia (东南大学)

OpenKG地址:http://openkg.cn/dataset/richpeidaGitHub地址:https://github.com/OpenKG-ORG/OpenRichpediaGitee地址:https://gitee.com/openkg/richpedia官网地址:http://richpedia.cn(提供Dump)开放许可协…

电商业务中的五大机器学习问题!

机器学习正在从曾经的“科幻”,走向大众生活,比如:高铁站的人脸识别系统、小区门口的无人化测量体温,还有这些年很火的自动驾驶,再到电商的精准推荐系统...等等,背后都是机器学习。今天就以电商业务场景为例…

LeetCode 404. 左叶子之和(递归)

1. 题目 计算给定二叉树的所有左叶子之和。 示例:3/ \9 20/ \15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24来源:力扣(LeetCode) 链接:https://leetcode-cn.co…

论文浅尝 | 将结构预测作为增广自然语言间的翻译任务

笔记整理 | 叶宏彬,浙江大学计算机博士生论文地址:https://openreview.net/pdf?idUS-TP-xnXI摘要:我们提出了一个新的框架,即增强自然语言之间的翻译(Translation-between-Augmented Natural Languages,TA…

ReactiveCocoa中潜在的内存泄漏及解决方案

ReactiveCocoa是GitHub开源的一个函数响应式编程框架,目前在美团App中大量使用。用过它的人都知道很好用,也确实为我们的生活带来了很多便利,特别是跟MVVM模式结合使用,更是如鱼得水。不过刚开始使用的时候,可能容易疏…

EXCEL如何快速拆分合并单元格数据

EXCEL如何快速拆分合并单元格数据

学完文本知识,我就直接看懂图片了!

文 | Yimin_饭煲2020年, OpenAI的大作GPT-3 (Language Models are few shot learners) 横空出世,震惊整个NLP/AI圈。大家在惊叹于GPT-3 1750B参数的壕无人性同时,想必对GPT-3中的Prompt方法印象深刻。简单来说,(GPT-3中的)Prompt就是为输入的…

LeetCode 914. 卡牌分组(最大公约数)

1. 题目 给定一副牌,每张牌上都写着一个整数。 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌。 组内所有的牌上都写着相同的整数。 仅当你可选的 X > 2 时返回 true。 示例…

RestQL:现代化的 API 开发方式

koa-restql 已经在 github 开源并在 npm 发布。感兴趣的同学可以前往围观一下。欢迎 Pull Request,同时热烈欢迎 Star。 在现代的业务系统中,后端开发工作基本上可以被拆分为三项: 接口鉴权。例如判断是不是当前系统的用户,以及该…

论文浅尝 | KnowEdu: 一个自动构建教育知识图谱的系统

笔记整理 | 崔凌云,天津大学硕士链接:https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber8362657动机基于知识图的广泛应用和在教育领域日益增长的需求,作者提出了一个名为KnowEdu的系统,以自动构建教育知识图。通过利用教育…

我在斯坦福做科研的碎碎念

文 | Jazon编 | 小轶大家好,我是 Jazon。作为 AI 科研工作者,我们的目光不该只聚焦在开发新技术、刷榜打 SoTA 上。学界如职场,还有很多技术之外的软实力需要培养。这篇文章里,我想以我个人的经历作为切入点,聊一聊与此…

论文浅尝 | 用于学习知识图谱嵌入的一种基于注意力机制的新型异构 GNN 框架HRAN...

笔记整理 | 李爽,天津大学链接:http://hfbix45521e79b0484907sowxo0fubpp9b6xwx.fiiz.eds.tju.edu.cn/stamp/stamp.jsp?tp&arnumber9359364动机知识图谱 (KG) 嵌入旨在研究嵌入表示以保留 KG 的固有结构。图神经网络(GNN)作为一种有效的图表示技术&…