自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL Cluster:如何通過(guò)擴(kuò)展為MySQL帶來(lái)2億QPS

譯文
數(shù)據(jù)庫(kù) MySQL 數(shù)據(jù)庫(kù)運(yùn)維 云計(jì)算
本篇文章的目的在于介紹MySQL Cluster——也就是MySQL的一套內(nèi)存內(nèi)、實(shí)時(shí)、可擴(kuò)展且具備高可用性的版本。在解決標(biāo)題中所提到的每秒2億查詢處理能力問(wèn)題之前,我們先對(duì)MySQL集群的背景信息及其架構(gòu)進(jìn)行一番回顧,這將有助于大家理解上述目標(biāo)的實(shí)現(xiàn)過(guò)程。

MySQL Cluster:如何通過(guò)擴(kuò)展為MySQL帶來(lái)2億QPS

本篇文章的目的在于介紹MySQL Cluster——也就是MySQL的一套內(nèi)存內(nèi)、實(shí)時(shí)、可擴(kuò)展且具備高可用性的版本。在解決標(biāo)題中所提到的每秒2億查詢處理能力問(wèn)題之前,我們先對(duì)MySQL集群的背景信息及其架構(gòu)進(jìn)行一番回顧,這將有助于大家理解上述目標(biāo)的實(shí)現(xiàn)過(guò)程。

MySQL Cluster介紹

MySQL Cluster是一套具備可擴(kuò)展能力、實(shí)時(shí)、內(nèi)存內(nèi)且符合ACID要求的事務(wù)型數(shù)據(jù)庫(kù),其將99.999%高可用性與低廉的開源總體擁有成本相結(jié)合。在設(shè)計(jì)思路方面,MySQL Cluster采用一套分布式多主架構(gòu)并借此徹底消滅了單點(diǎn)故障問(wèn)題。MySQL Cluster能夠橫向擴(kuò)展至商用硬件之上,能夠通過(guò)自動(dòng)分區(qū)以承載讀取與寫入敏感型工作負(fù)載,并可通過(guò)SQL與NoSQL接口實(shí)現(xiàn)訪問(wèn)。

作為一套最初被設(shè)計(jì)為嵌入式電信數(shù)據(jù)庫(kù)、用于實(shí)現(xiàn)內(nèi)網(wǎng)應(yīng)用運(yùn)營(yíng)商級(jí)可用性及實(shí)時(shí)性能的解決方案,MySQL Cluster已經(jīng)通過(guò)眾多新型功能集的強(qiáng)化而得到快速發(fā)展,從而將用例范圍擴(kuò)展到Web、移動(dòng)以及企業(yè)級(jí)應(yīng)用程序等部署在內(nèi)部或者云環(huán)境下的實(shí)例當(dāng)中,具體包括:大規(guī)模OLTP(實(shí)時(shí)分析)電子商務(wù)、庫(kù)存管理、購(gòu)物車、支付處理、訂單追蹤、在線游戲、金融交易與欺詐檢測(cè)、移動(dòng)與微支付、會(huì)話管理與緩存、數(shù)據(jù)流供應(yīng)、分析與建議、內(nèi)容管理與交付、通信與呈現(xiàn)服務(wù)、訂閱/用戶配置管理與補(bǔ)貼等等。

MySQL Cluster架構(gòu)概述

在面向應(yīng)用程序的事務(wù)流程背后,存在著三種負(fù)責(zé)將服務(wù)交付至應(yīng)用程序的節(jié)點(diǎn)類型。下圖所示為一套簡(jiǎn)單的示例型MySQL Cluster架構(gòu),其由十二套被劃分為六個(gè)節(jié)點(diǎn)組的Data Node構(gòu)成。

MySQL Cluster:如何通過(guò)擴(kuò)展為MySQL帶來(lái)2億QPS

Data Node屬于MySQL Cluster當(dāng)中的主節(jié)點(diǎn)。它們負(fù)責(zé)提供以下功能:內(nèi)存內(nèi)與基于磁盤數(shù)據(jù)的存儲(chǔ)與管理、表的自動(dòng)化與用戶定義型劃分(即分區(qū))、在不同數(shù)據(jù)節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)副本同步、事務(wù)與數(shù)據(jù)檢查、自動(dòng)故障轉(zhuǎn)移以及用于實(shí)現(xiàn)自我修復(fù)的故障后自動(dòng)重新同步。

各種表會(huì)在多個(gè)數(shù)據(jù)節(jié)點(diǎn)當(dāng)中進(jìn)行自動(dòng)分區(qū),而且每個(gè)數(shù)據(jù)節(jié)點(diǎn)作為一個(gè)寫入操作的接收主體,這就使其能夠輕松將寫入敏感型工作負(fù)載分布至多個(gè)商用節(jié)點(diǎn)之上,同時(shí)保證應(yīng)用程序的完全透明化。

