閱讀677 返回首頁    go 阿裏雲 go 技術社區[雲棲]


MongoDB World 2017 參會全記錄

作者簡介

張友東,阿裏雲數據庫技術專家,Mongoing中文社區聯合發起人,主要關注分布式存儲、NoSQL數據庫等技術領域,目前主要從事MongoDB雲數據庫的研發工作,致力於讓開發者用上最好的MongoDB雲服務,本次給大家分享上周(6.19-6.21)在芝加哥參加 MongoDB Wolrd 2017 的一些收獲。

基於飛天分布式係統和高性能存儲,提供三節點副本集的高可用架構,容災切換,故障遷移完全透明化。並提供專業的數據庫在線擴容、備份回滾、性能優化等解決方案。

去年的會議場景還曆曆在目,MongoDB World 2016參會全記錄 ,感歎時光飛逝。

會議安排

Pre conference 6.19

  • Advacacy summit, Pattern summmit, Workshop(SQL opt, security, ops manager, data modeling)

會議的前一天也有不少的議題,基本都是邀請製的,包括開發者峰會、合作夥伴峰會、以及一係列的收費workshop。

Conference 6.20 - 6.21

  • Keynotes (09:00 - 10:50, 17:00 - 18:30)
  • Session (MongoDB production intro, MongoDB internal, user case)

會議2天的安排主要分為keynotes 和 session,keynotes 是所有的參會者(1000+)聚在一塊,主要內容是MongoDB公司的產品發布,產品新特性介紹,以及合作夥伴的主題演講; Session 部分內容很豐富,每個 Session 約40分鍾,每個時間段都有多個不同主題的 Session 可選,內容包括 MongoDB 產品,MongoDB 內部機製,用戶使用案列等。

Just for fun

  • After party: 第一天會議結束有一個after party 的活動,把參會者拉到一個類似酒吧的地方,聽音樂、吃東西、聊天 ...
  • Fun run: 第二天的早上有一個晨跑的活動,
  • Taste beer:會議結束後,會提供各種類型的啤酒供大家品嚐,參會者喝酒聊天,很有意思,可惜我對啤酒完全不感興趣。

如此豐富多彩的活動,我隻能說老外真會玩。難得出遠門一趟,加上好奇心比較重,上麵所有的活動我去都參加了,今年跑步帶了裝備,3 miles 妥妥的。

App

跟去年一樣,今年大會也開發一款 APP,方便大家在手機上安排會議內容,並可以對speaker做點評以及提問,還能方便的認識其他的參會者,就是一個簡單版本的朋友圈。

2017_06_20_203942

After party 活動現場

DC4UReTXcAEnTDX

Taste beer 活動現場

Advocacy summit

通過 TJ 的介紹,聯係到負責 Advocacy summit 的同學,參加了本次的 advocacy summit 活動,主要是 MongoDB 社區比較活躍的一些開發者聚在一塊,聽 MongoDB 的CXO 們聊未來的一些技術方向,針對一些 topic 進行技術討論,一共50人左右,圓桌的形式,一整天吃飯、討論都在這個房間了,收獲很大。(注:被右後方大胖哥擋住的人就是我,[捂臉])

DCsJ4IjW0AAgf_I

Atlas

MognoDB 公司在去年 MongoDB world 的時候發布來 DBaas 服務 Atlas,能基於 AWS 來構建 MongoDB 雲服務,Atlas 經過一年的發展,多了許多新特性,同時還有很多特性正在開發中,非常值得期待。

Atlas feature

  • Live migration,在線遷移,可以將你原來的實例數據無縫的遷移到 Atlas
  • Queryable backups, 備份集支持直接查詢,這樣當隻需要部分數據時,可以直接到備份集裏查詢出來,而不用恢複整個數據集
  • 支持AWS、Azure、GCP,這個特性比較給力,基本上國外主要的雲平台都支持上了,不論你在哪個雲上,都可以方便的使用 Atlas 的服務。

Atlas future

  • Perfromance advisor 支持智能的性能分析及建議
  • M2 大規格實例的支持
  • Full CRUD in data explore 能在atlas控製上直接操作數據,執行命令等,數據庫管理員的福音
  • Hosted BI connector BI分析進一步加強
  • MongoDB charts integration 整合 MongoDB chart,方便的根據數據出圖形報表
  • Cross Cloud 未來 Atlas 能跨多個雲服務商部署,可能一個複製集,Priamry 在 AWS 上,Secondary 在 Azure 上
  • LDAP authentication、KMIP integration 安全方麵的加強

另外今年也發布了新的產品 MongoDB stitch,能更方便的基於 MongoDB 構建應用,MongoDB stitch 目前隻能在 Atlas 上使用。

Storage

