首页 数据库 mysql教程 淘宝曹伟分析低成本、高性能MySQL云数据架构_MySQL

淘宝曹伟分析低成本、高性能MySQL云数据架构_MySQL

Jun 01, 2016 pm 01:39 PM
成本 文章

bitsCN.com

曹伟是淘宝数据库研发组的成员,前不久他在内部分享了低成本、高性能MySQL云数据的架构分析和探索,包括架构的演变过程、系统中的角色和组件等。该文章被褚霸转发在“Erlang非业余研究”上。

在一开始,曹伟指出:

虽然近两年来NoSQL的发展很快,新产品层出不穷,但在业务中应用NoSQL对开发者来说要求比较高,而MySQL拥有成熟的中间件、运维工具,已经形成一个良性的生态圈等,因此从现阶段来看,MySQL占主导性,NoSQL为辅。

接下来,曹伟介绍了他们的工作成果:

我们(阿里集团核心系统数据库团队)……设计和实现了一套UMP(Unified MySQL Platform)系统,提供低成本和高性能的MySQL云数据服务。开发者从平台上申请MySQL实例资源,通过平台提供的单一入口来访问数据,UMP 系统内部维护和管理资源池,以对用户透明的形式提供主从热备、数据备份、迁移、容灾、读写分离、分库分表等一系列服务。平台通过在一台物理机上运行多个 MySQL实例的方式来降低成本,并且实现了资源隔离,按需分配和限制CPU、内存和IO资源,同时支持不影响提供数据服务的前提下根据用户业务的发展动 态的扩容和缩容。

曹伟分析了该系统的架构演变过程:

第一版基于mysql-proxy 0.8版修复若干bug,并对proxy插件中管理用户连接和数据库连接的状态机流程进行一些修改,同时编写Lua脚本实现去中心数据库获取用户认证信息和后台数据库地址,对用户进行验证,建立到后台数据库的连接和转发数据包等逻辑。

图:UMP系统第一版架构

他提到第一版的几个问题:

  1. mysql-proxy 0.8版对多线程的支持比较简单粗暴,导致几个恶劣后果:
    • 造成“惊群”现象,多个线程被唤醒但只有一个线程需要去任务;
    • 任务的CPU亲缘性比较差,在同一个状态机上触发的事件会在多个处理器上来回切换执行;
    • mysql-proxy中还使用了全局Lua锁,同时仅允许一个工作线程执行Lua脚本,因此mysql-proxy多线程模式下的性能远不能同CPU核数保持线性增长,甚至在16核上的性能还不如4核。
    • 以上原因导致单进程模式时,一台物理机上需要部署多个进程才能有效利用机器的处理能力,但给部署、监控和服务的升级带来麻烦。
  2. 其次,限于mysql-proxy的框架,功能上不容易扩展,实现用户的连接数限制、QPS限制、以及主从切换、读写分离、分库分表等一系列功能比较困难。
  3. 最后,mysql-proxy的社区近些年来并不活跃,而且C语言对开发者功底的要求比较高,很难要求团队所有成员协同开发出兼顾优雅和正确性的代码。

因此,他们决定用Erlang重写,原因在于: 

  • 和操作系统的进程/线程相比,Erlang进程同样是并发执行的单位,但特别的轻量级,它是在Erlang虚拟机内管理和调度的“绿进程”,即用户态进程。
  • Erlang/OTP很好的抽象了开发一个分布式的、高容错性的应用程序所需的要素,包括:网络编程框架、序列化和反序列化、容错、热部署。

在设计当前的UMP系统架构时,团队遵循了以下原则:

  • 系统对外保持单一入口,对内维护单一的资源池。
  • 保证服务的高可用性,消除单点故障。
  • 保证系统是弹性可伸缩的,可以动态的增加、删减计算与存储节点。
  • 保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离。

图:UMP系统现有架构

