第 102 期 - 工程師的殼,脫下來還是要繼續處理 Bug

本週專欄

來征服資料結構與演算法吧 | 簡單來說就是像排隊的 Queue

Hi!大家好,我是神 Q 超人!這篇文章要試著用 JavaScript 來分享和實作一種叫做 Queue 的資料結構,也會搭配個 Leetcode 的題目來服用,讓大家之後在解題或處理類似需求的時候能想得到 Queue!

前端開發

5 min To Understand Event Loop in Javascript

又是 JavaScript 的萬年觀念 Event Loop 了!文章中依序從 Multi-threaded & Single-threaded、Heap & Call Stack、Web API 最後再到 Event Queue,一一解釋 Event Loop 的相關概念,是很清楚但不冗長的文章!

Understanding Function Currying in JavaScript—and When to Use It

Currying 在 Functional Programming 裡算是一個常見的設計方法,這個作者先是介紹了什麼是 Currying,又多舉一些日常中會遇到的例子以及何時該使用 Currying,雖然文章有點長,但是例子都很簡單易懂!

Penetration and Security in JavaScript

作者先是建立了一個函式,並且在函式裡寫下一些簡單的錯誤的使用判斷,以避免該函式錯誤被使用,接著開始介紹幾個 JavaScript 的惡意攻擊手法,來試著繞過那些錯誤的使用判斷,也說明如何防禦他們。

Node.js

Guidelines for choosing a Node.js framework

近年來 Node.js 用來寫 API Server 的框架越來越多了,除了最知名的 Express/Koa 之外,還有 Fastify、Hapi 等等強調速度、易用性的框架。而這篇文章並沒有直接跟你說要選什麼框架,而是跟你說在選擇的時候該考慮哪些問題,譬如說你需不需要 Websocket、有沒有打算用 TypeScript 等等,這些都會決定哪一個框架最適合你

Make NodeJs handle 5x request with 99.9% uptime adding 10 lines of code

這篇文章的標題超浮誇XD,但其實就是教你怎麼用 Node 內建的 module 把一個 cluster 跑起來監聽同一個 port,並且在 worker crash 掉之後自動開一個新的,看完之後就可以了解像 pm2 這種工具內部可能是怎麼做的

Node.js Garbage Collection Explained

這篇文章難度比較高一點,但我覺得很值得一讀,他除了講解 Node.js 內部的 GC 原理之外,還畫了非常多圖跟舉了很多例子,對於了解 Node.js 的 GC 非常有幫助

DevOps

What is a good TTL for DNS?

最近 Facebook 遭逢自 2008 年以來最大的故障事件 (停站 6 小時),除了龐大的金錢損失之外,內部一定也會再花許多的人力來做 postmortem,避免同樣類似的事情再次發生,雖然這次主要不是 DNS 事件,但網路服務維運人員還是直得思考當不預期的事件發生時,要如何保護好自身的服務,例如假使 DNS 服務發生中斷的話,該如何是好?所以這篇文章想跟大家討論每一筆 DNS Record 中用來暫存資訊的 TTL (time-to-live) 設定值,畢竟對於重要的 DNS Record 來說,這個暫存值該設定多少是個相當重要的議題!

  • 何時需要縮短 TTL: 通常進行服務搬遷時,總會造成 IP 的變更,這時候將 TTL 縮短,就可以避免 DNS 服務內暫存已經不存在的運算資源,而使得 Client 連接不到

  • 解析的延遲問題: 所以當 DNS 暫存根據 TTL 需要被更新時,就會產生重新抓取的動作,假如這個抓取的網路延遲時間相當地重要的話,就要考慮一下是不是需要增加 TTL,因為較低的 TTL 通常會造成較高的平均網路延遲

  • 較長的 TTL 設定: 當 DNS 服務出現問題時,假如 TLL 只有設定幾秒鐘的話,那麼 Client 就會立刻感受到網路異常,雖然 DNS 服務出問題的機率不高,但要是發生網路 DDoS 攻擊,網路問題,或是 DNS Provider 出問題時,較長的 TTL 設定,就可以讓你擁有較快樂的 Client

