比威而鋼還威的 TCP BBR

前一陣子從 iThome 看到了 Google 要把 TCP BBR 應用在 Google Cloud Platform 的新聞, 才發現原來這東西這麼神,2700 倍的傳輸率,佇列延遲減少 25 倍,隨手翻了下網路上的部落格,沒想到有那麼浮誇的說法證明:下載從 84K/s 變成 3.9M/s,這立刻引起我的好奇心,找到了 Google 自己的部落格說明,原來是長久以來使用的 TCP 壅塞控制演算法有點笨,遇到有 packet loss 的狀況時,就會以比較保守的方式來傳遞接下來的封包,而新的 TCP BBR 則用了比較聰明的方法來處理 packet loss 的問題,整個示意圖就如下所示:


* Source

文中也特別拿了幾個國家為例子,說明在應用了 TCP BBR 之後,YouTube 的表現情形,不看還好,一看之下,沒想到 Google 也這麼浮誇寫實,YouTube 到 ID 的 Max Round-Trip time 竟然可以改善到 50% 以上,這讓我突然想到以前公司在進行某個網路直播專案時,那個爛 4G 網路讓我們驗收時吃了很多苦頭,所以我也來做個浮誇的測試好了。不過因為一來我很懶,二來也沒那個預算搭建回當初專案的原始架構,所以以下浮誇的測試只在我的本機上實驗。

  • 實驗環境 (都在同一台機器裡):
NB: OBS Studio 19.0.3 --> NB: clumsy-0.2 --> VM: SRS 2.0.242 + CentOS 6.9 --> NB: flv.js in Chrome
  • 實驗方法:
  1. 先以 Kernel 2.6.32-696.6.3 直接測試,擷取螢幕看直播視訊延遲
  2. 以 clumsy 加上 inbound & outbound 各 50ms 的延遲,並隨機 drop 10% 的封包
  3. 等個幾秒,擷取螢幕看直播視訊延遲
  4. 停止 clumsy,等個幾秒,擷取螢幕看直播視訊延遲
  5. 升級 Kernel 為 4.13.0-0.rc1,重複步驟 1~4
    * 我拿了一個 Firefox 開時鐘來讓 OBS 擷取螢幕畫面,所以測試畫面中會看到 Firefox
  • 實驗結果:
  1. 沒 TCP BBR,不啟用 clumsy,延遲大概 3 秒
    Without BBR - normal network
  2. 沒 TCP BBR,啟用 clumsy,稍等一下,延遲變為 13 秒,實測時這個延遲會迅速擴大,最差的狀況是影像會停掉
    Without BBR - bad network
  3. 沒 TCP BBR,把 clumsy 關掉,稍等一下,延遲回到 5 秒左右
    Without BBR - normal network again
  4. 有 TCP BBR ,不啟用 clumsy,延遲大概 2-3 秒,其實和沒 BBR 時差不多,這畫面看起來延遲只有 2 秒應該只是個測試誤差
    With BBR - normal network
  5. 有 TCP BBR,啟用 clumsy,稍等一下,延遲變為 4 秒
    With BBR - bad network
  6. 不信邪,再等一等,有 TCP BBR,啟用 clumsy,延遲還是維持 4 秒左右
    With BBR - bad network-2
  7. 恢復原狀,有 TCP BBR,不啟用 clumsy,延遲還是維持 4 秒不動
    With BBR - normal network again

總結來看,這個 TCP BBR 還真的神,在高延遲且掉包的網路上,在我的測試環境 1 個 client 對 1 個 server 的情境下就能有這麼好的表現,安裝的方法我就不特別提了,網路上隨便 google 都一堆,不過還是要提醒大家一下,再好的東西還是得先測試才能上正式環境,免得哪個不小心你就踩了坑了都不知道。

BBR Summary

一個很糟糕的 gmail 問題終於被修正了

