天天看點

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

前言

2019年的RedisConf比以往時候來的更早一些,今年會議時間是4月1-3号,仍然是在舊金山魚人碼頭Pier 27。恰逢今年是Redis第10周年,規模也比以往大一些,注冊人數超過1600人,總共有80個議題,除了RedisLabs外還有很多雲廠商和Redis使用者帶來分享,今年也是阿裡雲首次在RedisConf進行分享。

Agenda

會議總共三天,第一天是Training Day,主要是作者開場加RedisLabs的教育訓練課程,今天的agenda如下圖:

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

會議記錄

Breakfast

注冊過程很簡單,輸入自己的名字就可以列印入場券,我們到的比較早就先上來吃早餐。

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

早餐還不錯,有各種水果和面包蛋糕,還有咖啡和茶,終于有口熱水喝了,4月初的舊金山還是挺冷的,我還裹着羽絨服但是美帝人民已經有短袖短褲上陣的了。

Opening Session

在課程開始之前,Redis作者antirez先來開場,和Redis的開發一樣依然是随性的風格,沒有準備PPT直接現場示範。

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

作者開場對Redis的介紹比較簡單,像一些資料結構和基礎指令的使用,也是為了照顧到大多數的閱聽人,來參會的也有不少剛剛接觸Redis的使用者。比較重要的是作者認為Redis現在已經不止是Cache了,因為具備persistence持久化和replication複制功能,已經是一個完備的Database,這也是今年會議的主題之一。

期間有個小插曲,在介紹list時作者忘記了RPOPLPUSH這個指令要怎麼寫,現場打開源碼,vi了一把server.c才搞定,哈哈,畢竟Redis發展到現在已經10年,有6種資料結構和上百個指令,有些指令也非常複雜。

之後和作者做了下簡單交流,作者很高興這次我們過來參加RedisConf,對前年雲栖大會的中國之行印象深刻,也稱贊了阿裡雲對Redis社群的貢獻,不過由于昨天才到舊金山,時差還沒倒過來比較疲憊,很快就回酒店休息了。

先來張合影鎮樓,哈哈。

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

Training

之後是RedisLabs的課程,我們挑了幾個去聽,整體聽下來的感覺比較基礎,還是偏向于入門的介紹。

  • Redis as a Primary Data Store
    這個課程主要是講如何使用事務來構造各個key的關系,畢竟Redis是key-value型資料庫,要同時修改多個有關系的key就會有并發問題,此時就要利用事務來保證原子性。
               
  • Redis Clustering
    關于叢集的一些簡單介紹,比較重要的是RedisLabs在社群Cluster上也做了一套Proxy來友善使用者接入,Proxy是今年超熱門的話題。
               
  • Streaming Architectures
    Redis 5.0引入了Streams資料結構,用來對标kafka,這個課程對Streams做了下科普,一些指令的使用示範,演講人Itamar也是Github上的老朋友了,很風趣幽默,他說已經告訴了好多人這次RedisConf我們會來,還邀請他的朋友明天去參加我們的session,一直稱我們是amazing guys哈哈。
               

課程期間作者從Twitter上發來消息,問我們中午有沒有時間一起for Redis internals talk,于是乎約了午飯時間來讨論。

Lunch & Redis internals talk

今天的午餐比較簡陋,就是便當,有火雞三明治、牛肉漢堡等,但是都是冷的。。。中國胃還是吃不慣啊。随便拿了個火雞三明治,一邊吃着一邊和作者讨論了。

作者說上次來杭州的時候玩的很開心,逛了西湖和靈隐寺,在靈隐寺吃了素齋很不錯,尤其是豆腐很好吃,意大利的豆腐都是硬的,龍井茶也很好喝,上次買的已經喝完了,意大利也沒有賣的,比較遺憾這次沒給他帶份龍井當禮物,下次來中國多買點哈哈。同時也邀請我們去意大利玩,自己平時是在西西裡住,但是他在佛羅倫薩有房子,如果我們去可以住他家裡,聊到西西裡的美麗傳說大家會心一笑哈哈,還有電影教父,來自西西裡的黑手黨,作者自嘲自己家鄉的人在世界各地制造麻煩。