Wiredtiger 團隊的負責任介紹了 MongoDB 存儲方麵的一些開發計劃

  • 3.6 會支持存儲引擎級別的 upgrade/downgrade,主要是有新壓縮算法的支持、以及考慮將大文檔的更新隻存儲「改變的內容」,這樣可能會導致存儲格式發生變化,upgrade/downgrade 就是為了支持數據級別的版本升降級。
  • 3.8 會支持transaction,同時在大量集合、大量更新的場景做優化,然後完全廢棄 mmapv1 引擎。
  • 4.0 及以後的版本,MongoDB 會支持 LSM 來適應大量寫入場景,以及針對分析場景做 column store 的支持,同時還會考慮在移動領域,以及雲存儲場景的應用。

Drivers

3.6 版本裏,Driver 方麵主要有幾大改進

  1. 協議上的統一,MongoDB 的通信協議經過多次迭代改進,會在3.6進行統一,所有的請求走一種協議,並支持網絡數據包的壓縮(3.4已經支持snappy壓縮,3.6會支持更多的壓縮算法)。
  2. 支持 retryable write,所有的寫都可重試,這樣用戶就不用擔心寫失敗的場景,可以完全交由Driver處理(後麵有個主題專門介紹)。
  3. Notification API,支持訂閱數據庫的所有修改,比如用戶可以訂閱指定集合的insert、update操作,當集合的數據發生變化時就會得到通知,一種典型的場景就是訂閱oplog的修改,可以用於做增量備份,也可以將oplog應用到其他的地方,擴展更多的應用場景。

Unconference session

上述議題結束後,有一個 unconference 環節,議題大家現場提,每個人都可以提出想討論的問題,每個人也可以對提出的議題投票,最後得票數比較多的議題會拿出來進行圓桌討論,我提出向大家介紹一下 MongoDB 中國社區的發展情況,以及用戶遇到的主要問題,將這些問題feedback給官方團隊。

IMG_4264

China MongoDB community: Introduction and Feedbacks

2017_06_20_074315

第一次用英文做分享,居然完整的講完了,大家對中國用戶會一次活動有200+人表示非常震驚,並對我們社區的工作高度讚揚,感謝社區裏每一位同學的努力付出。

Mongoing中文社區(mongoing.com)今年已經在杭州、深圳、北京、成都組織了四場用戶交流會,後續我們將會組織更多的線上、線下的技術交流活動,給 MongoDB 的用戶建立了一個良好的技術交流平台,大家可以關注「Mongoing中文社區」的公眾號,後續的技術活動、幹貨文章會第一時間推送給你。

WechatIMG143_jpeg

Sessions

本次的 Session 內容豐富,每個時間段都有多個可選的topic,我主要關注 MongoDB internal、MongoDB schema design 等方麵的主題。

Scale wiredtiger to 1m collections

這個topic裏介紹 wiredtiger 如何支持100萬個集合,wiredtiger 相比 mmapv1 有很大的性能提升,但在大量集合的場景,wiredtiger 的表現不如 mmapv1,是因為 wiredtiger 每個集合/索引都對應一個物理文件,對文件係統的性能依賴很大;而 mmapv1 將同一個數據庫的數據合並存儲在一塊,不會產生大量物理文件。

Wiredtiger 在成為 MonogDB 存儲引擎之後,發現很多最初的設計跟 MongoDB 的場景是不相匹配的,比如wiredtiger假設用戶隻會創建很少的table,也隻有少量的線程會並發讀寫,而在 MongoDB 的場景裏可能會有大量的集合,同時因為 MongoDB one thread per connection 的網絡服務模型,會導致同時可能有大量的線程讀寫wiredtiger數據。

2017_06_20_110654

Wiredtiger 為了更好的支持大量集合的場景,主要做了如下改進

  1. cache handle 的管理,由原來的鏈表改為hash表,實現O(1)的查找和刪除。
  2. eviction 和 checkpoint 的時候,考慮到大量集合的場景,而大量集合中可能隻有少數集合是活躍的,會盡量高效的跳過未修改的集合數據。
  3. 增加 --groupCollecitons 選項,同一個數據庫的所有集合及索引隻會對應2個wiredtiger的table,一個用來存儲數據,一個用來存儲索引;這個特性目前還在開發中。

Session in MongoDB 3.6

這個topic 主要介紹 3.6 版本裏即將引入 的 Session 特性,Driver 連接 MongoDB server時,可以先建立一個 Session,Session 的狀態信息會存儲到 server 端,即使 Client 斷開重連,Session 的信息不會丟失,基於這個特性,在3.6裏會實現

  1. Retryable write,因為 Session 信息在server端,所有的寫操作在客戶端都是可重試。
  2. Session 自動超時,能自動回收 Session 關聯的所有資源
  3. 實現 cluster 級別的killOp,mongos 上的 Session,mongos 會自動跟 shard 上的 Session 關聯起來,當用戶 killOp 清理 mongos 上的Session操作時,mongos 會自動將 shard 上關聯的 Session 操作也清理掉;用戶不再需要連接到每個shard上去逐個 killOp。

