一、數據庫文件存放在NAS中,會有什么問題
性能下降100倍左右。數據庫是典型IO密集型系統,CPU都不太重要最重要的是存儲了。EMC就做存儲都能做到幾百億規模。甲骨文現在都推薦全SSD了。數據庫確實吃內存,但是更吃磁盤,一年報廢幾個也是常事。所以還必須搞磁盤陣列。即使如此,磁盤陣列全掛也不是那么少見。
不用NAS的主要原因在于兩個:
1.數據庫是延時敏感型,而NAS多數工作在以太網環境下,而TCP/IP協議決定了這個協議的數據可靠性不夠強,IO還可以亂序傳送,而數據庫是絕不可以亂序的。所以不得不等最慢的那個IO完成再做下一個。
2.除了NETAPP之外,所有的NAS幾乎都是在SAN基礎的陣列加NAS GATEWAY。那么,多了一層必然增加延時降低效率。
要用nas看中的是數據持久性,擴展性,增值服多,特別是vm場景,且單個nas的總iops和帶寬都比本地盤高,所以在負載稍大時,nas對業務層體現出來的性能更高。從單個請求看,協議上的差別開銷從來都可忽略,即使是http,協議層上如果性能有差別,一定在crc計算,安全算法,通信模型上的不同; 對于本地盤和nas開銷看,主要在因nas拉遠,有一次網絡開銷,對于db的io模型有兩類,掃表的順序大io,考驗帶寬,網絡開銷可忽略,索引處理的隨機小io,這個需考慮使用什么盤,負載來看,如一次hdd盤隨機讀10ms,一次網絡100us,影響多少可簡單估一下,另外網絡使用rdma時廷更低,且一旦負載上來后,接近本地盤能力,nas性能更好,所以在想用nas的場景,性能不是問題。但為什么推薦使用nas的少呢,的確有的存儲廠商在nas優化不夠,另外有兼容性風險,db開發時基本使用本地盤測試,相同os文件操作api,極個別api在本地盤是原子的,但nas是兩條命今,在極端場景要出問題,不是說每種db都有問題,自少postgresql要打個補丁。
延伸閱讀:
二、分布式存儲的優勢
可擴展:分布式存儲系統可以擴展到數百甚至數千個這樣的集群大小,并且系統的整體性能可以線性增長。
高可用性:在分布式文件系統中,高可用性包含兩層,一是整個文件系統的可用性,二是數據的完整和一致性
低成本:分布式存儲系統的自動容錯和自動負載平衡允許在成本較低服務器上構建分布式存儲系統。此外,線性可擴展性還能夠增加和降低服務器的成本。
彈性存儲: 可以根據業務需要靈活地增加或縮減數據存儲以及增刪存儲池中的資源,而不需要中斷系統運行。