摘要:另一個與之相反的方法是將任務(wù)分配的多臺機(jī)器上,這通常被稱為水平擴(kuò)展或者向外擴(kuò)展。向上擴(kuò)展向上擴(kuò)展也叫垂直擴(kuò)展意味著購買更多性能強(qiáng)悍的機(jī)器。考慮清楚歸檔系統(tǒng)中的解除歸檔策略。總結(jié)向上氪金,向外氪腦。
如果將應(yīng)用的所有數(shù)據(jù)簡單地放在一臺 MySQL 服務(wù)器實(shí)例上,就不用談什么擴(kuò)展性了。但是業(yè)務(wù)能穩(wěn)定持續(xù)的增長,那么應(yīng)用肯定會碰到性能瓶頸。
對于很多類型的應(yīng)用而言,購買更高性能的機(jī)器能解決一大部分性能問題,這也是我們常說的 “垂直擴(kuò)展” 或者 “向上擴(kuò)展”。
另一個與之相反的方法是將任務(wù)分配的多臺機(jī)器上,這通常被稱為 “水平擴(kuò)展” 或者 “向外擴(kuò)展”。
接下來,我們將討論如何聯(lián)合使用向上擴(kuò)展和向外擴(kuò)展,以及如何使用集群方案來進(jìn)行擴(kuò)展。
最后,大部分應(yīng)用還會有一些很少或者從不需要的數(shù)據(jù),這些數(shù)據(jù)可以被清理或歸檔,我們可以稱這種方案為 “向內(nèi)擴(kuò)展”。
1 向上擴(kuò)展向上擴(kuò)展(也叫垂直擴(kuò)展)意味著購買更多性能強(qiáng)悍的機(jī)器。這種策略有較多優(yōu)點(diǎn):
更容易維護(hù)和開發(fā),顯著節(jié)約開銷;
單臺服務(wù)器備份和恢復(fù)較為簡單,無需關(guān)心一致性;
因此,從復(fù)雜性的成本來說,大多時候,向上擴(kuò)展比向外擴(kuò)展更簡單。
另外,不要覺得向上擴(kuò)展很快就走到“盡頭”,要相信科技的進(jìn)步速度。現(xiàn)在,擁有 0.5TB 內(nèi)存、32 核(或者更多)CPU 以及更強(qiáng)悍 I/O 性能的商用服務(wù)器很容易獲得。優(yōu)秀的應(yīng)用和數(shù)據(jù)庫設(shè)計,再加上很好的性能優(yōu)化技能,已經(jīng)可以滿足絕大多數(shù)商業(yè)應(yīng)用。
不過遺憾的,雖然高性能服務(wù)器比較容易獲得,但是 MySQL 并不能擴(kuò)展到對應(yīng)的規(guī)模。為了更好地在大型服務(wù)器上運(yùn)行 MySQL,一定要盡量選擇最新的版本。即使如此,當(dāng)前合理的 “收益遞減點(diǎn)” 的機(jī)器配置大約是:
256G RAM
32 核 CPU
PCIe flash 驅(qū)動器
如果繼續(xù)提升硬件配置,MySQL 性能雖然還能有所提升,但性價比就會降低。
因此,我們建議,如果系統(tǒng)確實(shí)有可能碰到可規(guī)劃性的天花板,并且會導(dǎo)致嚴(yán)重的業(yè)務(wù)問題,那就不要無限制的做向上擴(kuò)展的規(guī)劃。對于龐大的應(yīng)用,可以短期內(nèi)購買更優(yōu)的服務(wù)器,但最終還是需要向外擴(kuò)展的。
2 向外擴(kuò)展向外擴(kuò)展(也叫橫向擴(kuò)展或水平擴(kuò)展)策略通常分為三個部分:復(fù)制、拆分和數(shù)據(jù)分片。
最常見的向外擴(kuò)展就是讀寫分離。通過復(fù)制將數(shù)據(jù)分發(fā)到多個服務(wù)器上,然后將備庫用于讀查詢。這種技術(shù)對于以讀為主的應(yīng)用很有效。
另一個比較常見的向外擴(kuò)展方法是將工作負(fù)載分布到多個 “節(jié)點(diǎn)”。接下來我們要了解的主要是這種擴(kuò)展方法。
在此之前,我們先明確下節(jié)點(diǎn)的概念。在 MySQL 架構(gòu)中,一個節(jié)點(diǎn)就是一個功能部件。一般的,我們會將一臺服務(wù)器作為一個幾點(diǎn)。但如果我們考慮到節(jié)點(diǎn)的高可用性,那么一個節(jié)點(diǎn)通常可能是下面的幾種:
一個主 - 主 復(fù)制雙機(jī)結(jié)構(gòu),擁有一個主動服務(wù)器和被動服務(wù)器。
一個主庫和多個備庫。
一個主動服務(wù)器,并使用分布式復(fù)制塊設(shè)備(DRBD)作為備用服務(wù)器。
一個基于存儲區(qū)域網(wǎng)絡(luò)(SAN)的 “集群”。
2.1 按功能拆分按功能拆分,或者說按職責(zé)拆分,意味著不同的節(jié)點(diǎn)執(zhí)行不同的任務(wù)。
例如,如果有一個網(wǎng)站,各個部分無需共享數(shù)據(jù),那么可以按照網(wǎng)站的功能區(qū)域進(jìn)行劃分。像我們常見的門戶網(wǎng)站,一般都是把不同欄目放在一起,但實(shí)際上可以將網(wǎng)站新聞、論壇、尋求支持等功能放到專用的 MySQL 服務(wù)器。如圖 2-1
2.2 數(shù)據(jù)分片在目前用于擴(kuò)展大型 MySQL 應(yīng)用的方案中,數(shù)據(jù)分片是最通用且最成功的方法。它把數(shù)據(jù)分割成一小片,或者說一塊,然后存儲到不同的節(jié)點(diǎn)中。
在使用分片前,要牢記一個通用原則:如非必要,盡量不分片。
除此之前,對于分片,我們只會對需要的數(shù)據(jù)做分片。這里 “需要的數(shù)據(jù)” 通常是那些增長非常龐大的數(shù)據(jù)。而像對于用戶信息這些全局?jǐn)?shù)據(jù),一般是存儲在單個節(jié)點(diǎn)上,通常保存在類似 redis 這樣的緩存中。
對于分片,我們通常要考慮下列問題:
選擇合適的分區(qū)鍵(partition key)。
是否需要多個分區(qū)鍵?
跨分片查詢?nèi)绾翁幚恚?/p>
如何分片數(shù)據(jù)、分片和節(jié)點(diǎn)?
如何在節(jié)點(diǎn)上部署分片?
如何生成全局唯一 ID?
2.3 通過多實(shí)例擴(kuò)展上面提到過,MySQL 不能完全發(fā)揮現(xiàn)代硬件的性能。當(dāng)擴(kuò)展到超過 24 個 CPU 核心時,MySQL 的性能開始趨于平緩,不再上升。當(dāng)內(nèi)存超過 128G 時也同樣如此。對于此種情況,我們可以通過多實(shí)例策略充分發(fā)揮硬件的性能。
多實(shí)例策略的基本思路是:
數(shù)據(jù)分片足夠小,可以使得在每臺機(jī)器上都能放置多個分片;
每臺服務(wù)器運(yùn)行多個實(shí)例;
給每個實(shí)例劃分服務(wù)器的硬件資源;
可以看出,這是一種向上擴(kuò)展和向外擴(kuò)展的組合方案。這種方案還可以通過將每個 MySQL 實(shí)例綁定到特定的 CPU 核心上來優(yōu)化性能。這種優(yōu)化,主要有兩個好處:
由于 MySQL 內(nèi)部的可擴(kuò)展性限制,當(dāng)核心數(shù)較少時,能夠在每個核心上獲得更好的性能;
當(dāng)實(shí)例在多個核心上運(yùn)行線程時,由于需要在多核心上同步共享數(shù)據(jù),因而會有額外的開銷。
而我們把實(shí)例和 CPU 核心綁定后,可以減少 CPU 核心直接的切換和交互。要注意的,將進(jìn)程綁定到具有相同物理套接字的核心上可以獲得最優(yōu)的效果。
3 向內(nèi)擴(kuò)展對于不斷增長的數(shù)據(jù)和負(fù)載,最簡單的方法是對不再需要的數(shù)據(jù)進(jìn)行歸檔和清理。這種操作可能會帶來顯著的效果。這種做法并不能代替其他策略,但可以作為爭取時間的短期策略,也可以作為處理大數(shù)據(jù)量的長期計劃之一。
在設(shè)計歸檔和清理策略時需要考慮如下幾點(diǎn):
對應(yīng)用的影響。設(shè)計良好的歸檔系統(tǒng)能夠在不影響事務(wù)處理的情況下,從一個高負(fù)債的 OLTP 服務(wù)器上移除數(shù)據(jù)。
要?dú)w檔的行。考慮清楚哪些數(shù)據(jù)可以清理或歸檔。
維護(hù)數(shù)據(jù)一致性。數(shù)據(jù)間存在聯(lián)系時,歸檔任務(wù)系統(tǒng)要能夠保證數(shù)據(jù)的邏輯一致性。
避免數(shù)據(jù)丟失。歸檔時要保證歸檔數(shù)據(jù)已經(jīng)成功保存,再講源數(shù)據(jù)刪除。
解除歸檔。考慮清楚歸檔系統(tǒng)中的解除歸檔策略。可以通過設(shè)置一些檢查點(diǎn)讓系統(tǒng)檢查是否有需要?dú)w檔的數(shù)據(jù)。
如果不能及時的把老數(shù)據(jù)歸檔和清理時,我們也可以通過以下隔離冷熱數(shù)據(jù)的方式來提高性能:
將表劃分為幾個部分。分割大表中的冷熱數(shù)據(jù),保證加載到內(nèi)存中的數(shù)據(jù)中,熱數(shù)據(jù)的比例;
MySQL 分區(qū)。使用MySQL 自帶的分區(qū)的功能,可以幫助我們把最近的數(shù)據(jù)留在內(nèi)存中;
基于時間的數(shù)據(jù)分區(qū)。如果應(yīng)用不斷有新數(shù)據(jù)盡量,一般新數(shù)據(jù)總是比舊數(shù)據(jù)更加活躍。因此,我們可以將新數(shù)據(jù)完整的保留在內(nèi)存中,同時使用復(fù)制來保證主庫失效時有一份可以的備份,而舊數(shù)據(jù)就而言放到別的地方。
總結(jié)向上氪金,向外氪腦。三思而后行。
能不分片,就盡量不分片。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/74247.html
摘要:另一個與之相反的方法是將任務(wù)分配的多臺機(jī)器上,這通常被稱為水平擴(kuò)展或者向外擴(kuò)展。向上擴(kuò)展向上擴(kuò)展也叫垂直擴(kuò)展意味著購買更多性能強(qiáng)悍的機(jī)器。考慮清楚歸檔系統(tǒng)中的解除歸檔策略。總結(jié)向上氪金,向外氪腦。 如果將應(yīng)用的所有數(shù)據(jù)簡單地放在一臺 MySQL 服務(wù)器實(shí)例上,就不用談什么擴(kuò)展性了。但是業(yè)務(wù)能穩(wěn)定持續(xù)的增長,那么應(yīng)用肯定會碰到性能瓶頸。 對于很多類型的應(yīng)用而言,購買更高性能的機(jī)器能解決一...
摘要:容量和可擴(kuò)展性并不依賴于性能。容量是車道乘以最大安全時速。至此,關(guān)于擴(kuò)展性的概念描述告一段落。但現(xiàn)實(shí)是誒,小九啊,咱們系統(tǒng)提升下性能要多久啊三天應(yīng)該差不多了吧,最多不能超過一周,上次提升性能,小六一天就搞定了的。 我們應(yīng)該接觸過或者聽說過數(shù)據(jù)庫的性能瓶頸問題。對于一個單機(jī)應(yīng)用而言,提升數(shù)據(jù)庫性能的最快路徑就是氪金 - 買更高性能的數(shù)據(jù)庫服務(wù)器,只要錢到位,性能不是問題。 但是當(dāng)系統(tǒng)性能...
摘要:容量和可擴(kuò)展性并不依賴于性能。容量是車道乘以最大安全時速。至此,關(guān)于擴(kuò)展性的概念描述告一段落。但現(xiàn)實(shí)是誒,小九啊,咱們系統(tǒng)提升下性能要多久啊三天應(yīng)該差不多了吧,最多不能超過一周,上次提升性能,小六一天就搞定了的。 我們應(yīng)該接觸過或者聽說過數(shù)據(jù)庫的性能瓶頸問題。對于一個單機(jī)應(yīng)用而言,提升數(shù)據(jù)庫性能的最快路徑就是氪金 - 買更高性能的數(shù)據(jù)庫服務(wù)器,只要錢到位,性能不是問題。 但是當(dāng)系統(tǒng)性能...
閱讀 1467·2021-11-22 14:44
閱讀 2846·2021-11-16 11:44
閱讀 3213·2021-10-13 09:40
閱讀 1986·2021-10-08 10:04
閱讀 2368·2021-09-24 10:28
閱讀 2911·2021-09-06 15:02
閱讀 2962·2019-08-30 15:52
閱讀 2396·2019-08-30 13:20