認識我的人都知道,我在 gmail 一開始 beta 時就有幸拿到了邀請函,並且申請了一個和我英文名字一模一樣的 gmail 帳號,而我老婆的 gmail 帳號稍微差一點,有帶她的中文姓氏,我記得是因為當時 gmail 註冊的規則是不允許 5 個字以下 (含 5 個字) 的帳號名稱,且不能是常見的美國名字 (或單字,我猜),而我的英文名字剛好是歐洲系的,所以一直以來我都對於能擁有這個帳號是爽在心理,偶而還拿出來炫耀一下。

但是事情總是不會那麼幸福美滿的,不知道從哪一天開始,我的 gmail 就充斥著一堆的垃圾信,講到這裡大家可能會覺得很怪,gmail 檔垃圾信不是出名的嗎?就算是我的 gmail 有個好名字,也沒有什麼關連性吧?

是的,gmail 的確是檔垃圾信檔得很好,但是,不是垃圾信的垃圾信呢?

啥,你在共啥小?! 什麼叫不是垃圾信的垃圾信?

其實就是那種別人拿你的 gmail 帳號去註冊某個網路服務,之後那個服務就一直狂發信給你的一種狀況,根據我看了那麼多不是垃圾信的垃圾信的經驗得知,這種狀況一般可以歸類成兩種

  1. 真的是不小心寫錯 email 地址的:不管他是記姓不好的三寶、少根筋而打錯字還是管他阿媽什麼挖貴原因的,反正就是寫錯了,為啥我會知道是寫錯的呢?因為我有收到各種各國的 EC 網站送貨通知,而且錢都已經付了,在這裡還是要歌頌一下 Google,幸好他 gmail 內建有翻譯功能,不然我還真看不懂這些垃圾信
  2. 故意寫錯的:從這幾年收些垃圾信的經驗裡,還真的有很多網路服務是不驗證 email 信箱是不是你的 (請注意我現在已經是以全球性的世界觀來講這件事),也就是你申請註冊之後,他就當你註冊成功了,所以有可能是有人亂用我的 gmail 帳號註冊,也不排除這是一種另類的廣告信手法。其實我猜 email 要認證這件事情應該是這幾年才有的,因為我的 Apple ID 其實早就被人申請好了,幾年前的某一天當我要申請 Apple ID 時,我做的事情其實是去按 forget password,而不是新申請一個,這類事情我至少經歷了三四次有吧,都是別人在多年前不流行 email 驗證時先幫我申請好的帳號,然後我再去用 forget password 給拿回來。而目前呢?剛剛翻了一下,我的信箱收件夾裡還躺著 4 封 Instagram 的申請確認信,其中 3 封是英文的,1 封是印尼文,當然我是個還沒用 Instagram 的土包子,這四封驗證信都不是我自己申請的。

那上面這些講了落落長,都不是 gmail 的糟糕問題啊?你到底在講啥?!

其實是 gmail 有個功能叫「備用信箱」,每個帳號都可以設定一個備用信箱,一旦你忘記自己信箱的密碼時,又沒有設定手機門耗時,就可以記封忘記密碼的信到你設定的備用信箱來進行重置密碼的動作。但是… gmail 這功能以前可是不需要驗證的,所以你設定了就是設定了,他也不會管你是不是有打錯字還是記錯了,所以我長久以來,就是會收到各國語言的「密碼重置信」,這時候我就得記得去按「請把我的 gmail 信箱從那傢伙的備用信箱移除」,非常的惱人,一直到今天,gmail 終於做出了一個劃時代的更新(對我而言啦):

2017-07-28_010342

靠你終於改了啊,雖然我的帳號還是常收到不明來由的垃圾信,但連 google 都發垃圾信給我我就很不爽,雖然我的 gmail 因容量還沒到上限沒付過錢,但我可是 Android 的愛好者,GCE 也付了幾次小錢,平常也讓你抓我的 GPS 資訊讓你偵測車流量,終於,這次你解決了我的一個困擾。

