Facebook 為什麼不用 Cassandra 了?
Cassandra和MongoDB等這些Nosql產品,無論從可擴展性、性能等方面來說是有很大的優勢,我覺得目前最大的一個問題還在於穩定性和運維能力。對於類似Cassandra這種相對比較"重型"的產品來說,越是智能化的,要想更好的駕馭它就必須花費越多的精力和需要更多的經驗。
Facebook開發Cassandra初衷是用於Inbox Search,但是後來的Message System則使用了HBase,Facebook對此給出的解釋是Cassandra的最終一致性模型不適合Message System,HBase具有更簡單的一致性模型,當然還有其他的原因。HBase更加的成熟,成功的案例也比較多等等。Twitter和Digg都曾經很高調的選用Cassandra,但是最後也都放棄了,當然Twitter還有部分項目也還在使用Cassandra,但是主要的Tweet已經不是了。國內對 Cassandra 評價基本還停留在當年 Facebook 不用的那則上,其實這兩年 Cassandra 更新很快,尤其是 2.x 系列,對比 0.x ,哦,不好對比。。差距太大了,當然現在的 Cassandra 背後也有商業公司支持,文檔啥的齊全很多,最近的 Cassandra Summit 2014 可以看到分享很多。。。
最近的新聞應該是 Instagram 遷移到Cassandra:http://planetcassandra.org/blog/interview/facebooks-instagram-making-the-switch-to-cassandra-from-redis-a-75-insta-savings/facebook如今又有項目重新用Cassandra了。http://planetcassandra.org/blog/cassandra-comes-home-facebooks-parse-choses-cassandra-for-mobile-app-development-platform/
cassandra的理念還是很先進的,用在amazon ec2上也不錯。
HBase vs Cassandra: 我們遷移系統的原因 這裡2010年就有人決定用cassandra而非hbase
Cassandra Mythology 這裡有關於cassandra的性能分析,隨著規模增加,已經超過其他的分散式存儲系統。http://www.datastax.com/wp-content/uploads/2013/02/WP-Benchmarking-Top-NoSQL-Databases.pdf 這個文檔有比較全面的測試1. 傳統資料庫早期也是有許多bug的,許多年的發展,才慢慢變得成熟穩定.nosql也已應該經歷這麼一個過程,問題是誰願意去當"小白鼠";2. 如日中天的cassandra被冷靜處理,也是一個好事吧,理論上完美還需要經受現實的考驗;
3. cassandra一直在發展,雖然出了很多事故,但也不應該把問題都歸咎於cassandra,好像facebook,twitter不用了就徹底沒戲了.
之前似乎只有twitter解釋過放棄Cassandra的原因,新浪架構師Tim Yang寫博客分析過:http://timyang.net/data/twitter-cassandra/
主要原因還是Cassandra還屬於新興產品,其穩定性及最佳實踐還比較一般。之前在淘寶實習時所在團隊有使用Cassandra,其並發讀寫效率不高。分散式存儲系統一般滿足W+R&>N,W為同時寫成功數,R為同時讀成功數,N為一份數據在集群中的份數。因此一般來說分散式存儲很難讀寫性能俱佳。而一般SNS應用對於並發讀寫的要求均較高,所以這也是Cassandra無法作為核心數據存儲的一大原因。
一般來說,解決海量數據存儲的方式是MySQL Sharding,利用MySQL成熟的運維經驗可以實現良好的穩定性,唯一問題就是擴容比較麻煩。Cassandra 剛使用確實問題多多,花了近6個月的時間搶填坑,差點要放棄了,一再堅持之下把發現的問題能解決的解決,不能解決的規避解決。上各種監控基準測試,現在終於上生產環境且已經穩定運行半年無事故了,而且擴展運維方便,大大降低了運維人員的工作量。相比於mongoDB,hbase,我現在更喜歡Cassandra。
好吧 回復下這個老帖子吧
Facebook 目前在用Cassandra,另外就是Cassandra 2.0+ 穩定性和維護性都比以前好多了,且使用上由於hbase so。。。。 要發展的看!我們的集群節點也提供了Cassandra存儲支撐!我們在1.0的時候調研測試過,發現性能等都堪憂,然後放棄了,一次沙龍跟一個娃辯論了下,發現對方似乎說的有道理,然後回去看了下發現2.0了測試了下發現以前的問題正在逐步解決,so又開始支持了。
前面的朋友已經說得很清楚了。facebook自己的解釋是HBase更適合。
我們的觀察和測試的結果,cassandra目前性能上和穩定性上還達不到產品級的要求。
最開始考慮用cassandra,是因為理論上它能很好的為我們解決可擴展性和運維上的問題。但是當實際需求來臨的時候,就不得不考慮單台伺服器的性能輸出效率。很明顯對於規模不大的集群特別是初創公司的伺服器規模來說,還根本沒有到需要用cassandra來解決規模化運營的問題的時候。而現在僅就論壇里看,cassandra還存在各種各樣的bug或是GC導致的性能急劇下降之類的問題。在此規模下性能比cassandra好的可選替代方案就很多了。
至於cassandra為什麼到現在還不成熟?我覺得主要是其野心太大:dynamo式的一致性分布模型+bigtable式的數據存儲。導致從分散式策略到存儲引擎,各種層次上需要面對的問題太多了。某大互聯網公司使用Cassandra,超過100台伺服器,出現很多問題。
技術問答需要保持與時俱進,FB11年棄用Cassandra並不代表現在。百萬用戶時尚分享網站feed系統擴展實踐-CSDN.NET引用下 @Tim Yang 13年的一篇博文終結掉這個提問吧
我也來個利益相關
為什麼會說「不用了」?曾經在主要系統種使用過嗎?是因為政治原因,不是技術原因。
我們之前測試 Cassandra的一致性採用p2p方式實現,結構過於複雜,導致不穩定,缺乏互聯網基因,簡單的產品才能廣泛應用
推薦閱讀: