活動精彩實錄 | Cassandra與職業發展
點擊此處觀看完整活動錄像?
大家好,我叫鄧為,我目前在DataStax擔任領航架構師,我在DataStax作業了7年多的時間,也有7年多的Cassandra經驗,我在大資料和資料庫領域的經驗則有大約十多年的時間,很高興今天能夠邀請大家到我們的活動中,來聽聽我們的嘉賓們與職場相關的經驗和感悟,
?
我們今天的嘉賓來自三個不同的公司,他們都是在Cassandra資料庫方面有很多年經驗的專家,
?
首先是阿里云高級技術專家欒小凡,14年第一次接觸Cassandra,追隨Cassandra的作者Avinash創業,構建了軟體定義存盤產品hedvig,16年加入阿里,從事Ali HBase和阿里自研云原生資料庫lindorm的開發作業,20年開始回歸Cassandra,負責阿里云Cassandra的開發作業,
?
接著是蔚來汽車資深軟體開發工程師張旭東,目前在蔚來汽車從事資料平臺、資料倉庫相關研發作業,17年開始接觸Cassandra,對于Cassandra的使用有較深的理解,將Cassandra成功運用于多個公司專案中,
?
最后一位是網龍公司軟體開發工程師闕乃禎,近6年來在網龍參與im即時通訊,推送服務,iot的設計開發,這些專案對cassandra有重度依賴,期間同時負責基礎服務平臺cassandra的運維、監控、開發指導作業,
?
非常感謝嘉賓們能抽出寶貴的周末時間與大家分享經驗,
?
---
?
Q:能否簡單介紹自己的背景以及你是如何開啟Cassandra之路的?
?
欒小凡
?
大家好,目前我在阿里云做資料庫研發,我接觸Cassandra比較早,屬于機緣巧合,在接觸Cassandra之前,我在Oracle作業,主要負責資料庫硬體加速方面的內容,那時候我對分布式系統并不是特別了解,
?
后來在學習像Cassandra這樣的分布式系統之后,我就對分布式系統產生了興趣,正好那時想要創業,而且認識了Cassandra的作者Avinash,與他聊過之后,發現他對資料庫和存盤產品的見解比較深入,所以我決定加入他的團隊,在這個團隊中,我主要是基于Cassandra做了一個分布式的存盤系統Hedvig,這個存盤系統后來成為了很多銀行的資料備份方案,
?
基本上就是借這么一個機會,我開始了解Cassandra,從做Cassandra開始,我最開始的定位主要還是做資料庫的研發,當時也給社區貢獻了一些bug fix,后來2016年回國后,我逐漸開始兼顧研發和運維兩個方面的職責,尤其是最近一年做了更多運維作業,比如幫用戶設計他們自己的系統,
?
在這個程序中,我對Cassandra也有了更深的理解以及它周邊的生態,比如用戶現在比較關注的可能是Spark、ES,以及它們與Cassandra的結合方式,早期的我雖然對Cassandra有所理解,但是對它的周邊理解不多,后來在學習的程序中,我也看了很多DataStax的文章,這些文章為用戶提供了很多方便,有很多東西是我之前在社區都沒有關注到的,
?
在我現在作業中,Cassandra占到了50%-60%,主要是在研發和運維方面,
?
張旭東
?
大家好,我叫張旭東,目前在蔚來汽車北京的軟體部門從事資料倉庫相關的作業,我大概15-16年還在獵豹移動做廣告和新聞推薦的時候,團隊里就已經在用Cassandra存一些新聞推薦相關的文章、customer profile相關的資料,這也給了我一個了解Cassandra的貧訓,
?
三年前來到蔚來汽車,發現軟體部門已經在多個業務線使用Cassandra了,也是從那時開始,我不僅從理論上更是從實戰上了解Cassandra的原理和使用,
?
為什么當初公司沒有選擇像是MySQL那樣知名的資料庫,而是選擇了Cassandra呢?據我了解,主要是有這么幾個原因:
?
- 公司需要一個NoSQL資料庫來存盤大量資料,在NoSQL資料庫中,通過一些技術檔案和benchmark了解到,相較于HBase來說Cassandra的性能要更好一些,
- Cassandra從2.0版本開始提供CQL這種查詢語言,它的表達能力相對HBase來說更強一些,
- 公司那時也有意愿探索新的技術,那時團隊中的一些人在雅虎作業時一直在用HBase,后來他們看到了Cassandra,也想要去了解一下它的原理和使用,
?
現在我們是跟隨Cassandra線上的開源版本對其進行使用和維護,集群也都用的是最新版本的Cassandra 3.11.8,我們存盤最多的是與車聯網相關的資料,目前我們的資料總量達到了千億級別,將近百T,目前公司用的是在AWS EC2上自行搭建的Cassandra集群,未來可能也會考慮使用AWS上的Cassandra云服務,把集群托管出去,
?
闕乃禎
?
大家好,我是闕乃禎,我來自網龍公司,我從2014年開始接觸Cassandra,
?
當時我們成立了一個新的子公司,主要專注于教育相關的業務,比如網校通、資訊推送、教育IoT一類的業務,因為我之前有HBase的經驗,團隊里有NoSQL相關經驗的人又比較少,所以我當時就開始負責這一塊的作業,
?
當時我們可能也是比較激進,大概兩三個月就把Cassandra搬上了生產環境,因為我之前也沒有Cassandra的經驗,那時候就用了兩三個月閱讀了社區檔案,還跑了demo做練習,這些做完后,我們就開始小規模地上線,把Cassandra放入生產環境,由于我們比較激進,其實剛開始的階段踩了不少坑,這個踩坑的程序持續了一兩年,等集群開始穩定下來,業務規模也慢慢上來了,
?
在這之后,我就比較側重于業務方面的開發,比如IM即時通訊、Push IoT,一直持續到現在,目前主要用Cassandra的業務資料量都比較大,用戶也比較多,但是沒有人專職負責,所以如果生產或者集群出現問題,我都是兼職幫忙解決一下,包括運維和技術指導,
?
---
?
Q:你們現在作業中的技術堆疊里會用到的和Cassandra相結合的技術都有哪些呢?
?
欒小凡
?
因為我們本身提供托管服務,跟其他兩位嘉賓相比,我們的業務可能會更雜一些,
?
整體來講,我覺得Cassandra更適用于兩種場景,一是大資料相關的場景,比如和Spark做一些結合進行離/在線的分析+實時,二是仰賴于Cassandra zero downtime(零宕機時間)的特性,因為它的QUORUM的讀寫模型導致它的穩定性和可用性相比傳統的HBase或MySQL來講更高,所以我們也發現有很多用戶用Cassandra做線上訪問,比如最早Facebook將Cassandra應用于Inbox(郵箱的收件箱)這樣的場景,或者可以用于IM(即時通訊)或訊息推送的場景,
?
在這種場景下,我們發現除了Cassandra的二級索引可以提供非常好的讀的檢索能力以外,用戶還有一些額外的需求,比如用戶希望把資料和ES結合在一起,也就是同樣的資料會在寬表里放一份,在ES或者Solr里面再放一份,這樣就可以實作一些功能,比如對IM的關鍵詞做分詞檢索,這些方面我們能夠看到用戶是有比較大的需求的,
?
Cassandra還有一個很強大的能力,就是它可以作為MySQL的歷史庫,當MySQL的資料放不下時,用戶可能會尋求一些NoSQL的解決方案,但NoSQL的查詢能力相比MySQL可能略弱一些,總的來說,Cassandra+Solr/ES其實是一個非常好的解決方案,
?
除此之外,我們也在探索Cassandra能不能跟一些底層的檔案系統做一些結合,比如我們把Cassandra的實時資料通過一些服務的方式生成像是Parquet或ORC格式的檔案,然后交給Spark或Hive做一些分析,由此形成一個離/在線的場景,這也是我們看到用戶確實是在這樣做的,
?
張旭東
?
我們這邊的技術堆疊比較相似,我分成兩個方面介紹吧,
?
我們主要有兩撥人在使用Cassandra,一是后端在線服務,主要用Cassandra來存APP的資料,對于車聯網來說,我們會以車輛ID或車輛電池ID為主鍵,然后做一些查詢方式比較固定的點查詢,對于一些非固定的查詢,我們會和MySQL結合使用,另外如果要全文檢索的話,我們需要和ES結合使用,
?
*由于通信質量不佳而中斷
?
闕乃禎
?
其實技術堆疊都是很通用的,我想說的其實前面都已經提到了,像是IM、IoT、收件箱、訊息記錄這樣的資料,我們都用Cassandra來存盤,像是IM這樣比較敏感的資料或是資訊流的過濾,我們需要做一些風控審計,所以我們需要做檢索或事后分析,
?
我們會用Spark、Storm或者Flink做一些實時的流控、敏感詞過濾以及惡劣行為的監測,總之就是會清洗一遍資訊流,關于事后的檢索,我們會用Kafka將資料同步到一個ES集群,實作像是聊天記錄檢索這樣的功能,
?
另外我們會把Ceph上面的檔案的二級索引一類的資訊同步到我們的Cassandra集群中,也就是將Cassandra和Ceph這樣的塊存盤一起結合使用,
?
鄧為
?
欒小凡老師剛剛說的內容很有意思,包括怎么把Cassandra的資料以Parquet或者ORC的形式放到分布式的檔案系統上面,這其實也是DataStax在研究和發展的東西,我們將來也會有一些相關的開源的貢獻,Cassandra是用來處理實時的熱資料的,怎么把這些熱資料盡快地導成冷資料,以一種高效的方式長期存盤,讓其他人有一個分析的平臺——相信社區很多同學會對這方面感興趣,我們以后可以多多交流,
?
根據我為很多財富100強公司咨詢的經驗來看,現在很多大資料處理的框架和引擎都非常相像,比如Kafka、用于流處理的Spark Streaming、Flink、用于搜索的Elastic Search或是Solr,包括我們DataStax Enterprise(企業版Cassandra)也是以Cassandra為核心,又集成了Spark和Solr,也就是說如果你用DataStax Enterprise的話,你就可以直接在Cassandra資料庫里進行搜索,如果你要做分析處理的話,也可以直接使用我們的DSE Spark release,
?
總的來說,確實有很多東西是相通的,不過最近我看到“云原生”這個概念非常火,所以現在整個Cassandra社區(不光是中國社區,包括美國、歐洲、澳洲等)中有很多公司都在考慮怎么把Cassandra搬到Kubernetes環境里,因為Cassandra本身很容易做到靈活伸縮、在線擴展以及多云支持,所以Cassandra和Kubernetes這種環境其實非常相匹配,
?
在這方面,DataStax為開源社區做了很多貢獻,昨天在大型全球會議KubeCon上,DataStax發行了一個新的Cassandra版本,叫做K8ssandra,也就是說我們現在正式有了一個在Kubernetes環境下使用的Cassandra發行版本,這個版本可以被用于生產環境,不僅如此,K8ssandra還自動管理了包括repair在內的很多運維作業,
?
---
?
Q:如果作為初學者,面對眾多資料庫的選擇,為什么要花費時間精力學習Cassandra?
?
欒小凡
?
我主要從兩個角度來談這個問題,
?
第一,Cassandra本身是一個非常實用的資料庫,而且它已經被非常多的大型跨國公司在使用,包括像是Apple和Netflix,所以說Cassandra是經過了長時間生產考驗的資料庫,
?
在公司選型的時候,通常大家都會選擇一個關系型資料庫(relational database),比如像是MySQL,但一旦你的資料增多,你必然要考慮如何將更多的資料存在一個實時的資料庫中并獲得比較好的查詢性能,在這種場景下,Cassandra其實是你非常好的選擇,
?
如果你能學習這樣一個堆疊,未來能匹配到的公司數量也會相對較多,目前國內使用Cassandra可能還不如國際上普遍,但總體還是處于快速增長的狀態,我相信未來會有更多的國內公司開始使用Cassandra,
?
第二,如果你是一個學生或是剛剛開始作業,可能你對分布式系統并不是特別了解,Cassandra其實是在去中心化設計下一個非常好的范例,
?
最早的去中心化系統(比如Dynamo)大都不是開源的,一般人很難獲取豐富的學習資料,對于分布式系統來說,要么就是主從結構(master/slave)要么就是去中心化的架構,兩者分別的代表其實就是HBase和Cassandra,如果你能把這兩個系統搞清楚,這對你未來設計分布式系統是非常有好處的,
?
學習Cassandra,你可以從DataStax的檔案中學習了解這個系統的設計和使用,并且可以自己搭一個Demo,我最開始學習Cassandra就是通過這種方式,會自己構造一些小的業務場景,然后在AWS或阿里云上買一個服務,之后再用這個服務去跑自己的Demo以便了解Cassandra的設計和使用,我覺得這對大家了解分布式系統和Java這門語言都會很有幫助,
?
張旭東
?
欒老師剛才提到的也正是我想說的,對于初學者來說,Cassandra能夠加深你對資料庫和分布式系統的理解,以及并幫助你理解Bigtable和Dynamodb這兩篇論文的細節是如何實作的,
?
如果你想要鉆研,你可以看Cassandra在單機上是怎么實作LSM的,這是很多分布式資料庫都采用的一個結構,簡單說,就是把熱資料寫到memtable,然后資料會定期被flush到sstable,這個結構在很多OLAP和OLTP引擎中都有用到,非常常見,
?
了解Cassandra之后,你可以以Cassandra為跳板,進一步了解更多其他流行的分布式資料庫的底層實作,也就是可以舉一反三,這對你之后學習其它的資料庫都會很有益處,
?
闕乃禎
?
前面兩位老師講得很好,我再補充一點,Cassandra上手很快,像是DataStax Getting Started的demo,隨便調一調可能只要1-2個小時,而Cassandra從集群搭建起來到庫表的增刪改查陳述句都能跑通,這個程序非常快,這會讓你很快就有成就感,
?
另外Cassandra的運維相較HBase一類的資料庫來說比較簡單,對于初創公司來說,如果沒有充足的運維人員,開發人員就得又當爹又當媽,可能用Cassandra就比較合適,公司也能節約一些成本,
?
第三點就是國內的招聘網站上可以看到越來越多崗位的招聘需求會提到有Cassandra一類的資料庫的使用經驗,我相信如果你有這方面的經驗,這會對你找作業有一定的幫助,
?
鄧為
?
我有一些粗淺的想法,想要做一些補充,一方面,Cassandra作為一個流行的資料庫,如果你的作業中本來就要用到,那么你當然有理由去學習和精通,但是最重要的,就像欒老師說的,Cassandra其實是把分布式系統中比較重要的理論和比較精華的演算法都做了工程上的實作,
?
另外Cassandra這種無主(masterless)架構在傳統的資料庫中其實是很難實作的,Cassandra不僅能夠實作這種架構,還能在實際生產環境中被很多大公司采用并應用于很多核心業務,摸爬滾打十多年的時間,這充分證明了這些分布式系統理論和演算法的實用性,
?
如果你把Cassandra吃透,你再去看很多其他的分布式系統,包括最新的資料庫和分布式系統,你會覺得很多常用概念其實是一通百通,所以即使你是個學生,只是抱著學習的目的來了解Cassandra,以后你再學習其他的高并發、低延遲、大資料量的分布式資料存盤平臺,你就會有一個很好的基礎,
?
另外Cassandra這個技術本身也在與時俱進,比如針對Kubernetes,現在社區就有很多新的動作,想把Cassandra打造成云原生、混合云和跨云環境下的大規模資料的分布式資料庫的默認選項,因為社區非常活躍,緊跟各種新技術的發展,這個技術就能一直保持活力,不容易過時,所以你現在投入的時間在五年后、十年后還是會有助于你的作業和事業,
?
---
?
Q:你們在系統學習Cassandra時會用到什么樣的資源?如果作業中碰到問題,你們去哪里尋找答案呢?
?
欒小凡
?
一般我的學習渠道主要是兩個,
?
因為我是做研發的,所以我會看社區和DataStax的檔案和jira issues,以便了解最近社區在做的功能、修補的bug以及準備release的東西,我也會去看大家的討論,可以從社區大牛的討論中汲取經驗、獲取靈感,
?
第二個部分我會從原始碼入手,比如當我在日常運維中發現問題或有不理解的地方,我可能會直接切入原始碼,Cassandra的原始碼是開源且相對規范的,所以在看原始碼的程序中,我不僅對Cassandra有更深的理解,也學習到大家使用Java這門語言的小技巧,
?
至于我們剛才提到的certification,我覺得還是很有必要的,尤其是在你剛剛進入這個行業的時候,針對證書考試的學習能夠幫助你快速成長,并且可以增加大家對你的認可度,
?
比如我們招聘的時候,有時候還是比較難判斷候選者對于Cassandra的了解程度,或者我們招聘DBA時會想要知道他有哪些技能,像是Oracle也會比較看重相關的證書,因為它是一個比較復雜的系統,有很多可以調優的地方,Cassandra其實也是一樣的,如果你能有一個證書,我們會認為你會Cassandra的運維有一定程度的了解,那我們也會對你優先考慮,
?
張旭東
?
我這邊主要是兩個學習渠道,一是因為公司已經在大規模使用Cassandra,而我作為一個使用者,我會看公司同事寫的Cassandra周邊工具和API,二是Cassandra官方檔案,有些東西不能想當然,我們得看檔案里對于每個特性的最佳實踐是什么,包括像是執行緒數、key怎么存盤、key的大小等,這些還是需要細扣檔案,
?
如果想要系統性學習,我當初看了《Cassandra權威指南》的第二版,這個版本跟Cassandra 3.0有些差距,但是大部分原理還是通用的,所以還是有些幫助的,(《Cassandra權威指南》第三版針對Cassandra 3.x和4.0,關注DataStax微信公眾號并在后臺回復【CDC3】即可下載電子版,)
?
另外關于Cassandra Certification,Dev和Admin兩種我都考了,因為我是先使用了Cassandra幾年,最近才考的這個證書,我感覺Certification里的這些考題和我日常使用Cassandra時需要注意的關鍵點是非常契合的,另外我還和我們team的Cassandra DBA也溝通了一下,問了他們做的事情和遇到的問題,他們的回答和我在Cassandra Certification for Amin這個考試中遇到的題目很相關的,
?
所以建議大家有時間還是要看一下這個證書考試,至少可以看看DataStax的相關課程,這些都是很有用的,
?
闕乃禎
?
我跟大家差不多,主要是看官方的檔案以及大牛的技術博客,學習程序中,還是要多看多實踐,光看不練肯定是沒用的,一般來說,我們都會針對學習的東西或者作業中遇到的問題搭建集群,做一些建模或是壓力測驗,通過比較多地進行實踐,我們希望盡量把問題統統暴露出來,然后再通過社區或是博客尋找答案,
?
如果遇到一些比較難的問題,我可能就直接找鄧為老師了(笑),還有像是阿里云的郭超,你們都是比較熱情的,在群里面提問題基本上都會很快得到你們的解答,效率特別高,
?
---
?
Q:SAI是否會對Cassandra將來的使用帶來比較大的變化?
?
(SAI功能現已在DataStax Enterprise和DataStax Astra中上線,點擊此處詳細了解SAI,)
?
欒小凡
?
因為SAI還沒有完全進入社區,所以目前我們還沒將這個功能投入生產使用,但是我們已經看了檔案,對這個功能還是非常期待的,SAI的功能還是很強大的,而且像是我們LSM樹這種模型的寫性能雖然比較好,但是我們所說的local index或是其他index方案都涉及到“寫前讀”的問題,SAI應該能夠比較好的解決這個問題,所以我對它的期待是至少它會較大地提高寫性能,
?
在讀的方面,SAI的功能也是比較強大的,之前我們需要依賴ES或是外部檢索所做的事情,可能我們就可以比較容易地在Cassandra里面直接完成了,所以我對SAI的期待是能夠解決一部分不涉及分詞的搜索場景,我們一直在密切關注社區的相關動態,等這個功能正式release,我們也期待我們的用戶能盡快地用上,
?
張旭東
?
我們這邊也很期待SAI,正好前兩天我們的Cassandra DBA報了一個問題,有人在使用二級索引(老版本的SASI索引)時遇到了問題,最后也沒用成二級索引,包括這幾年有一些場景我們想用二級索引,但是因為看了官方檔案中提到的限制,所以比較遺憾一直都沒有用起來,總的來說我也是非常期待SAI這個功能,希望它可以早日在社區正式release,
?
---
?
Q:Cassandra和ES的結合是否常見?
?
欒小凡
?
目前我確實看到這方面的需求,比較常見的是在圈人或營銷的場景下,可能會選擇用ES篩選出一部分人群,然后再用Cassandra回查,拿到他們的具體資訊,
?
第二種常見場景就是消費記錄和聊天一類的場景,這些場景的查詢維度相對較多,尤其在消費記錄那種特別寬的表里面會有非常多的欄位,用戶可能會選擇某幾個欄位進行查詢,這種不太確定Schema的查詢對Cassandra本身local index的方案并不是特別友好,當然我們前面聊到的SAI不知道是否能解決這個問題,但目前的話就是把資料在ES里放一份,方便用戶進行查詢,
?
張旭東
?
我們這邊主要利用ES的前端檢索功能,比如我們蔚來的APP有一些搜索的場景會需要中文詞的分詞,ES的查詢出結果后,為了性能,我們還會到Cassandra里回查,總的來說就是應用在中文檢索的場景下,
?
闕乃禎
?
我們也會用到ES的情況還是挺多的,比如IoT場景對設備資訊的檢索,還有一些指令資訊和歷史記錄檢索的場景,我們會把原資料放在Cassandra中,但是索引會放到ES上面,
?
---
?
Q:在多DC橫跨多地的情況下,你們如何實作備份恢復?
?
欒小凡
?
我們確實有關注到用戶這方面的需求,Cassandra本身存盤的可能是比較關鍵的資料,雖然snapshot是一個不錯的功能,但是有時候用戶需要的其實是物理備份,
?
這種情況下,我們推出了一個我們自己的解決方案,叫BDS,它可以把Cassandra的sstable托管到我們的一些物件存盤上面去,比如AWS的S3或阿里云的OSS這樣的系統,從而實作硬備份,在這個基礎上,我們也在跟社區貢獻一個叫sidecar的解決方案,本質上可以將其理解為Cassandra的CDC(change data capture,資料改變捕捉),
?
我們傳統的拖檔案的方案可能會存在一定的時效性(的問題),比如在記憶體或commitlog里面的資料其實是沒辦法快速回放的,如果這時候做恢復的話,可能會存在幾分鐘的gap,如果集群本身掛了的話,有些資料可能就丟掉了,所以如果我們有了CDC的sidecar,我們就有了一個毫秒級的方案,如果大家沒有我們的服務,也可以拉一個CDC的sidecar的組件,然后通過Spark和Kafka實作這種備份方案,實作Cassandra的秒級恢復,
?
張旭東
?
我們的備份方案一般通過一些大資料組件,比如研發集群上我們會用全量備份,DBA方面我們還在探索中,比如多DC同步,我們想把AWS的資料同步到騰訊云時也遇到一些問題,尤其是那種遷移資料,
?
闕乃禎
?
我們會把重要的資料通過Kafka同步到ES集群或其他集群中去,其他的資料就用快照(snapshot)的形式備份,像是一些海外對資料本土化要求比較高的,我們會把所有的資料同步到我們的Ceph集群,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/229773.html
標籤:NoSQL
上一篇:力扣資料庫題目627變更性別