其實我猜測有類似問題的人應該也不少,例如我公司的 email 並不好記,但偶而也是有類似的垃圾信出現,我會猜測是一種另類的廣告信手法,真是希望那些垃圾信名單機構可以增加一種黑名單,就是當你這個網站拿 email 註冊而不需驗證時,提出證明就可以列入這個黑名單內,然後不管是 gmail 或自己管理的 email server 就可以設定拒絕這類網站寄出的信件,才能杜絕這些惱人的垃圾信。

 

玩一下 Google Compute Engine 要花很多錢嗎?

雖然身為一個 IT 人,也知道這一行要與時俱進不然就被淘汰的道理,但是我個人對於「在雲端上花錢」這件事情的態度算是偏向保守的那一派,像是 LINE Pay 已經出來半年了,我是為了貪那繳稅的回饋金才去辦卡且綁定了我的 LINE 帳號,Google Play 上就算有需要綁定過信用卡,也是用完之後就移掉,不然我自己會想像被他亂收錢。

這次之所以會想要在 GCE 上花錢,是因為看了某個對岸網友的文章,發現 Google 竟然直接在他的 GCE 上提供 Anycast IP + Global Load Balancer + CDN 的服務,因為這實在是太狂了,所以我忍不住就打破了自己的的風險規則,跑去把我的信用卡放上去。

我測試的東西也就是 Anycast IP –> With CDN –> Load Balancer –> 一台台灣 VM + 一台新加坡 VM 這樣子的架構,測試之前先在我自己電腦上的 VM 跑了一次,並且把安裝與設定步驟記錄了下來,所以去 Google 上開機器時,除了幾個 Google 自己的設定需要實驗多花了點時間之外,大致上可以說是沒幾個小時就做完相關的設定工作,然後就開始測試了。之後就放那邊放了兩天,端午節之前把 Anycast IP, CDN, Load Balancer 及新加坡機器關掉,只留下台灣這台 VM 給同事測試用 (對,我實際上的需求並沒有一定得要用 Anycast IP,只是拿來試試看功能而已),這樣子我一共花了多少錢呢? 才 US$1.96

1

而且 Google 也提供了一個預算管制的功能,當所花的錢超過你設定的預算時,就會發警示信出來。因為我拿來玩 GCE 的帳號就是我平常在用的 Google 帳號,也綁了我的 Android 手機,所以這功能讓我很安心的繼續用下去。

2

前一陣子不知道是哪位臉書上的心得,說是微軟 Azure 要和 Amazon AWS 或 Google GCE 對打還是走得很辛苦的。對照一下這幾年來看到 Google 在做的事情:Google 自建海纜、GCE、Anycast IP on GCE、Google CDN (如果 Google 要把他們在世界各個 ISP 放的 Google Global Cache 也拿來做 CDN 加速的話,那就更恐怖了),可以看到 Google 要做而且已經快做到的是「世界」的 IT Infrastructure – 全世界的中華電信、全世界的 Hinet,這意思是什麼呢?如果你今天只想做台灣的網站也就算了,如果你是想搞跨國的網路應用(電子商務、遊戲、社群、直播…),以後你也不用多想了,就直接放 Google 上就好了,如同幾年前的台灣一樣,大家想搞網路、搞遊戲,機房鐵定要選中華電信、專線一定得拉 Hinet,因為全台灣的使用者幾乎都是用 Hinet,想不接 Hinet 線路就是要讓使用者 lag 爆。這種事情以後就會反過來,大家要在全球佈局的話首選就會是 Google,因為最簡單速度又最快。

所以,學學這些 Public Cloud 的使用經驗看來就是未來 IT 人的必備技能,而且搞不好還比去學什麼 Server 安裝或 Cisco 設備操作要來得基本且必要,要練習這些東西很花錢嗎?你要練 Server 安裝、系統管理之類的可能要去買台機器或借個環境才能操作,想練網路我看很多人會花個幾千塊去網路上買二手設備來練習,但是想練 Google Public Cloud? 以我這次的例子來說,只要 1.96 鎂就好,可能比很多人一天的通勤費用還便宜些,好東西,不買嗎?

