国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

NikoManiac / 2857人閱讀

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

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

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

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

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

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

1 向上擴展

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

更容易維護和開發,顯著節約開銷;

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

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

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

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

256G RAM

32 核 CPU

PCIe flash 驅動器

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

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

2 向外擴展

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

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

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

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

一個主 - 主 復制雙機結構,擁有一個主動服務器和被動服務器。

一個主庫和多個備庫。

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

一個基于存儲區域網絡(SAN)的 “集群”。

2.1 按功能拆分

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

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

2.2 數據分片

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

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

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

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

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

是否需要多個分區鍵?

跨分片查詢如何處理?

如何分片數據、分片和節點?

如何在節點上部署分片?

如何生成全局唯一 ID?

2.3 通過多實例擴展

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

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

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

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

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

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

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

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

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

3 向內擴展

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

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

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

要歸檔的行??紤]清楚哪些數據可以清理或歸檔。

維護數據一致性。數據間存在聯系時,歸檔任務系統要能夠保證數據的邏輯一致性。

避免數據丟失。歸檔時要保證歸檔數據已經成功保存,再講源數據刪除。

解除歸檔??紤]清楚歸檔系統中的解除歸檔策略。可以通過設置一些檢查點讓系統檢查是否有需要歸檔的數據。

如果不能及時的把老數據歸檔和清理時,我們也可以通過以下隔離冷熱數據的方式來提高性能:

將表劃分為幾個部分。分割大表中的冷熱數據,保證加載到內存中的數據中,熱數據的比例;

MySQL 分區。使用MySQL 自帶的分區的功能,可以幫助我們把最近的數據留在內存中;

基于時間的數據分區。如果應用不斷有新數據盡量,一般新數據總是比舊數據更加活躍。因此,我們可以將新數據完整的保留在內存中,同時使用復制來保證主庫失效時有一份可以的備份,而舊數據就而言放到別的地方。

總結

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31308.html

相關文章

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

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

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

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

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

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

    null1145 評論0 收藏0

發表評論

0條評論

NikoManiac

|高級講師

TA的文章

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