通過(guò)將數(shù)據(jù)保存并分發(fā)至一套無(wú)共享架構(gòu)——也就是不使用任何共享磁盤——當(dāng)中,并至少為數(shù)據(jù)同步至一套副本內(nèi),MySQL Cluster能夠保證在單一Data Node出現(xiàn)故障時(shí)、用戶至少還擁有另一個(gè)存儲(chǔ)有相同信息的Data Node。如此一來(lái),請(qǐng)求與事務(wù)處理流程將以無(wú)中斷方式繼續(xù)提供令人滿意的運(yùn)作效果。任何由于Data Node故障所引發(fā)的短暫故障轉(zhuǎn)移窗口(時(shí)間在秒以下)而無(wú)法正常完成的事務(wù)流程都將被回滾并重新執(zhí)行。

我們可以為數(shù)據(jù)選擇存儲(chǔ)方式,包括全部保存在內(nèi)存內(nèi)或者將一部分?jǐn)?shù)據(jù)只在在磁盤之上(僅限于非索引數(shù)據(jù))。內(nèi)存內(nèi)存儲(chǔ)對(duì)于那些需要經(jīng)常進(jìn)行變更的數(shù)據(jù)(也就是活躍工作組)而言意義重大。保存在內(nèi)存內(nèi)的數(shù)據(jù)會(huì)定期進(jìn)行指向本地磁盤的檢查,并與全部Data Node進(jìn)行協(xié)調(diào),這樣MySQL Cluster就能夠在整體系統(tǒng)發(fā)生故障時(shí)——例如供電中斷——得以全面恢復(fù)?;诖疟P的數(shù)據(jù)能夠被用于存儲(chǔ)對(duì)性能要求較低的數(shù)據(jù),而這類數(shù)據(jù)集往往大于可用內(nèi)存空間。正如其它大部分?jǐn)?shù)據(jù)庫(kù)服務(wù)器一樣,MySQL Cluster會(huì)利用頁(yè)面緩存機(jī)制將基于磁盤且訪問(wèn)頻率較高的數(shù)據(jù)緩存在Data Node的內(nèi)存當(dāng)中,從而增加其實(shí)際性能表現(xiàn)。

Application Node負(fù)責(zé)提供由應(yīng)用程序邏輯到數(shù)據(jù)節(jié)點(diǎn)的連接。應(yīng)用程序可以利用SQL訪問(wèn)該數(shù)據(jù)庫(kù),具體而言通過(guò)一臺(tái)或者多臺(tái)MySQL服務(wù)器向處于同一套MySQL Cluster內(nèi)的存儲(chǔ)數(shù)據(jù)執(zhí)行SQL接口功能。在MySQL Server當(dāng)中,我們可以使用任何一種標(biāo)準(zhǔn)化MySQL連接機(jī)制,這意味著大家擁有非常豐富的訪問(wèn)技術(shù)可供選擇。另外,一套名為NDB API的高性能(基于C++)接口可被用于實(shí)現(xiàn)附加控制、改善實(shí)時(shí)行為并帶來(lái)更理想的吞吐能力。NDB API的層能夠幫助額外NoSQL接口繞過(guò)SQL層而直接訪問(wèn)該集群,如此一來(lái)不僅延遲有所降低、開發(fā)人員也有獲得更理想的靈活性水平?,F(xiàn)有接口包括Java、JPA、Memcached、JavaScript with Node.js以及HTTP/REST(通過(guò)一套Apache Module實(shí)現(xiàn))。所有Application Node都能夠訪問(wèn)到來(lái)自任意Data Node的數(shù)據(jù),所以即使出現(xiàn)故障、它們也不會(huì)導(dǎo)致任何服務(wù)丟失——因?yàn)楦鲬?yīng)用程序能夠繼續(xù)使用其它尚能正常運(yùn)轉(zhuǎn)的節(jié)點(diǎn)。

Management Node的職責(zé)在于該集群的配置方案發(fā)布到集群內(nèi)的所有節(jié)點(diǎn)當(dāng)中以實(shí)現(xiàn)節(jié)點(diǎn)管理。Management Node的起效時(shí)間點(diǎn)分別為集群?jiǎn)?dòng)時(shí)、某個(gè)節(jié)點(diǎn)希望加入集群時(shí)以及系統(tǒng)進(jìn)行重新配置時(shí)。Management Node能夠在不影響到當(dāng)前正在進(jìn)行的Data及Application Node執(zhí)行操作的前提下進(jìn)行中止以及重啟。在默認(rèn)情況下,Management Node同時(shí)提供裁定服務(wù),例如某種網(wǎng)絡(luò)故障引發(fā)“裂腦(即split-brain)”或者某信集群開始進(jìn)行網(wǎng)絡(luò)劃分的情況。