無意中參加到的即興表演課程

這次因為公司走敏捷開發的緣故,跑去上海參加了一場很特別的「技術大會 – AHA 2017」,在出發之前,問了去年去過的同事之後,還是搞不太懂那是個什麼樣的會議,一直到了最後一天,早上,還是搞不懂那場大會的主題,不過在大會第三天的下午,我跑去其中一個「即興劇:團隊共創力工作坊」的議程,讓我終於在議程將要結尾時找到了我的 AHA Moment。

說起來所謂的即興表演課程似乎也不是只有大陸那邊才有,即興劇的英文叫做 Improvisational Theatre,隨便 Google 了一下台灣這邊也有好幾個,例如這間勇氣即興劇場從 2004 年開始就引進了即興劇,我們新加坡的同事在那參加的培訓課程在台灣這邊也開課過。只是台灣的即興劇團和企業之間的連結多半聚焦在創意領域,和敏捷圈的關係挺小,當然也可能是台灣敏捷圈的愛好者相對太少,還在集中力量在敏捷或 SCRUM 上,以致於很多周邊領域的知識圈並不像國外那樣子連結的很好。

2017-04-15 13.12.58

這個課程算是一個體驗式的活動吧,大概 3 個小時左右,這邊也順便幫講師們打個廣告,如果你有興趣而且人在上海的話,可以去找他們上課,也不講什麼高大尚的東西,光即興表演這樣子的內容也是夠有趣的,就算當成抒壓的活動也是值得推薦。

根據這個即興表演工作坊 -「飛來即興」的說法,即興表演有三個重要的因素,分別是:

1. Yes, AND
2. Don’t think
3. All about your group

而我們最終的作業是要演一段這樣子的即興表演出來:

即興表演-拍手叫停

說實在的,一開始看到這麼有趣的影片時,在場的所有人包括我,直覺的就是那麼一句話:不~ 可~ 能~ ,由於 AHA 的參加人員主要都是 IT的開發者或相關人員,簡單說就是大家的宅屬性都非常的高,要讓我們這些宅男宅女們演戲,真的就是要叫大家去符合 AHA 的口號 – 不要臉。

不過負責領課的兩位老師:正一 和 奮鬥 算是準備充分了,這三個小時的時間並不是叫大家一開始就上台演出這種高難度的戲,而是讓大家漸漸地放下心防循序漸進的帶領,慢慢的讓大家進入狀況。

從講話開始練習

一開始我們就從「講話」開始演,演什麼呢?既然是即興表演,用台灣的方法說就是話虎爛,我們從 No~~~, because 這個 pattern 開始演,再來是演 Yes~~~, but 這個樣版,最後才走到核心的 Yes~~~, and。舉個例子來說,

場景:Hi,Paul,晚上去看個電影好嗎?
No, because 的回答:沒辦法耶,因為我晚上得去補英文
Yes, but 的回答:哇,那部片我想看很久了,但是,我晚上得去補英文耶
Yes, and 的回答:太好了,我也想看那個電影,看完後我們還可以一起去旁邊夜市吃個宵夜

這樣子的設計也真的妙,講師這時候會讓大家想想看,在平常的團隊合作裡,大家的溝通是不是就是這幾種 pattern? 你喜歡的是哪一種的感覺? 大家是不是都比較不喜歡被拒絕的感覺?

心得:即興表演的第一要素和好的團隊合作一樣:Yes, And

肢體訓練

2017-04-15 15.06.40

