成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MySQL - 擴展性 2 擴展策略:氪金氪腦任君選

Chao / 1933人閱讀

摘要:另一個與之相反的方法是將任務分配的多臺機器上,這通常被稱為水平擴展或者向外擴展。向上擴展向上擴展也叫垂直擴展意味著購買更多性能強悍的機器。考慮清楚歸檔系統(tǒng)中的解除歸檔策略??偨Y(jié)向上氪金,向外氪腦。

如果將應用的所有數(shù)據(jù)簡單地放在一臺 MySQL 服務器實例上,就不用談什么擴展性了。但是業(yè)務能穩(wěn)定持續(xù)的增長,那么應用肯定會碰到性能瓶頸。

對于很多類型的應用而言,購買更高性能的機器能解決一大部分性能問題,這也是我們常說的 “垂直擴展” 或者 “向上擴展”。

另一個與之相反的方法是將任務分配的多臺機器上,這通常被稱為 “水平擴展” 或者 “向外擴展”。

接下來,我們將討論如何聯(lián)合使用向上擴展和向外擴展,以及如何使用集群方案來進行擴展。

最后,大部分應用還會有一些很少或者從不需要的數(shù)據(jù),這些數(shù)據(jù)可以被清理或歸檔,我們可以稱這種方案為 “向內(nèi)擴展”。

1 向上擴展

向上擴展(也叫垂直擴展)意味著購買更多性能強悍的機器。這種策略有較多優(yōu)點:

更容易維護和開發(fā),顯著節(jié)約開銷;

單臺服務器備份和恢復較為簡單,無需關心一致性;

因此,從復雜性的成本來說,大多時候,向上擴展比向外擴展更簡單。

另外,不要覺得向上擴展很快就走到“盡頭”,要相信科技的進步速度?,F(xiàn)在,擁有 0.5TB 內(nèi)存、32 核(或者更多)CPU 以及更強悍 I/O 性能的商用服務器很容易獲得。優(yōu)秀的應用和數(shù)據(jù)庫設計,再加上很好的性能優(yōu)化技能,已經(jīng)可以滿足絕大多數(shù)商業(yè)應用。

不過遺憾的,雖然高性能服務器比較容易獲得,但是 MySQL 并不能擴展到對應的規(guī)模。為了更好地在大型服務器上運行 MySQL,一定要盡量選擇最新的版本。即使如此,當前合理的 “收益遞減點” 的機器配置大約是:

256G RAM

32 核 CPU

PCIe flash 驅(qū)動器

如果繼續(xù)提升硬件配置,MySQL 性能雖然還能有所提升,但性價比就會降低。

因此,我們建議,如果系統(tǒng)確實有可能碰到可規(guī)劃性的天花板,并且會導致嚴重的業(yè)務問題,那就不要無限制的做向上擴展的規(guī)劃。對于龐大的應用,可以短期內(nèi)購買更優(yōu)的服務器,但最終還是需要向外擴展的。

2 向外擴展

向外擴展(也叫橫向擴展或水平擴展)策略通常分為三個部分:復制、拆分和數(shù)據(jù)分片。

最常見的向外擴展就是讀寫分離。通過復制將數(shù)據(jù)分發(fā)到多個服務器上,然后將備庫用于讀查詢。這種技術對于以讀為主的應用很有效。

另一個比較常見的向外擴展方法是將工作負載分布到多個 “節(jié)點”。接下來我們要了解的主要是這種擴展方法。

在此之前,我們先明確下節(jié)點的概念。在 MySQL 架構(gòu)中,一個節(jié)點就是一個功能部件。一般的,我們會將一臺服務器作為一個幾點。但如果我們考慮到節(jié)點的高可用性,那么一個節(jié)點通??赡苁窍旅娴膸追N:

一個主 - 主 復制雙機結(jié)構(gòu),擁有一個主動服務器和被動服務器。

一個主庫和多個備庫。

一個主動服務器,并使用分布式復制塊設備(DRBD)作為備用服務器。

一個基于存儲區(qū)域網(wǎng)絡(SAN)的 “集群”。

2.1 按功能拆分

按功能拆分,或者說按職責拆分,意味著不同的節(jié)點執(zhí)行不同的任務。

例如,如果有一個網(wǎng)站,各個部分無需共享數(shù)據(jù),那么可以按照網(wǎng)站的功能區(qū)域進行劃分。像我們常見的門戶網(wǎng)站,一般都是把不同欄目放在一起,但實際上可以將網(wǎng)站新聞、論壇、尋求支持等功能放到專用的 MySQL 服務器。如圖 2-1

2.2 數(shù)據(jù)分片

在目前用于擴展大型 MySQL 應用的方案中,數(shù)據(jù)分片是最通用且最成功的方法。它把數(shù)據(jù)分割成一小片,或者說一塊,然后存儲到不同的節(jié)點中。

在使用分片前,要牢記一個通用原則:如非必要,盡量不分片。

除此之前,對于分片,我們只會對需要的數(shù)據(jù)做分片。這里 “需要的數(shù)據(jù)” 通常是那些增長非常龐大的數(shù)據(jù)。而像對于用戶信息這些全局數(shù)據(jù),一般是存儲在單個節(jié)點上,通常保存在類似 redis 這樣的緩存中。

對于分片,我們通常要考慮下列問題:

選擇合適的分區(qū)鍵(partition key)。

是否需要多個分區(qū)鍵?

跨分片查詢?nèi)绾翁幚恚?/p>