午飯閑聊完開始讨論正事,作者重新啟動了threaded-io分支的開發,也就是網絡讀寫多線程(前一個星期還在部落格上說這個feature短期不打算開發,結果現在又開始了,真是随性哈),因為讀寫網絡的read/write系統調用在Redis執行期間占用了大部分CPU時間,如果把網絡讀寫做成多線程的方式對性能會有很大提升。現在已經實作了第一版,write side也即回複用戶端這部分已經完成了,并且去掉了主線程和IO線程之間的互斥鎖,采用busy loop的形式來等待io線程工作結束,這部分能夠有50%的性能提升,架構圖如下:

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

Redis采用的是事件驅動模型,執行邏輯仍然是單線程串行執行模式,待所有指令執行完成之後,把用戶端的reply分發給多個IO線程,等IO線程回寫用戶端完成後再進行下一輪事件循環。

write side采用這種模式提升很明顯,現場測試性能可以提升50%,但是比較奇怪的是read side采用同樣模式卻沒有任何提升,于是現場code review了下:

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

代碼邏輯上沒有發現什麼明顯的問題,會後再checkout這個分支仔細看下。其實目前社群threaded-io分支的架構設計和我們阿裡雲在做網絡多線程的早期版本比較像,整個邏輯read-work-write仍然串行,隻是把read/write多線程化,這樣對Redis原來的邏輯改動較小,我們後來進行了更徹底的拆分,read/work/write流水線化,不同用戶端的read/work/write可以并行,但是仍然保留work的串行邏輯不破壞Redis的執行語義,設計詳見

https://www.atatech.org/articles/112918

,這個設計思路也和作者進行了交流,不過Redis作為一個開源項目,邏輯簡單、可讀性強還是占了比較高的優先級,他不想把Redis做的太複雜,是以還是隻做read/write的并行化,盡量的減少read/write的整體時間而不是read/work/write的流水線,内部使用和開源項目還是有不同的側重點。

來個硬廣:阿裡雲Redis多線程性能增強版已經上線售賣,歡迎大家使用。

另外就是關于Proxy,就在昨天剛剛放到Github上,目前隻是一個demo比較簡單,隻有一些基礎功能,但是這個項目不是作者自己開發,而是交給了Fabio,一個在意大利的小夥伴,我們也對阿裡雲的Proxy做了介紹,我們的Proxy已經很成熟了,也實作了很多進階功能比如:多DB、block類指令、PUBSUB、Lua腳本、事務、多key指令支援等,作者很有興趣問我們有沒有開源,由于使用了一些内部類庫目前還沒有開源,不過後面還是有開源的計劃的,作者也邀請我們參與到社群Proxy的開發中。

Proxy項目位址:

https://github.com/artix75/redis-cluster-proxy

Happy Hour

和作者讨論的時間比較久,下午的課程就沒再參加,直接到了會後的Happy Hour,大家一起聊聊天互相認識一下,有吃的有喝的,一起哈皮。

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

這個墨西哥玉米餅還不錯,有辣醬和牛油果醬等配料。

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

這個不知道叫啥的卷,裡面的酸黃瓜超級酸,無法承受。。。

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

還有各種紅酒、啤酒,感覺比國内的度數都要高,喝了一杯啤酒就有微醺的感覺。

同時也和AWS的幾個同學做了交流,AWS這次來了6個人有兩場session,整場也比較活躍,可謂人多勢衆,作為雲廠商大家都有一樣的痛,Redis使用者普遍要求比較高,10ms+的延遲工單就來了(捂臉哭),網絡問題也是頻發,基礎設施的穩定性建設也是非常重要。

RedisConf19會議記錄 Day0: Training前言Agenda會議記錄結語

結語

愉快的第一天就結束了,明天再帶來後續報道。

繼續閱讀