講話講完了,接著就是練習肢體語言了,一開始講師給的指令是:讓你的隊友擺出一個你喜歡的姿勢,沒想到的是,當大家的姿勢擺完了之後,接著就是要讓你來解釋這個姿勢代表的意義,我看這時我們大家都有點措手不及,雖然還是有講得好的同學,但我自己就對我臨時掰出來的台詞很不滿意,我猜想這種練習是延續之前的講話訓練,進一步的加上你對隊友的觀察而得的結果。

疑~~這動作不是我自己擺的?解釋起來很難嗎?……沒錯,所以接下來的訓練就是:人力分鏡接龍(這是我擅自取的名字),這個階段你就得觀察前一個隊友擺出的姿勢,然後以 ‘Yes, and…’ 的概念承接下去,來去完善這個分鏡的要素,因為在一個即興的舞台上,合作的一群隊友,不是一個個人,在這樣子一個緊湊的環境下,你不但得注意自己的肢體語言,還得時時觀察你的隊友來做出即興反應。

心得:即興表演的第二要素:Don’t think,在表演舞台上想太多就冷場了,例如裡頭有個扮抹布的隊友,他就沒有考慮自己的形象就上了,所以換成在團隊裡頭,反應太慢,考慮太多的人也許就檔到了整個案子的流暢度

實際上場

前面好像講了一些,但其實講師們帶的訓練活動還要更多,為了自己懶不劇透,所以中間就容我草草跳過…………………………………………………………………………………………………………………………………….

最後就是驗收的時刻了,下面的影片中,除了黃色 T-Shirt 的是領課的老師,其他的人都是非專業的演員,也是我先前口中的 IT 相關從業人員,不知道你是不是也覺得這樣子的演出非常有趣呢?

心得:即興表演的第三要素:All about your group,不知道大家有沒有注意到,要完成這樣還算流暢的演出,不但要 1) Yes, … and  的接龍下去,而且還得要 2) Don’t think 用你最直覺的反應來接著演出,最後,所有的一切都是 3) All about your group 讓你團隊的戲變得好看、成功。

經過這三個小時的折騰之後,流了許多汗,但是就像是打了一場很順很漂亮的籃球一樣,隊友們目標一致,互相合作,雖然累,雖然弄花了儀容,但最後身上留下的是爽汗。想想自己在組織裡不也是這樣,當大家目標一致,大家期待的應該也就是在過程中是經歷到努力奮鬥、相互合作的感覺,儘管有時會累、會流汗,老實說也許還會有爭執、有摩擦,但最後達到目標時,就會覺得當初的過程很值得回憶(老頭子模式上身了),希望大家和我自己以後都能常享受到流了爽汗的喜悅,最後幫 J 姐分享一下,這樣子的課程對於不善於人群溝通,害羞、不敢從群眾跳出來的個性也非常有幫助喔。

飛馬牌600N咖啡磨豆機 開箱

自動磨豆機

由於小弟是個每天都要補充咖啡的人

有鑑於每天手搖磨豆實在是耗時又費力

所以就決定敗了一台自動咖啡磨豆機 – 飛馬牌600N

這是我當初買的手搖磨豆器

 

從momo購物買來的600N

IMG_6337

有保麗龍保護

避免碰撞

組裝後的樣子

IMG_6342

有8段粗細可調

IMG_6373

1是給義式espresso機用的

4是給手沖使用

8是給摩卡壺使用

都有各半段快要微調

下面圖是我用4手沖用的細度

IMG_6374

Dell Dock – WD15 with 130W Adapter

自從上次失手買到沒有 E-Port Dock 的 Latitude E7280 之後,每天到公司插 2 條線 (一條電源線,另一條傳統 USB Dock 的線),然後還要把筆電螢幕打開按個啟動開關的這種生活令人感到越來越不優雅,想找個 Type-C 帶供電的 Dock 又覺得對不起自己的荷包,於是在某個夜深人靜的夜裡,淘著淘著就不小心淘來了一個 RMB 349 的 WD15 進來,加上刷卡手續費和國外交易費算來一千七出頭而已,比 Dell 米國的訂價省了四張多小朋友。

