第 133 期 - 未吃五月粽,破裘不敢放

本週專欄

MongoDB explain 實戰— 看看你的 index 是真有在做事,還是佔空間而已

哈囉大家好我是 Larry,距離我去當兵之前發的 109 期週刊已經幾個月了,這段時間很感謝隊友們的 cover,也很謝謝繼續訂閱的大家,之後每個月又可以再看到我寫的文章了哦~(大家應該有想看吧 ?🤔🤔🤔)

進入正題,在使用 MongoDB 時,如果完全沒有幫 collection 建立 index,那在搜尋時就需要把整個 collection 翻過來一個一個找過。就像到小北百貨一樣,如果店家沒有幫你分類成「電腦週邊」、「水電材料」、「衛浴用品」等等好幾大類,那不知道要找多久才能買到你要的東西。

因此這週的專欄想要跟大家介紹 explain() 這個好用的工具,他會把整個 query 的過程列出來,讓你知道過程中花了多少時間、用了哪些 index。有了這些分析之後就可以為你的 query 留下最適合的 index,也讓那些沒路用的 index 無所遁形。

MongoDB

MongoDB Schema 設計指南

在使用像 MongoDB 這類 document-based 的 NoSQL 時,因為每筆資料的格式都是 JSON,而且 MongoDB 也支援很多跟 Object、Array 相關的功能,所以在設計 Schema 時會跟傳統的 SQL Database 有點不一樣,不能直接把 SQL 那套理論原封不動搬過來用哦。

MongoDB Aggregation 優化

用過 MongoDB 一陣子之後應該都會接觸到他的 aggregation,他可以把你想要做的一系列操作寫成一個落落長的 pipeline,譬如說先搜尋、統計、最後做排序。而這篇文章提到了在寫 pipeline 有一些要注意的小地方,雖然有些部分 MongoDB 會幫你最佳化,但還是要注意一下讓你的 aggregation 效能更好。

Do You Need Mongoose When Developing Node.js and MongoDB Applications?

有在 Node.js 中用過 MongoDB 的人應該都知道 Mongoose 這套 ODM,他最大的好處就是可以幫你做 schema validation,讓你的資料庫不會有一堆缺值、型別錯誤的資料。但現在的 MongoDB 內建的 schema validation 也逐漸成熟了,所以下個專案也許可以考慮不需要使用 Mongoose,直接用內建的就好。

前端開發

State of CSS 2022

作者 Adam Argyle 把在 Google IO 2022 上所講的議程內容寫成文章,文章中提到 14 個 CSS 在 2022 或之後的新功能,內容不會鑽研得太過艱澀,如果沒時間看文章也可以把議程影片當 podcast 聽,順便練習英聽 😂。

What If Our Sliders Actually Slid?

這篇文章適合推薦在當你覺得「每天寫的程式都好無聊」或是「工作真無趣」的時候閱讀,作者一個突發奇想想讓 range 使用起來變得有趣而進行的「Creative Coding」

雖然花了好多時間研究和寫出一個看起來沒屁用的東西,但就是這一切讓 Coding 變得很有趣啊!像作者說的:「it takes a little more for us to think “outside the box” and have fun!」

Hoisting in JavaScript explained visually 🔥 😍

把 JavaScript 內的 Hosting 行為做成動畫和程式碼的行數互相對照,不只講解了 var,還有關於用 let 及 const 在宣告時會有的 temporal dead zone。

後端開發

How I became a Web3 dev in just 7 days and got my first 8000$ Web3 contract

作者從事 Full-Stack 開發將近六年,而且從來未處理過有關於區塊鏈或是 Web3,但他熱他挑戰,所以他想要分享如何用七天的時間從零知識到寫出一個 Smart Contract

10 Books Every Senior Engineer Should Read

這篇文章介紹了十本書籍,其中包含著經典,永垂不朽或是足以改變遊戲規則的出版物,雖然主要是針對資深工程師和開發人員來著,但其實不必是資深工程師,任何對於軟體開發有興趣的人都可以從這份書單中受益,透過閱讀來加強開發技能

  1. Extreme Programming Explained: Embrace Change (2nd Edition) by Kent Beck
  2. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation by Jez Humble and David Farley
  3. Remote: Office Not Required by Jason Fried and David Heinemeier Hansson
  4. The Mythical Man-Month by Frederick P. Brooks Jr.
  5. Getting Real
  6. Designing Data-Intensive Apps by Martin Kleppmann
  7. Site Reliability Engineering
  8. The Phoenix Project by Gene Kim, Kevin Behr, and George Spafford
  9. Building Microservices: Designing Fine-Grained Systems by Sam Newman
  10. Modern Software Engineering: Doing What Works to Build Better Software Faster by Dave Farley

Better error handling in Golang: Theory and practical tips

作者介紹幾個在撰寫 Goling 時要怎麼處理錯誤的方法,並且提供了一些技巧,讓你在開發過程中更加容易處理錯誤,例如:為什麼要一再的重複 if err != nil,不要使用 panic() 而是應該要去處理錯誤才對,記得要寫 Log…等

DevOps

Deleting Production in a Few Easy Steps (and How to Fix It)

講解真實環境的災難還原之旅,起初 ArgoCD 因為 path 寫錯導致部署錯誤,而且剛好刪到最核心的業務。當下團隊直覺想到何不 revert 就好,但可惜的是該服務為 stateful 的,且 ArgoCD 會重新創建新的 instance 但會沒有使用者重要的 metadata。於是團隊開始著手災難復原,先把 backing service 裡的資料恢復(文章把相依關係和一些技巧寫的很詳細務必細讀),核心業務的服務暫時上線後先加大硬體和多開幾台應付暫時的大量流量,這趟災難復原總共花了 6 小時。

關於災難復原要做的好,除了平常的備份外,也要熟悉服務相依性、架構和細節才行,而且也得做事後檢討改善部署流程,像是改善生產 YAML 的方式、在生產 YAML 的時候偵測有沒有重複、把 ArgoCD 設定成不能刪除既有的 stateful 資源以及多個 ArgoCD 之間不能互相干涉彼此部署的服務。

Service mesh at scale: How Xbox Cloud Gaming secures 22k pods with Linkerd

文章描述 Microsoft Xbox 如何使用 service mesh 工具 Linkerd 減少維護的人力成本(令我訝異的是原來對延遲要求甚高的遊戲也會用 service mesh),團隊一開始考慮的工具有 Istio、Linkerd、Consul Connect 和其他工具,但最後還是選擇 Linkerd,原因如下:

  • 容易設定 mTLS
  • 因為有 Service Mesh Interface API 所以跟其他 CNCF 專案工具有很好的整合
  • mTLS 是從 proxy level 下手,不用特別呼叫專門的 mTLS 服務可以減少 100ms 的延遲
  • 更好的網路流量監控,而且很多功能都開箱即用

Build or Buy? Developer Productivity vs. Flexibility

設計架構時應該要選怎樣的工具?雲服務還是地端?高階語言還是低階語言做開發?自架還是託管服務?自己設計工具還是使用 SaaS?文章給了一個當開發時應該選擇用 library 還是 API 當作範例參考,在選擇的過程中,其中最大的兩個原則是這個專案是否跟核心業務有關,以及這個專案是否可以透過客製化獲得商業上的成功。

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 - 熱愛鑽研各種可以提升雲端服務品質及增進團隊開發效率的開源技術。
  • @RicoChen - 熱愛許多技術且努力看透技術的本質,如果有什麼好玩的技術,還請各位歡迎直接找我聊聊。

Feedback

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