談談SQL Server高可用的常見問題
每次談到SQL Server的高可用,很多的DBA,特別是SQL Server DBA心裡一痛:因為大家都認為SQL Server無法或者很難實現SQL Server。也有很多的DBA朋友腦袋一拍,給出答案“高可用不就是微軟的那幾個技術嗎,如Replication, Failover Clustering”…
1.難道SQL Server在高可用上面就顯得這麼的無力嗎?
回答:不是的,其實SQL Server很給力。
2.為什麼很多人總是抱怨SQL Server中高可用很難實現呢?
這裡從幾個方面來說。
首先,就所接觸到的很多的項目(歐美居多),這些項目中不乏所謂的海量資料,也有很多的高效能應用,後面採用的都是SQL Server,而且還沒有採用第三方的資料庫輔助軟體。
其次,我們說說人的問題。人都有這樣一個習慣:每次出現問題之後,第一反應就是逃避,然後找個好的理由或者替罪羊,最後搞來搞去,就開始怪技術本身不行。這就有點類似,菜鳥用寶刀的時候,殺不死人,不貴本身的能力不行,而是怪刀不好。說到這裡,就想到之前的CSDN密碼泄露問題,很多人居然大罵微軟的技術不行,這讓那些已經用微軟技術實現高安全的應用的公司看笑話。
再次,以偏概全的概念!很多人以為Replication就是高可用了,於是就一股腦的指望Replication可以解決他們的問題,殊不知:Replication只是實現高可用中的一個重要的組件而已,而不是全部。說到這裡,是我想起幾個類似誤解,“以為JQuery就是ajax技術”,殊不知,jquery只是一個架構,可以用來實現ajax而已。有人認為“架構設計就是設計模式和架構模式的使用”,其實架構設計就是一種思維,而那些模式僅僅只是一個小的手段而已,把架構設計比喻為一個大樓,那些模式充其量就是一些磚頭,而不是全部。
同理,Replication也僅僅只是實現高可用中的“一塊磚”。
最後,對於技術的掌握程度不夠,導致很多人遇到問題時候無法解決。而且也不知道找誰解決,去哪裡找等。
3.高可用是用一個軟體或者產品就搞定的嗎?
這裡很多人想到的就是Oracle的RAC,還有一些第三方的產品。不同的產品,封裝的程度不一樣,有的產品把很多的東西都封裝了,只需使用人員學習如何使用工具就OK,不用掌握細節。但是,使用這些產品的時候,在進行部署和操作的時候,實際上就是在按照產品設計人的思想在搭建高可用而已,只是我們認為這個過程是“使用手冊”而已。
而SQL Server本身沒有提供這樣的完全封裝的產品,但是高可用設計中需要的重要核心技術和組件都已經有了,“釘子,螺絲,材料”都有了,就看你如何組裝起來。
同樣的做菜材料和工具,高明的廚師做出來的是美味佳肴,而一般的廚師僅僅只是把菜搞熟而已。
4.高可用僅僅只是資料庫技術嗎?
實現高可用,不僅僅只是資料庫層面上面的內容,其實更多需要的是設計和架構能力。需要知道,軟體,硬體,作業系統,網路,資料庫等技術。
而且高可用也不是一個具體的技術,而是概念,實現的方法就是千千萬。有人說“高可用就是讀寫分離”,“高可用就是負載平衡”,對嗎?用腳趾頭都可以回答這些問題。
5.沒有萬能的產品和萬能的方案,一切都是“看情況而定”。
很多人在爭論“無共用磁碟(資料庫)”好,“水平分割”好。這些說的直白一點:單獨的討論,沒有任何的意義。不把技術用在具體的應用中,不帶來經濟價值,技術什麼都不是。
產品,技術等本身都是有一定的使用範圍和局限性的,很多社區的朋友在討論的時候,總是喜歡一個萬能的產品特性,例如,有人說“SQL Server 2012的AlwaysOn”可以實現高可用了。殊不知:技術是人在使用,產品只是我們人在設計中使用的一個零件而已,最後的設計還是看人。早在十多年前,就有很多的公司的大型應用就是採用SQL 2000做的,那時候,SQL Server還沒有這麼多的功能和組件。
【免費試讀】可擴充SQL Server架構設計與實戰系列(1)
【免費試讀】可擴充SQL Server架構設計與實戰系列(2)-為什麼要擴充資料庫
OK,讓我們重新正視高可用,看問題全面一點!