2017_06_20_152426

Advanced schema design

這個 topic 主要介紹文檔數據庫常用的設計模式,其實這些模式都是比較通用的,在很多場合都適用。

Attribute

文檔數據庫最大的特點就是其靈活性,可以通過 field: value 來表達各種數據,在設計時field可以盡量抽象成 attribute,比如一個文檔用於記錄每個城市的氣溫。

{
   weather: 
   {
       wuhan_temp: 30
      hangzhou_temp: 28
      beijing_temp: 20
      ...
   }
}

這樣做有個比較大的問題就是字段數量不確定,並且非常不便於索引,更好的方式應該是進一步抽象,提取出城市以及氣溫這2個Attribute,比如

{
    weahter[
    {city: "hangzhou",  temp: 30},
    {city: "wuhan", temp: 20},
    {.... }
}

這樣改進後結構更清晰,而且能方便的針對 weather.city, weather.temp 建索引。

2017_06_20_115412

Subset

Subset 主要針對大文檔,在有些場景,用戶的文檔可能很大,但需要訪問/修改的部分可能很少,其中大部分內容都是靜態的,並且很少被訪問,這樣的數據就沒必要加載到內存,這樣就可以通過 Subset 的方式,將靜態很少被訪問的數據以子集的方式存儲到其他地方。比如下述文檔

{
    field1: value1,
    field2: value2,
    ...
    filedN: { }  // very big, and rarely access
}

這是可以將filedN 存儲到另外的集合,然後加上對應的引用,這樣就隻有經常需要訪問的數據被加載到內存,內存利用的效率更高。

Computed

Computed 主要用於減少頻繁需要的重複計算,比如針對某個集合,經常需要對集合的某個字段進行求和,這是就可以考慮在每次插入時,進行求和計算,並把計算結果存儲下來,這樣每次求和時就不用全表掃描來計算。

Approxmiation

Approxmiation 是 Computed 的改進,如果每次插入時更新計算結果開銷太大,並且應用能夠接受不精確的結果,則可以考慮周期性的進行更新,比如MongoDB本身對集合的文檔數、大小信息就是使用周期性更新的策略來維護的,所以每次db.coll.count() 都能很快的返回,但風險就是如果中間出現crash,可能導致count值與實際文檔數不一致。

Overflow

Overflow 主要思路是將數據存儲到多個bucket裏,比如以天為單位組織數據,先把數據存儲到當天的bucket(也可以是一個集合),到第二天又創建一個新的bucket存儲新的數據,劃分bucket的方式可以很靈活。

Sizing your cluster

這個 topic 主要介紹如何做容量評估,主要幾個方麵

  • Data size 根據需要的集合數量、文檔數量、以及文檔平均大小來預估總的數據量,來評估需要的磁盤存儲空間
  • Working set 根據索引大小、經常需要訪問的文檔數來預估活躍數據集來評估需要的內存大小
  • Queries IOPS 根據讀寫訪問請求評估需要的IOPS量
  • Shard Collections 根據容量、讀寫需求評估是否需要進行分片,以及分片的規模

上麵的方法隻是一個理論上的預估,要精確的了解容量及性能需要,最好是進行實際測試來評估。

2017_06_21_110945

Duriablity over sneakernet

這個 topic 主要介紹WriteConcern、ReadConcern的設計初衷,以及各個level分別解決什麼問題,這個官網文檔很詳細了就不做過多的介紹了。值得一提的是,Speaker 以獨特的方式演講,把問題解釋得非常透徹,大寫的服。

2017_06_20_163741

Others

  • 其他還聽了關於 Index selection、MongoDB perf 理論及實踐的topic,內容都非常的好,但太過細節不太好整理,這裏就先忽略了,等PPT出來大家可以學習下。
  • 國內還有華為、東航的同學參加了 MongoDB world 17,他們都是MongoDB的客戶
  • 今年關於Giant ideas的分享有好幾場,印象比較深的是 Matt Parker 關於數學的一場演講,把很多數學問題搞得很有趣,比如通過excel來模擬照片,通過多米諾骨牌來模擬與非門。

阿裏雲數據庫團隊招聘數據庫技術專家,歡迎有誌之士加盟,一起實現 Giant ideas.

參考

最後更新:2017-06-28 12:02:10

  上一篇:go  醫療行業+互聯網模式最難解決的高訪問和粘度問題
  下一篇:go  PostgreSQL 9種索引的原理和應用場景