通過(guò)透明化劃分實(shí)現(xiàn)可擴(kuò)展性

MySQL Cluster:如何通過(guò)擴(kuò)展為MySQL帶來(lái)2億QPS

來(lái)自任何給定表的行都會(huì)以透明化方式被拆分成多個(gè)分區(qū)/片段。在每個(gè)片段中會(huì)包含一個(gè)單獨(dú)數(shù)據(jù)節(jié)點(diǎn),負(fù)責(zé)保留全部數(shù)據(jù)內(nèi)容并處理指向該數(shù)據(jù)的所有讀取及寫入操作。每個(gè)數(shù)據(jù)節(jié)點(diǎn)還擁有一套搭檔體系,二者共同構(gòu)成一個(gè)節(jié)點(diǎn)組; 搭檔節(jié)點(diǎn)中保存有該數(shù)據(jù)片段的輔助副本,但同時(shí)也擁有著自己的主片段。MySQL Cluster利用兩步式提交協(xié)議實(shí)現(xiàn)數(shù)據(jù)同步,從而確保當(dāng)某項(xiàng)事務(wù)被提交之后、所引發(fā)的變更將被同時(shí)存儲(chǔ)在兩個(gè)數(shù)據(jù)節(jié)點(diǎn)當(dāng)中。

在默認(rèn)情況下,表的主鍵會(huì)被作為分片鍵使用,而MySQL Cluster將對(duì)該分片鍵執(zhí)行MD5散列處理、從而選擇需要保存哪個(gè)片段/分區(qū)。如果某一事務(wù)或者查詢需要訪問(wèn)來(lái)自多個(gè)數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù),那么其中一個(gè)數(shù)據(jù)節(jié)點(diǎn)會(huì)充當(dāng)事務(wù)協(xié)調(diào)方的角色,并將具體工作分配給其它相關(guān)數(shù)據(jù)節(jié)點(diǎn); 接下來(lái)訪問(wèn)結(jié)果會(huì)得到整合,并最終提供給應(yīng)用程序。請(qǐng)注意,我們同樣可以讓多個(gè)事務(wù)或者查詢?cè)L問(wèn)來(lái)自多個(gè)分區(qū)及表的數(shù)據(jù)——相較于利用分片機(jī)制保存數(shù)據(jù)的典型NoSQL,這無(wú)疑成為MySQL Cluster的一大顯著比較優(yōu)勢(shì)。

MySQL Cluster:如何通過(guò)擴(kuò)展為MySQL帶來(lái)2億QPS

要實(shí)現(xiàn)最理想的(線性)規(guī)模縮放效果,我們需要確保將高強(qiáng)度查詢/事務(wù)只需運(yùn)行在單獨(dú)一套數(shù)據(jù)節(jié)點(diǎn)之上(因?yàn)檫@能夠大大降低由數(shù)據(jù)節(jié)點(diǎn)間通信所帶來(lái)的網(wǎng)絡(luò)延遲)。為了實(shí)現(xiàn)這個(gè)目標(biāo),我們可以讓應(yīng)用程序獲得分布識(shí)別能力——具體而言,這意味著由管理員定義的規(guī)劃能夠涵蓋分片鍵所需要使用的任意列。舉例來(lái)講,上圖所示為一套配備有由用戶ID與服務(wù)名稱組成的復(fù)合主鍵的表; 通過(guò)將用戶ID選定為分片鍵,表內(nèi)與給定用戶相關(guān)的所有行將始終被容納在同一片段當(dāng)中。更為強(qiáng)大的是,如果我們?cè)谄渌碇惺褂猛瑯拥挠脩鬒D列并將其設(shè)定為分片鍵,那么該給定用戶在所有表內(nèi)的全部數(shù)據(jù)都會(huì)被容納在同一片段之內(nèi)——換言之,指向該用戶的查詢/事務(wù)都將在單一數(shù)據(jù)節(jié)點(diǎn)內(nèi)進(jìn)行處理。

#p#

利用NoSQL API***程度提升數(shù)據(jù)訪問(wèn)速度

MySQL Cluster提供多種方式對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行訪問(wèn); 最常見(jiàn)的方法當(dāng)然是SQL,不過(guò)正如下圖所示,我們還可以利用多種原生API幫助應(yīng)用程序直接從數(shù)據(jù)庫(kù)當(dāng)中讀取及寫入數(shù)據(jù),同時(shí)又能通過(guò)轉(zhuǎn)換為SQL以繞過(guò)MySQL Server的方式防止效率低下或者拉高開發(fā)復(fù)雜程度。現(xiàn)有API面向C++、Java、JPA、JavaScript/Node.js、HTTP以及Memcached協(xié)議。

