首頁 資料庫 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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1244
24
路徑圖展示了AI '替代” 人類職業的趨勢 路徑圖展示了AI '替代” 人類職業的趨勢 Jan 04, 2024 pm 04:32 PM

我昨天看到了一張有趣的圖片,上面是一個「AI取代人類路徑的級別圖」。圖片根據圖中的顯示,遊戲分為六個不同的等級,從E1到E8+。從圖中我們可以觀察到,人工智慧(AI)正在取代人類在不同領域的應用。而人工智慧的應用領域路徑則是由其容錯率來決定的。簡言之,這裡的容錯率就是指試錯所帶來的成本。 AI將逐漸取代從容錯率較高到較低的行業,並逐漸「取代」人類職業。以往,我們常認為創意型的工作需要依賴人類的思維,是不容易被取代的。然而,隨著人工智慧的發展,這種看法似乎並不完全正確。像創意類的工作往往沒有固定答案

今日頭條發布文章怎麼有收益?今日頭條發布文章獲得更多收益方法! 今日頭條發布文章怎麼有收益?今日頭條發布文章獲得更多收益方法! Mar 15, 2024 pm 04:13 PM

一、今日頭條發布文章怎麼有收益?今日頭條發布文章獲得更多收益方法! 1.開通基礎權益:原創文章選擇投放廣告可獲得收益,影片必須原創橫屏才會有收益。 2.開通百粉權益:粉絲量達百粉以上,微頭條、原創問答創作及問答均可獲得收益。 3.堅持原創作品:原創作品包含文章、微標題及問題等,要求300字以上。注意違規抄襲作品作為原創發布,會被扣信用分,即使有收益也會被扣除。 4.垂直度:做專業領域一類的文章,不能隨意跨領域寫文章,會得不到合適的推薦,達不到作品的專和精,難以吸引粉絲讀者。 5.活躍度:活躍度高,

首個千億模型壓縮演算法 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、完整的客製化和控制重寫內容如下:建立一個

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

在本文中,我們將學習如何在HTML5中加入文章。 HTML5中的新分段元素之一是標記。文章使用標籤以HTML形式表示。更具體地說,元素中包含的內容與網站的其餘內容不同(即使它們可能相關)。讓我們考慮以下範例來了解如何在HTML5中新增文章範例1在以下範例中,我們在文章元素中使用內聯樣式。 <!DOCTYPEhtml><html><body><articlestyle="width:300px;border:2pxsolidgray;padding:

解讀 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數據,因此產生了較低的執行層計算

微信同時發送文章和錄音的詳細方法 微信同時發送文章和錄音的詳細方法 Mar 26, 2024 am 09:16 AM

1.開啟手機,點選微信軟體,進入微信的主頁設定。 2.找到微信右下角【我的】打開,進入【我的】頁面。 3.點選收藏,然後開啟新頁面。

織夢CMS文章內容消失怎麼辦?快速解決方案 織夢CMS文章內容消失怎麼辦?快速解決方案 Mar 29, 2024 am 11:36 AM

織夢CMS(DedeCMS)是一款功能強大的開源內容管理系統,廣泛應用於各類網站建置。然而,有時在使用過程中可能會遇到文章內容消失的情況,這給網站經營者帶來了困擾。本文將為大家介紹織夢CMS文章內容消失的常見原因和快速解決方案,同時提供具體的程式碼範例,希望能幫助大家解決這個問題。一、文章內容消失的可能原因資料庫操作錯誤:資料庫中儲存文章內容的表格可能發生

See all articles