阅读更多

3顶
0踩

数据库

GitHub,作为广泛使用的开源代码库以及版本控制系统,其数据库MySQL性能的优劣对整个网站平台有着举足轻重的影响。接下来我们一起跟随GitHub基础架构团队的步伐,来重温去年8月做的一次重大MySQL更新,看是如何使得GitHub运行得更畅顺的。

 

任务简述

 

自去年开始,我们陆续地把GitHub主体架构迁移到新的数据中心,与之配套的是世界级的硬件和网络环境。我们十分希望这次升迁对后端系统基石MySQL的性能也有所提高。不过在一个新环境重新建立一个新的服务器集群和硬件平台,并不是件轻易的事情,我们必须做好计划与测试,确保迁移工作顺利完成。

 

准备工作

 

每当要进行类似的重大升级工作,对每个测量和指标量度步骤都会提出严格的要求。为新机器安装好操作系统后,接下来需要根据不同的配置来进行测试。为了得到真实的负载测试数据,我们使用了tcpdump对从旧集群系统到新系统执行的SELECT查询进行抓包分析。

 

MySQL性能调整可谓是细节决定成败,例如众所周知的innodb_buffer_pool_size的设置,对整体有着举足轻重的影响。为了尽更全面地管控升级过程,我们把 innodb_thread_concurrency、innodb_io_capacity、innodb_buffer_pool_instances等参数也一并进行分析和研究。

 

每次测试时我们都只改变某一个参数,然后让系统连续运行至少12小时。在这过程中不断观察SHOW ENGINE INNODB STATUS带来的统计信息,其中SEMAPHORES栏目,能很好地反映工作负荷竞争情况。当相关设置测试通过后,接下来我们将尝试把其中一个最大的数据表迁移到一个单独的集群上。作为前期测试的一部分,这样的迁移工作能为日后更大更核心的变更带来指引。

 

除了对基础硬件部分进行了升级,我们还对流程和拓扑进行了优化。例如:延后复制,更快速和高频的备份,提高备带读取能力。一切就绪后,将进入最后的升级阶段。

 

制定升级项目清单,进行二次检查

 

作为每天服务上百万用户的平台,任何差错都将是毁灭性的。我们在进行真实切换前,列出了一个任务清单,确保各项工作有序执行:

  • 确保缓冲池在新集群中成功预热
  • 在推特等社交平台公告维护开始
  • 把网站转为维护等待模式
  • 等候所有与旧MySQL服务器相关的通信终止
  • 把旧服务器设为只读模式
  • 从旧集群中移除主要和复制的VIPs数据
  • 确认所有写入操作已经终止
  • 终止cluster1的复制
  • 获取cluster1复制的位置,并告知当前线程
  • 重置cluster1的复制
  • 关闭cluster1的只读模式
  • 把旧集群连接到新的cluster1集群
  • 按照cluster1连接配置进行应用程式部署
  • 确保新连接能通过新集群
  • 检查后台工具resque的任务(workers)
  • 进行阶段检查并确保一切正常
  • 把网站转为正常模式
  • 在推特等社交平台公告维护结束
  • https://github.com/github/xxxx/pull/xxx整合到主页面

迁移当天

 

在周六的上午5点太平洋时间),团队成员就位后,迁移工作正式开始。当用户在这段时间访问网站时,会收到如下的提示:



 13分钟后,新集群即将开始正常运作。我们终止了网站的维护模式,并告知大众网站将回复正常。



 效果评估

 

在接下来的几个星期,我们密切关注了整体性能和响应时间方面的变化。结果是令人欣喜的,页面载入时间减少了将近三分之二:


经验总结:

 

1. 功能划分

 

在本次操作中,我们把较大的历史数据记录表放入单独的集群,事后证明这是明智的做法—很好地释放了存储空间和缓冲池空间。同时,能够把更多资源放在活跃数据处理上,连接逻辑的划分也使得程序可以在多个集群间进行查询。以后我们还将采取该方法进行升级。

 

2. 不断测试

 

罗马非一天建成,整个过程需要不断进行验收和回归测试,避免意外的发生。

 

3. 团队的力量

 

如此重大的架构升级需要很多小伙伴协力工作,我们主要使用GitHub上的拉请求功能来进行互动交流。部署团队来自世界各地:


当开启一个拉请求后,我们将进行实时交流,例如:错误处理,回归处理等信息的交流。每个交流环节都生成一个URL,方便进行历史查询和反馈。

 

一年后……

 

路遥知马力,一年后,实践证明这是一次成功的操作。MySQL持续表现符合预期,系统可靠性进一步提高。还有个附加好处是:新系统的扩展性得到提升,将来可进行更大规模的升级和改造。

  • 大小: 131.9 KB
  • 大小: 66.4 KB
  • 大小: 73.2 KB
  • 大小: 23.7 KB