如何分片數(shù)據(jù)、分片和節(jié)點?

如何在節(jié)點上部署分片?

如何生成全局唯一 ID?

2.3 通過多實例擴展

上面提到過,MySQL 不能完全發(fā)揮現(xiàn)代硬件的性能。當擴展到超過 24 個 CPU 核心時,MySQL 的性能開始趨于平緩,不再上升。當內(nèi)存超過 128G 時也同樣如此。對于此種情況,我們可以通過多實例策略充分發(fā)揮硬件的性能。

多實例策略的基本思路是:

數(shù)據(jù)分片足夠小,可以使得在每臺機器上都能放置多個分片;

每臺服務器運行多個實例;

給每個實例劃分服務器的硬件資源;

可以看出,這是一種向上擴展和向外擴展的組合方案。這種方案還可以通過將每個 MySQL 實例綁定到特定的 CPU 核心上來優(yōu)化性能。這種優(yōu)化,主要有兩個好處:

由于 MySQL 內(nèi)部的可擴展性限制,當核心數(shù)較少時,能夠在每個核心上獲得更好的性能;

當實例在多個核心上運行線程時,由于需要在多核心上同步共享數(shù)據(jù),因而會有額外的開銷。

而我們把實例和 CPU 核心綁定后,可以減少 CPU 核心直接的切換和交互。要注意的,將進程綁定到具有相同物理套接字的核心上可以獲得最優(yōu)的效果。

3 向內(nèi)擴展

對于不斷增長的數(shù)據(jù)和負載,最簡單的方法是對不再需要的數(shù)據(jù)進行歸檔和清理。這種操作可能會帶來顯著的效果。這種做法并不能代替其他策略,但可以作為爭取時間的短期策略,也可以作為處理大數(shù)據(jù)量的長期計劃之一。

在設計歸檔和清理策略時需要考慮如下幾點:

對應用的影響。設計良好的歸檔系統(tǒng)能夠在不影響事務處理的情況下,從一個高負債的 OLTP 服務器上移除數(shù)據(jù)。

要歸檔的行??紤]清楚哪些數(shù)據(jù)可以清理或歸檔。

維護數(shù)據(jù)一致性。數(shù)據(jù)間存在聯(lián)系時,歸檔任務系統(tǒng)要能夠保證數(shù)據(jù)的邏輯一致性。

避免數(shù)據(jù)丟失。歸檔時要保證歸檔數(shù)據(jù)已經(jīng)成功保存,再講源數(shù)據(jù)刪除。

解除歸檔??紤]清楚歸檔系統(tǒng)中的解除歸檔策略??梢酝ㄟ^設置一些檢查點讓系統(tǒng)檢查是否有需要歸檔的數(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ū)。如果應用不斷有新數(shù)據(jù)盡量,一般新數(shù)據(jù)總是比舊數(shù)據(jù)更加活躍。因此,我們可以將新數(shù)據(jù)完整的保留在內(nèi)存中,同時使用復制來保證主庫失效時有一份可以的備份,而舊數(shù)據(jù)就而言放到別的地方。

總結(jié)

向上氪金,向外氪腦。三思而后行。

能不分片,就盡量不分片。

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74247.html

相關文章

  • MySQL - 擴展 2 擴展策略氪金氪腦君選

    摘要:另一個與之相反的方法是將任務分配的多臺機器上,這通常被稱為水平擴展或者向外擴展。向上擴展向上擴展也叫垂直擴展意味著購買更多性能強悍的機器??紤]清楚歸檔系統(tǒng)中的解除歸檔策略??偨Y(jié)向上氪金,向外氪腦。 如果將應用的所有數(shù)據(jù)簡單地放在一臺 MySQL 服務器實例上,就不用談什么擴展性了。但是業(yè)務能穩(wěn)定持續(xù)的增長,那么應用肯定會碰到性能瓶頸。 對于很多類型的應用而言,購買更高性能的機器能解決一...

    NikoManiac 評論0 收藏0
  • MySQL - 擴展 1 概述:人多未必力量大

    摘要:容量和可擴展性并不依賴于性能。容量是車道乘以最大安全時速。至此,關于擴展性的概念描述告一段落。但現(xiàn)實是誒,小九啊,咱們系統(tǒng)提升下性能要多久啊三天應該差不多了吧,最多不能超過一周,上次提升性能,小六一天就搞定了的。 我們應該接觸過或者聽說過數(shù)據(jù)庫的性能瓶頸問題。對于一個單機應用而言,提升數(shù)據(jù)庫性能的最快路徑就是氪金 - 買更高性能的數(shù)據(jù)庫服務器,只要錢到位,性能不是問題。 但是當系統(tǒng)性能...

    Cciradih 評論0 收藏0
  • MySQL - 擴展 1 概述:人多未必力量大

    摘要:容量和可擴展性并不依賴于性能。容量是車道乘以最大安全時速。至此,關于擴展性的概念描述告一段落。但現(xiàn)實是誒,小九啊,咱們系統(tǒng)提升下性能要多久啊三天應該差不多了吧,最多不能超過一周,上次提升性能,小六一天就搞定了的。 我們應該接觸過或者聽說過數(shù)據(jù)庫的性能瓶頸問題。對于一個單機應用而言,提升數(shù)據(jù)庫性能的最快路徑就是氪金 - 買更高性能的數(shù)據(jù)庫服務器,只要錢到位,性能不是問題。 但是當系統(tǒng)性能...

    null1145 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<