為什么Twitter不使用Cassandra存儲Tweets(譯)
當前討論的中心是Cassandra作為NoSQL的主要產品已經被剝去了華麗的衣裳。首先是Twitter已經放棄了Cassandra,并且據說作為Cassandra誕生的地方,Facebook也已經放棄了Cassandra。NoSQL已經失敗了這種論調已經充斥在了各大社區上,Cassandra已經失敗了么?發展遇到阻礙是有的,但是沒有失敗。
(注:本文包含一個NSFW的流程圖,有些人對壞話非常敏感,如果你是這樣的人,請不要繼續讀下去了危險!這里沒有裸體圖,也沒有其他任何東西,只有一些言辭激烈的言語。但是這些都是我一直以來最感興趣的流程圖,所以他值得!)
Twitter真的放棄Cassandra了么?根據Twitter流出的這個帖子:Cassandra at Twitter Today解釋,他們使用Cassandra用于存儲地理信息和分析。但是,Twitter將不會使用Cassandra存儲Tweets。為什么?Twitter解釋說:“這是一次戰略上的變化。我們將繼續維護我們原本基于Mysql的存儲。我們相信,現在還沒有到大規模遷移數據到一個新技術的時候。”
Twitter現在忙于各種其他的緊急事件,而沒有時間去把他們原本存儲在Mysql的數據遷移到Cassandra。
現在是最佳的時機向大家分享一個流程圖的時候,這個流程圖是我若干年前得到的。這也許很像Twitter做出決定之前的思考過程。
Flow Chart for Project Decision Making
我每次讀這個都會笑。這是事實,每個公司都會遇到如何放置資源的決定。你需要構建,購買,重新構建,擴展,掛起你的應用。一個工程師可能會覺得重新開始是正確的。但是最好的商業決定可能完全不同。
Joel Spolsky曾經發表過聲明說,你永遠都不要從頭開始重寫你的代碼。還記得Netscape么?還有那么多曾經在互聯網上,但是已經消失了的公司。因為他們做了這個最關鍵的抉擇性錯誤,他們從頭開始重寫代碼。
Twitter不想重蹈覆轍。這就意味著Cassandra和NoSQL的失敗么?不!我認為這只是一個高明的項目計劃。這實際上已經為不同的情況提供了多種平臺。
Twitter已經運行的足夠好了么?Brad McCarty在Twitter implements more features; ignores its broken platform中舉出了很好的例子:Twitter在遷移之前應該首先架設好自己的基礎設備。但是現在的問題是,Twitter有設備,但是沒有核心的Tweets的引擎。直到現在,Twitter的運行狀況還非常良好。因此,根據這種情況,保持Tweets的引擎繼續工作,盡管他非常丑陋,然后開始把一些新的瑣碎的功能遷移上去,是不是更合理呢?
這些都是無法避免的。Cassandra曾經一直都活在Facebook和早期嘗試者的呵護之下。直到最近Cassandra離開家進入到這個復雜的世界,這里的用戶有著各種各樣非常廣泛的需求。這將促使Cassandra的成熟,Cassandra需要設計需要增加的新功能,需要為已經存在的功能重新建立架構,需要告訴人們Cassandra究竟擅長做什么。這些直到現在才成為了問題。并且,對于開發者來說,選擇切換到一個新的技術平臺上來則意味著,他們需要學習,再學習,然后克服種種障礙。這個過程是困難的。所以我們需要考慮到關于Cassandra的問題和周圍的一些產品。這就是切換到新技術上的問題,我們就像是這個空間里的一個小白鼠。
Facebook真的放棄Cassandra了么?沒有!Facebook仍然有150臺Cassandra云節點用于搜索,這個支撐著5億的用戶,150TB的數據,而且這些數字每天都在增長。現在,看一看Cassandra普及在其他項目或者小組的速度會是非常有趣的。什么時候會出現一門實現了Cassandra的技術?他是否會繼續發展?我們都不知道,但是我們可以知道的是Facebook在未來仍然將繼續使用Cassandra。