来自: CSDN
3
0
评论 共 2 条 请登录后发表评论
2 楼 wangzhangqian 2014-09-11 10:11
希望说明更多技术的细节和
1 楼 yangzhanchun 2014-09-10 09:32
有更多的技术细节就好了

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • vue+purecss

    Pure.CSS 美国雅虎公司出品的一组轻量级、响应式纯css模块,适用于任何Web项目。   VUE项目引入依赖: npm install --save purecss VUE项目使用 在main.js中 import Purecss from 'purecss' Vue.use(Purecss);  ...

  • Pure : 来自雅虎的纯 CSS 框架

    Pure也是一款很出色的CSS框架,之前分享的Bootstrap是由Twitter出品的,而Pure是来自雅虎的。尽管从UI界面效果上来说,Pure没有Bootstrap那样精美,但Pure是纯CSS实现的,因此非常小巧,整个框架压缩后只有5.7k左右。 Pure的特点 最大的特点就是框架基于纯CSS,无任何JavaScript代码,渲染速度比较快。由Yahoo出品,技术上应该不存在太大问

  • Mysql项目 github_GitHub迁移数据库,借助MySQL大行其道!

    GitHub,作为广泛使用的开源代码库以及版本控制系统,其数据库MySQL性能的优劣对整个网站平台有着举足轻重的影响。接下来我们一起跟随GitHub基础架构团队的步伐,来重温去年8月做的一次重大MySQL更新,看是如何使得...

  • 如何使用GitHub Action自动发布JAR到Maven仓库

    之前发布开源项目Payment Spring Boot[1]到 Maven 中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点“原始”。于是我一直在寻求...

  • Docker大行其道—初识

    如容器可以用同样的方式上传、启动,不管是php应用还是mysql数据库服务。 基础设施无关 :无论是个人的笔记本电脑还是AWS S3,亦或是Openstack,或者其他基础设施,都应该对支持容器的各项操作。 为自动化量...

  • 《MySQL性能优化和高可用架构实践》阅读总结

    文章目录介绍第1章 MySQL架构介绍1.1 MySQL简介1.2 MySQL主流的分支版本1.3 MySQL存储引擎1.4 MySQL逻辑架构1.5 MySQL物理文件体系结构第2章 InnoDB存储引擎体系结构2.1 缓冲池2.2 change buffer2.3 ...

  • Kubernetes 运行数据库存在的问题剖析

    另一方面,在云原生『大行其道』的今天,技术人员也需要根据业务发展,构思并设计能够满足未来业务诉求的云上服务架构。 而这种颠覆性的云原生技术,正是我们今天谈论的主要对象,它改变了从开发、交付、部署到维护...

  • 2023年8月国产数据库大事记-墨天轮

    本文为墨天轮社区整理的2023年8月国产数据库大事件和重要产品发布消息。

  • 你真的了解 CDC 吗?

    Change Data Capture[1] 简称 CDC, 用于异构数据同步,将 database 的数据同步到第三方,这里的 DB 可以是 MySQL, PG, Mongo 等等一切数...

  • 腾讯云数据库TDSQL-大咖论道 | 基础软件的过去、现在、未来

    腾讯云数据库邀请沙利文中国高级分析师胡竣杰、华云中盛数据库事业部总经理杨光、中软国际数据库业务总监范利军及腾讯云数据库总经理王义成四位行业大咖,共话中国基础软件发展。 1. 中国基础软件在国际市场上有...

  • 你真的了解 CDC 嘛

    Change Data Capture[1] 简称 CDC, 用于异构数据同步,将 database 的数据同步到第三方,这里的 DB 可以是 MySQL, PG, Mongo 等等一切数...

  • 关系型数据库尚能饭否?NoSQL、NewSQL谁能接棒?

    在大数据和微服务大行其道的今天,传统的关系型数据库也将迎来变革。云原生的数据库架构受到越来越多的关注,所以我想和大家一起来聊聊云原生数据架构。本文作为上篇,会先对当下各类数据库发展现状进行分析。 一、...

  • 开源二三事|ShardingSphere 与 Database Mesh 之间不得不说的那些事

    早在 Service Mesh 大行其道的 2018 年,Apache ShardingSphere PMC Chair 张亮就曾借着 Service Mesh 的东风,创造性地提出了 Database Mesh 概念,设想是否有一种模式可以有效的结合 JDBC 代理端与 Proxy 客户端...

  • 汽车之家从 SQL Server 到 TiDB 的异构变迁

    在开源新技术大行其道的今天,如何从 SQL Server 无缝迁移至 TiDB,汽车之家做了一个创新的示范。 本文将从业务背景、迁移方案、同步、业务改造、上线效果、周边建设等多个角度,详细介绍了如何...

  • 阿里面试官问我Mybatis,我怂了吗?

    现在Mybatis在业内大行其道,那为啥他能那么火呢?? Hibernate是一个比较老旧的框架,用过他的同学都知道,只要你会用,用起来十分舒服…啥sql代码都不用写…但是呢,它也是有的缺点::处理复杂业务时,灵活度差, ...

  • polylearn-0.1.dev0-cp35-cp35m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

  • 基于Simulink的语音信号降噪与增强.docx

    基于Simulink的语音信号降噪与增强.docx

  • java资源Java条形码生成库 Barcode4J

    java资源Java条形码生成库 Barcode4J提取方式是百度网盘分享地址

  • pgmagick-0.7.5-cp27-cp27m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

  • pendulum-2.1.2-cp310-cp310-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

Global site tag (gtag.js) - Google Analytics