淘宝曹伟分析低成本、高性能MySQL云数据架构_MySQL
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系统可以为进一步降低集团内部数据存储的成本做出贡献。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











1. 今すぐ Toutiao の記事を公開してどうやってお金を稼ぐことができますか?今すぐ Toutiao で記事を公開して収入を増やす方法! 1. 基本的な権利と利益の有効化: オリジナルの記事は広告によって利益を得ることができますが、利益を得るにはビデオが横画面モードでオリジナルである必要があります。 2. ファン100人の権利を有効化:ファン数が100人以上に達すると、マイクロヘッドライン、オリジナルQ&A作成、Q&Aから利益を得ることができます。 3. オリジナル作品にこだわる: オリジナル作品には記事、小見出し、質問などが含まれ、300 ワード以上であることが求められます。違法に盗用された作品をオリジナル作品として出版した場合、クレジットポイントが減点され、利益も差し引かれますのでご注意ください。 4. 垂直性:専門分野の記事を書く場合、分野を超えて自由に記事を書くことができず、適切な推薦が得られず、専門性や洗練度が得られず、ファンもつきにくいそして読者たち。 5. 活動: 高活動、

昨日、「人間の道を置き換えるAIのレベルマップ」という興味深い写真を見ました。写真に示すように、ゲームは E1 から E8+ までの 6 つの異なるレベルに分かれています。この図から、さまざまな分野で人工知能 (AI) が人間のアプリケーションを置き換えていることがわかります。人工知能の応用分野のパスは、その耐障害性によって決まります。つまり、ここでのエラー許容度とは、試行錯誤のコストを指します。 AIは、エラー許容率が高い産業から低い産業に徐々に置き換えられ、人間の職業を徐々に「置き換え」ていくでしょう。以前は、クリエイティブな仕事は人間の思考に依存しており、簡単に置き換えることはできないと考えられていました。しかし、人工知能の発展により、この見方は完全に正しいとは言えないようです。クリエイティブな仕事には決まった答えがないことが多い

2020 年に GPT-3 が登場して以来、ChatGPT の人気により、GPT ファミリーの生成大規模言語モデルが再び脚光を浴びるようになり、さまざまなタスクで優れたパフォーマンスを示しています。ただし、モデルの規模が巨大であるため、計算コストの増加と展開の難易度の増加も生じます。たとえば、GPT-175B モデルは半精度 (FP16) 形式で合計 320 GB 以上のストレージを備えており、推論には 80 GB のストレージを備えた A100 GPU が少なくとも 5 つ必要です。モデル圧縮は現在、大規模モデルの計算コストを削減するために一般的に使用されている方法ですが、これまでのところ、既存のほとんどすべての方法が

David Linsigao が編集 | Yanzheng 51CTO Technology Stack が作成した製品 (WeChat ID: blog51cto) テクノロジー分野には暗黙のルールがあります。それは、誰もが他人のテクノロジーを使用することを好むということです。しかし、多くの企業にとって、生成 AI はその型にはまらないようで、生成 AI はいくつかの重要な意思決定を急速に推進しています。すべての組織は、カスタムの生成 AI プラットフォームを社内で構築するか、AI ベンダーからパッケージ化されたソリューション (クラウド サービスとして提供されることが多い) を購入するかという重要な選択に直面しています。DIY は量と機会を優先します。奇妙ですが、その理由に驚かれるかもしれません。エンタープライズ genAI 戦略の再考につながる可能性もあります。 1. 完全なカスタマイズと制御 コンテンツを次のように書き換えます。

イーサリアムの拡張に関する @VitalikButerin の新しい記事の考えを理解するにはどうすればよいでしょうか?ヴィタリックのブロブ碑文の注文はとんでもないという人もいます。では、BLOB パケットはどのように機能するのでしょうか?カンクンでのアップグレード後に BLOB スペースが効率的に使用されないのはなぜですか?シャーディングの準備として DAS データの可用性をサンプリングしますか?私の意見では、Cancun のパフォーマンスはアップグレード後も使用可能であり、Vitalik は Rollup の開発を心配しています。なぜ?次に、私の理解について話させてください: これまでに何度も説明したように、Blob は EVM の呼び出しデータから切り離されており、コンセンサス層によって直接呼び出すことができる一時的なデータ パッケージです。直接的な利点は、EVM がアクセスする必要がないことです。トランザクションの実行時に BLOB のデータが読み取られるため、実行層の計算が低下します。

この記事では、HTML5 で記事を追加する方法を学びます。 HTML5 の新しいセグメンテーション要素の 1 つはタグです。記事はタグを使用して HTML で表現されます。より具体的には、要素内に含まれるコンテンツは、サイトの残りのコンテンツとは (たとえ関連しているとしても) 異なります。 HTML5 に記事を追加する方法を理解するために、次の例を考えてみましょう。 例 1 次の例では、article 要素でインライン スタイルを使用しています。 <!DOCTYPEhtml><html><body><articlestyle="width:300px;border:2pxsolidgray;padding:

1. 携帯電話を開き、WeChat ソフトウェアをクリックして、WeChat ホームページの設定を入力します。 2. WeChat の右下隅にある [My] を見つけて開き、[My] ページに入ります。 3. 「コレクション」をクリックして、新しいページを開きます。

サイズ hxw のグリッドがあるとします。グリッド内の各セルには正の整数が含まれています。ここで、特定のセル (p,q) (p は行番号、q は列番号) に経路検索ロボットが配置され、セル (i,j) に移動できます。移動操作には、|p-i|+|q-j| に等しい特定のコストがかかります。現在、次のプロパティを持つ q 個の旅行があります。各トリップには 2 つの値 (x, y) があり、共通の値 d があります。ロボットは値 x のセルに配置され、値 x+d の別のセルに移動します。次に、値 x+d+d を持つ別のセルに移動します。このプロセスは、ロボットが y 以上の値を持つセルに到達するまで続きます。 y-x は d の倍数です
