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系统第一版架构
他提到第一版的几个问题:
- mysql-proxy 0.8版对多线程的支持比较简单粗暴,导致几个恶劣后果:
- 造成“惊群”现象,多个线程被唤醒但只有一个线程需要去任务;
- 任务的CPU亲缘性比较差,在同一个状态机上触发的事件会在多个处理器上来回切换执行;
- mysql-proxy中还使用了全局Lua锁,同时仅允许一个工作线程执行Lua脚本,因此mysql-proxy多线程模式下的性能远不能同CPU核数保持线性增长,甚至在16核上的性能还不如4核。
- 以上原因导致单进程模式时,一台物理机上需要部署多个进程才能有效利用机器的处理能力,但给部署、监控和服务的升级带来麻烦。
- 其次,限于mysql-proxy的框架,功能上不容易扩展,实现用户的连接数限制、QPS限制、以及主从切换、读写分离、分库分表等一系列功能比较困难。
- 最后,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拦截等技术保护用户的数据安全。
对于该系统的应用,曹伟指出:
bitsCN.comUMP系统的一些组件,例如proxy服务器和日志分析服务器,目前已经运用在天猫的聚石塔平台中,为电商和ISV提供安全的数据云服务。此 外,UMP系统还运用在淘宝的店铺装修平台中,为开发者提供数据服务。下一阶段,我们希望UMP系统可以为进一步降低集团内部数据存储的成本做出贡献。

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

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

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

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

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

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

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

假设我们有一个尺寸为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的倍数


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

WebStorm Mac version
Useful JavaScript development tools

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),