UMP系统中有如下角色:

  • controller服务器:向UMP集群提供各种管理服务,实现元数据存储、集群成员管理、MySQL实例管理、故障恢复、备份、迁移、扩容等功能。
  • proxy服务器:向用户提供访问MySQL数据库的服务,它完全实现了MySQL协议;除数据路由的基本功能外,Proxy服务器中还实现了资源限制、屏蔽MySQL实例故障、读写分离、分库分表、记录用户访问日志的功能。
  • agent服务器:部署在运行MySQL进程的机器上,用来管理每台物理机上MySQL实例,执行创建、删除、备份、迁移、主从切换等操作,收集和分析MySQL进程的统计信息、bin log、slow query log。
  • API/Web服务器:向用户提供了系统管理界面。它们是基于开源项目Mochiweb与Chicago Boss开发的Mochiweb提供http/https服务。
  • 日志分析服务器:存储和分析Proxy服务器传入的用户访问日志,并实现了实时索引供用户查询一段时间内的慢日志和统计报表。
  • 信息统计服务器:定期将采集到的用户的连接数、QPS数值,以及MySQL实例的进程状态用RRDtool进行统计,可以画图展示到Web界面上,也可以为今后实现弹性的资源分配和自动化的MySQL实例迁移提供依据。

依赖的开源组件有:

  • Mnesia:Mnesia是OTP提供的分布式数据库,支持事务,支持透明的数据分片,利用两阶段锁实现分布式事务,可以线性扩展到至少50个节点。Mnesia更倾向于牺牲可用性来换取强一致性,但它也提供了脏读、脏写操作,可以绕过事务管理去操作数据。
  • LVS:实现负载均衡,用户应用重连后会被LVS定向到其他的proxy上。
  • RabbitMQ:提供UMP系统中各节点间的通信(不包括SQL查询、日志等大数据流的传输,这些还是直接走TCP的)
  • ZooKeeper:主要发挥配置服务器、分布式锁,以及监控所有MySQL实例的作用

对于该系统的作用,曹伟总结到:

在多个组件的协同作业下,整个系统实现了对用户透明的容灾、读写分离、分库分表功能。系统内部还通过多个小规模用户共享同一个MySQL实例,中等 规模用户独占一个MySQL实例,多个MySQL实例共享同一个物理机的方式实现资源的虚拟化,降低整体成本。在资源隔离方面,通过Cgroup限制 MySQL进程资源,以及在proxy服务器端限制QPS相结合的方法,UMP系统实现了资源虚拟化的同时保障用户的服务质量。此外,UMP系统综合运用 SSL数据库连接、数据访问IP白名单、记录用户操作日志、SQL拦截等技术保护用户的数据安全。

对于该系统的应用,曹伟指出:

UMP系统的一些组件,例如proxy服务器和日志分析服务器,目前已经运用在天猫的聚石塔平台中,为电商和ISV提供安全的数据云服务。此 外,UMP系统还运用在淘宝的店铺装修平台中,为开发者提供数据服务。下一阶段,我们希望UMP系统可以为进一步降低集团内部数据存储的成本做出贡献。

bitsCN.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

今日头条发布文章怎么才能有收益?今日头条发布文章获得更多收益方法! 今日头条发布文章怎么才能有收益?今日头条发布文章获得更多收益方法! Mar 15, 2024 pm 04:13 PM

一、今日头条发布文章怎么才能有收益?今日头条发布文章获得更多收益方法!1.开通基础权益:原创文章选择投放广告可获得收益,视频必须要原创横屏才会有收益。2.开通百粉权益:粉丝量达到百粉以上,微头条、原创问答创作及问答均可获得收益。3.坚持原创作品:原创作品包含文章、微头条及问题等,要求300字以上。注意违规抄袭作品作为原创发布,会被扣信用分,即使有收益也会被扣除。4.垂直度:做专业领域一类的文章,不能随意跨领域写文章,会得不到合适的推荐,达不到作品的专和精,难以吸引粉丝读者。5.活跃度:活跃度高,

路径图展示了AI '替代” 人类职业的趋势 路径图展示了AI '替代” 人类职业的趋势 Jan 04, 2024 pm 04:32 PM

我昨天看到了一张有趣的图片,上面是一个“AI取代人类路径的级别图”。图片根据图中的显示,游戏分为六个不同的等级,从E1到E8+。从图中我们可以观察到,人工智能(AI)正在取代人类在不同领域的应用。而人工智能的应用领域路径则是由其容错率来决定的。简而言之,这里的容错率就是指试错所带来的成本。AI将逐渐取代从容错率较高到较低的行业,逐渐“取代”人类职业。以往,我们常认为创意型的工作需要依赖人类的思维,是不容易被取代的。然而,随着人工智能的发展,这种看法似乎并不完全正确。像创意类的工作往往没有固定答案