MySQL Cluster:如何通過(guò)擴(kuò)展為MySQL帶來(lái)2億QPS

基準(zhǔn)目標(biāo):每秒2億次查詢

MySQL Cluster在設(shè)計(jì)當(dāng)中主要面向兩種工作負(fù)載類型:

-OLTP(即聯(lián)機(jī)事務(wù)處理):內(nèi)存優(yōu)化型表提供次毫秒級(jí)低延遲與堪稱極端水平的OLTP工作負(fù)載并發(fā)能力,同時(shí)仍然保證良好的耐久性表現(xiàn); 此外,其也能夠被用于處理基于磁盤的表數(shù)據(jù)。

-臨時(shí)性搜索:MySQL Cluster增加了并行數(shù)量上限,從而在對(duì)表內(nèi)非索引數(shù)據(jù)列進(jìn)行掃描時(shí)帶來(lái)顯著的速度提升。

值得一提的是,MySQL Cluster在處理OLTP工作負(fù)載方面的表現(xiàn)最為突出,特別是在以并發(fā)方式發(fā)出海量查詢/事務(wù)請(qǐng)求的情況下。為此,我們一般會(huì)使用flexAsynch基準(zhǔn)測(cè)試來(lái)衡量將更多數(shù)據(jù)節(jié)點(diǎn)添加到集群當(dāng)中后,NoSQL所獲得的實(shí)際性能擴(kuò)展效果。

MySQL Cluster:如何通過(guò)擴(kuò)展為MySQL帶來(lái)2億QPS

此次基準(zhǔn)測(cè)試所面向的每個(gè)數(shù)據(jù)節(jié)點(diǎn)都運(yùn)行在采用專用56線程英特爾E5-2697 v3(Haswell架構(gòu))設(shè)備之上。上圖所示為數(shù)據(jù)吞吐能力隨數(shù)據(jù)節(jié)點(diǎn)數(shù)量增長(zhǎng)的變化趨勢(shì),具體區(qū)間由2節(jié)點(diǎn)最終增加到32節(jié)點(diǎn)(請(qǐng)注意,MySQL Cluster目前最多能夠支持48個(gè)數(shù)據(jù)節(jié)點(diǎn))。如套大家所見(jiàn),整個(gè)擴(kuò)展比例幾乎保持線性,而且在32數(shù)據(jù)中心情況下其整體吞吐能力達(dá)到了每秒2億次NoSQL查詢。

如果大家對(duì)這次測(cè)試感興趣,可以點(diǎn)擊此處在MySQL Cluster基準(zhǔn)測(cè)試頁(yè)面內(nèi)了解與之相關(guān)的詳盡描述與***結(jié)果。

此次2億QPS基準(zhǔn)測(cè)試運(yùn)行在MySQL Cluster 7.4版本之上(為目前***的通用版本)——大家可以點(diǎn)擊此處了解更多與MySQL Cluster 7.4版本相關(guān)的信息,或者點(diǎn)擊此處觀看主題網(wǎng)絡(luò)研討會(huì)的重播視頻。

原文標(biāo)題:How MySQL Is Able To Scale To 200 Million QPS - MySQL Cluster

 

責(zé)任編輯:Ophira 來(lái)源: 51CTO
相關(guān)推薦

2011-07-07 10:12:40

MySQL Clust

2010-05-17 13:39:10

MySQL Clust

2011-11-24 15:08:40

C++

2024-03-08 17:54:44

MySQL函數(shù)數(shù)據(jù)

2024-07-04 13:42:12

2012-02-29 14:35:48

MySQL

2011-08-01 15:20:51

SQL Server索引

2009-06-19 14:44:04

ODBCMySQL

2019-10-10 10:36:48

RedisQPSMySQL

2013-06-21 15:59:36

甲骨文全球大會(huì)2013甲骨文

2016-01-05 11:25:57

Windows 10安裝量數(shù)據(jù)

2014-05-30 13:35:21

MySQL Clust架構(gòu)

2012-02-09 13:21:22

MySQL

2021-05-12 09:13:48

MySQL數(shù)據(jù)庫(kù)Docker搭建

2019-12-10 10:23:57

Node.jsCluster前端

2019-07-31 09:27:23

數(shù)據(jù)庫(kù)MySQLSQL

2012-01-05 09:51:29

微軟諾基亞Nokia Ace

2015-03-05 11:16:02

甲骨文MySQL

2011-07-27 09:33:16

MySQL數(shù)據(jù)庫(kù)INNODB數(shù)據(jù)庫(kù)引擎

2024-06-05 08:51:14

Python動(dòng)態(tài)創(chuàng)建類工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)