不過某些種類的 Load Balancing 方式可能讓使用者無法設定比較長的 TTL,除此之外,不同的 DNS Record 型別也需要不同的 TTL 設定,文章最後建議 TTL 至少要設定 5 分鐘,而不是幾秒鐘,對於不太可能需要緊急更改的 DNS Record 可以考慮設定一小時或是更久,例如 google.com 的 NS Record TTL 為兩天,SPF Record TTL 為一小時,A Record 為五分鐘,這些設定讓 DNS 在平常敏捷性和意外中斷時提供了相對合理的平衡,底下為常見 DNS Record 的建議設定值:

1
2
3
4
5
Record type	Conservative TTL	Recommended TTL  	Aggressive TTL
A / AAAA 1 hour 5 minutes 60 seconds
NS >2 days 2 days 12 hours
MX 1 day 4 hours 1 hour
TXT (for SPF) 1 day 1 hour 5 minutes

Kubernetes Cluster API reaches production readiness with version 1.0

上週 Kubernetes Cluster API 發布 Production Ready 的 1.0 版本,而且也正式遷移到 v1beta1 APIs,意味著此專案已經從之前的 Alpha 邁入更成熟的階段,Cluster API 是一個 Kubernetes 的專案,讓使用者可以宣告式的方法來管理 K8s,輕易地使用 API 來建立,設定與修改 Cluster,許多大公司也都對此專案進行貢獻,例如 VMWare, Microsoft, Weaveworks, Google, Mattermost, IBM, RedHat…等,文章中還有每間公司的使用方式與心得,有興趣的人不要錯過了

5 Linux Utilities That Will Make You Smile

一般人總是必須使用 Linux 作業系統來查詢 Log,編譯應用程式…等比較嚴肅的工作任務,此篇作者想要分享幾個工具,讓工程師們的日常生活可以增貼些許樂去

  1. The Fuck: 每個人一定有過打錯指令的經驗,有可能是少打一個字,或是某個字打錯,這個時候就可以使用 fuck 指令!他會幫忙給出建議的正確指令,所以下次再打錯指令時別忘了 fuck 一下XD

  2. Pv: 在 Terminal 使用輸出指令,例如 ecoh 時,需要輸出的字串就會立刻出現在下一行,使用 pv 指令之後,就可以讓輸入的字串像是人類正在輸入一般,一個字元一個字元慢慢地顯現出來

  3. Figlet: 厭倦每次登入系統時的歡迎畫面了嗎?或是覺得顯示給使用者看訊息太乏味?這時便可以使用 figlet 這個指令,他可以把一般的字串使用 ASCII 資源轉換成具有藝術感的拼貼圖

  4. Espeak: 想讓電腦想要跟你說話嗎?可以使用
    espeak 這個指令讓文字被唸出來,使用的情境其實不少,例如有個工作任務要跑一陣子,你就可以先去忙別的事情,等到完成後再使用 espeak 進行通知

  5. Rev: 假如想要把字串整個顛倒列印出來該如何做比較快呢?有點像是面試問題XD rev 這個指令就是用來幫忙把字串顛倒列印出來

StarBugs Weekly

StarBugs Weekly 由一群不寫文章就會想要亂花錢,但是又沒有那麼多錢,只好繼續寫文章的開發者所創立。
內容包含 Web 前端、中端、後端、DevOps、產品開發、精實創業,一切跟產品有關的知識,都是我們的守備範圍!

Writers:

  • @HannahLin - 從台灣到矽谷,熱愛前端的工程師女孩。
  • @KyleMo - 雜食性軟體工程師,喜歡的技術我都想學。
  • @Airwaves - Hi~我是 Airwaves,熱愛研究如何造輪子的前端工程師。
  • @Jenny - 我不寫 CSS。
  • @Andy - 目標成為用嘴巴工作的工程師,專長為網頁開發以及 K8s。

Maintainers:

  • @GQSM - Hi!我是神 Q 超人,一個先衝再說的男人。
  • @LarryLu - 我是 Larry,傳說中的 0.1 倍工程師!
  • @LukaJoJo - 一名全身都是死角的工程師。
  • @smalltown - 熱愛鑽研各種可以提升雲端服務品質及增進團隊開發效率的開源技術。

Feedback

本週呈現主題方式做了一些改變,希望讓讀者能夠更快速精準的找到自己要的資訊。也加入社群活動這個區塊,每週更新社群活動的資訊。如果有任何建議,歡迎私訊 星巴哥技術週刊 FB 粉絲專頁 與我們聯繫。