首个千亿模型压缩算法 SparseGPT 来了,降低算力成本的同时保持高精度 首个千亿模型压缩算法 SparseGPT 来了,降低算力成本的同时保持高精度 Apr 12, 2023 pm 01:01 PM

​自 2020 年 GPT-3 横空出世以来,ChatGPT 的爆火再一次将 GPT 家族的生成式大型语言模型带到聚光灯下,它们在各种任务中都已显示出了强大的性能。但模型的庞大规模也带来了计算成本的上升和部署难度的增加。比如,GPT‑175B 模型总计至少占 320GB 半精度 (FP16) 格式的存储空间,在推理时,起码需要五个 80 GB 存储空间的 A100 GPU。模型压缩(model compression)是当前使用较多的一种降低大模型计算成本的方法,但迄今为止,几乎所有现有的

云端生成式AI:自建还是购买? 云端生成式AI:自建还是购买? Dec 19, 2023 pm 08:15 PM

大卫·林思高编译|言征51CTO技术栈(微信号:blog51cto)的出品在技术领域有一个不成文的规则:大家都喜欢采用别人的技术。但对于许多企业来说,生成式人工智能似乎并不符合这一模式生成式AI正在迅速推动一些关键决策。每个组织都面临着一个重要的选择:是内部构建定制的生成式AI平台,还是从AI供应商那里购买预打包的解决方案(通常作为云服务提供)DIY有利于数量和机会。这很奇怪,但原因可能会让你感到惊讶。它们甚至可能会引导您重新思考您的企业genAI战略1、完整的定制和控制重新写内容如下:建立一个

解读 Vitalik 新文:为什么 Blob 空间未被高效使用的 Rollup 陷入了发展困境? 解读 Vitalik 新文:为什么 Blob 空间未被高效使用的 Rollup 陷入了发展困境? Apr 01, 2024 pm 08:16 PM

如何理解@VitalikButerin新文对以太坊的扩容思考?有人说Vitalik给Blob铭文喊单,离大谱。那么Blob数据包如何工作?坎昆升级后Blob空间为啥得不到高效利用?DAS数据可用性采样是为分片做准备?在我看来,坎昆升级后性能够用了,Vitalik是对Rollup发展忧心忡忡。Why?接下来,我来谈谈我的理解:在之前多次解释过,Blob是和EVMcalldata脱钩的一个直接可被共识层调取的临时数据包,直接好处是,EVM在执行交易时可以不访问Blob数据,因此产生了较低的执行层计算

如何在HTML5中添加文章? 如何在HTML5中添加文章? Sep 12, 2023 am 11:37 AM

在本文中,我们将学习如何在HTML5中添加文章。HTML5中的新分段元素之一是标记。文章使用标签以HTML形式表示。更具体地说,元素中包含的内容与网站的其余内容不同(即使它们可能相关)。让我们考虑以下示例来了解如何在HTML5中添加文章示例1在以下示例中,我们在文章元素中使用内联样式。<!DOCTYPEhtml><html><body><articlestyle="width:300px;border:2pxsolidgray;padding:

微信同时发送文章和录音的详细方法 微信同时发送文章和录音的详细方法 Mar 26, 2024 am 09:16 AM

1、打开手机,点击微信软件,进入微信的主页设置。2、找到微信右下角【我的】打开,进入【我的】页面。3、点击收藏,然后打开新页面。

C++程序用于计算机器人在网格中完成一次行程所需的总成本 C++程序用于计算机器人在网格中完成一次行程所需的总成本 Aug 25, 2023 pm 04:53 PM

假设我们有一个尺寸为hxw的网格。网格中的每个单元格包含一个正整数。现在有一个路径查找机器人放置在特定的单元格(p,q)上(其中p是行号,q是列号),它可以移动到单元格(i,j)。移动操作有一个特定的成本,等于|p-i|+|q-j|。现在有q个旅行,具有以下属性。每个旅行有两个值(x,y),并且有一个共同的值d。机器人放置在一个值为x的单元格上,然后移动到另一个值为x+d的单元格。然后它移动到另一个值为x+d+d的单元格。这个过程将继续,直到机器人到达一个值大于或等于y的单元格。y-x是d的倍数

See all articles