2017-03-15 16.08.14上圖中可以看出這是個二手貨,哥沒錢就不會學人裝逼,二手的能用就好,右下角有個開關,實測在我的 E7280 上可以正常運作,從此我到公司後不用打開電腦螢幕也可以開機,優雅+1。

 

2017-03-15 16.09.10
背面一如其他 Dock 般接了電源、網路、無線滑鼠、鍵盤和 HDMI 之後,全都正常運作無誤。

2017-03-15 16.09.25
我選的是含 130W 電源供應器的套餐,這自然也是二手的,賣家有特別說明的是,要使用 WD15 這個 Dock 時,在原本使用 45W 或 65W 變壓器的 Dell 機種上(eg. New XPS 13, Latitude E7270, E7470),要搭配 130W 變壓器,若原本使用 90W 含以上的變壓器時 (eg. New XPS 15),要買 180W的套餐,若原本的機種用了超過 130W 的變壓器呢 (eg. Precision 15 7000 或 17 7000)?那很抱歉這個 Dock 無法供電。另外非 Dell 設備最大供電只能到 60W,實測我同事的新版 MBP 13 with touchbar 可以使用。

2017-03-15 16.08.29
連接 Dock 部分的 USB 線材是固定的,不能拔開,個人猜測是怕經常的插拔、不小心拉掉的耗損

2017-03-15 16.08.01最後,我上班時終於只要插一條線就好,優雅再+1。

在 Windows 上使用支援 edns client subnet 的工具 – dig 9.11

之前提到了說 BIND 會從 9.11 開始支援 EDNS client-subnet,所以若你的 BIND 已經開始使用 GeoDNS 的功能,恰好你的 end user 用的 DNS server 也支援 EDNS client-subnet 的話 (eg. Google DNS 就支援),那恭喜你,你的 GeoDNS 的效果應該會變得更加顯著。

但實際把功能丟上去之後,你就會發現有事沒事的你會遇到使用者抱怨他連你的網站速度太慢,原因是因為你的 GeoDNS 回給他的結果和你預期的不同,原本你想要 GeoDNS 丟個離日本最近的 IP 給他,但他拿到的卻是個英國的 IP。這時候我們就需要個可以快速驗證 GeoDNS 設定是否正確的工具了。

這工具其實也很簡單,因為就是隨著 BIND 9.11 一起更新的 dig 命令,只是以前我笨笨的,以為 BIND 只有出 source code,自己又沒種花時間去 Windows 下建立編譯的環境,所以都是去抓別人編譯好的執行檔,自己都覺得有點不是挺安全的,不過剛剛仔細一瞧,原來 ISC 自己的官方網站上就放了 BIND 的 Windows 版,只要下載之後安裝也就可以用了…

01

安裝的時候只要選擇「Tools Only」就好,我想大家也不想在自己的電腦裡裝個用不著的 BIND Server

02

裝好之後,如果你像我一樣對自己用的系統有一點潔癖的話,可以把目錄下的這些檔案(除 BINDInstall之外)拷貝到你喜歡的目錄,剩下的東西則可以全部移除。

03

dig + EDNS client-subnet 的使用方法也很簡單,就是

dig [domain name you want to query] @[DNS Server] +subnet=[addr]

http://www.google.com 為例,如果我是個位於美國的使用者,IP 是 128.32.203.137 (我隨便抓了個柏克萊大學的 IP 來測試),解析出來的會是 172.217.5.100

04

那如果我是個台大的學生,IP 是 140.112.8.116 的話,解析出來的會是 163.28.18.30 (左右…)

05

我自己現在用的是遠傳的網路,從 ping 的結果看來,Google 應該也是有應用 GeoDNS 來加快網站的速度(當然也用了 BGP anycast,但不在此文討論範圍)

06

最後,更笨的是,如果你什麼都不想裝,就用別人放在雲端上的服務就好了…

https://tools.keycdn.com/dig