第 147 期 - 吃月餅時就不要考慮熱量問題了!

本週專欄

Stream Processing Introduction

大家好,這週的專欄是 Starbugs Writers 吳俊廷 所分享的 「Stream Processing Introduction」

當需要處理的資料不是固定數量,而是河流一樣源源不絕的流進來,甚至可能沒有處理完的一天,那處理的方式就要從傳統的「Batch processing」變成「Stream processing」。這週的專欄會簡單介紹一下何謂 Stream Processing,除此之外,針對 Stream 類型的資料,也會講幾種比較常見的處理方式,讓大家對於 Streaming Data 的處理有基本的認識~

前端開發

HSemantic elements in HTML: why use them

語義化在軟體開發上非常重要,因為它能夠使我們的程式碼更容易閱讀。本篇文章列出幾個在 HTML 中的語義元素,並介紹語義元素的優點及它們各自的使用範例。雖然要把所有的 HTML 元素背起來幾乎不可能,但是看過有個印象後,下次就能大概知道這邊好像有個元素可用。 😂

Algorithms in JavaScript with visual examples.

想要學演算法的前端工程師絕對不能錯過這篇,作者從時間複雜度開始解釋一些日常生活中常見的搜尋或排序演算法,在文章裡面除了程式碼之外,還搭配了圖片、動畫等等,幫助理解各個算法在執行時發生了什麼事情。

You’re Not Using HTTP Status Codes Right

在開發網頁的時候,前端常會和後端討論 API 如果發生什麼事情,應該要回傳什麼 HTTP status codes,比較常見的是 200、400、401、404 等等,但有些 HTTP status codes 提供的意思實在是讓人搞不太清楚,常常誤用了也不曉得,而本篇的作者就會來解釋關於 Empty resource 應該要用什麼 HTTP status codes 表示。另外文章下方留言提到 graphql 的實踐也滿有趣的,看完文章可以順便看看。

Golang

Prevent Logging Secrets in Go by Using Custom Types

在 Go 裡面進行 logging 時,如果一個不注意,可能會不小心把重要的 secret 輸出到 log。為了避免這種情況,這篇文章教你怎麼使用 custom types 來自動幫 secret 打碼,即便不小心輸出了,看起來也會是 ***** 的樣子。

Trying Clean Architecture on Golang

有點經驗的工程師應該都聽過所謂 Clean Architecture,因為 Clean Architecture 主要是一種概念而不是告訴你細節該如何實作,所以這篇文章嘗試用自己的方式去實現 Clean Architecture 的精神,而且也把程式碼公開出來給大家參考。

5 concurrency patterns in Golang

Go 身為一個很擅長做 concurrency 的語言,為了方便對開出來的 goroutine 進行管理,逐漸發展出一些很常見的 pattern,如果你正在煩惱要怎麼有效管理、整合各個 goroutine 的話,也許這篇文章能給你一些靈感。

DevOps

Why is Kafka fast?

為什麼 Kafka 這麼快?在進入正文前務必搭配影片一起看可以幫助理解。Kafka 之所以快主要有兩個原因,Kafka 在讀寫硬碟資料時 I/O 的操作是連續性的,可以在使用 HDD 硬碟減少成本的情況下依然有不錯的速度,以及在從硬碟讀取資料要給 consumer 時靠 zero-copy 也就是靠直接記憶體存取 (Direct Memory Access,DMA)減少 system calls。文章只有說減少 system calls 而已,歡迎觀看影片。

Orchestration and choreography

微服務之間合作時可以分為 Orchestration 和 Choreography 兩種方式。Orchestration 如常見的交響樂一般,不同樂器的音樂家都看指揮的指示;Choreography 如舞蹈表演,各個舞者跳舞的時候是沒有專門的指揮,要看整體成員的狀況而怎麼跳舞。兩種服務的合作模式各有優缺點,在規劃架構時可以考慮考慮。

Black Friday flash sale

當黑色星期五時系統應該要做什麼準備?從前端一路到後端我們都要設法加裝各種關卡來處理真正的交易,畢竟網路上機器人太多,像是 reCaptcha、CDN、rate limit 和 lock 機制。另外也得注意處理各個交易時不要因為系統設計造成超賣,甚至可以把服務和快取做獨立,專為黑色星期五的流量做準備。

ArgoCD

ArgoCD ApplicationSet Generators

在 ArgoCD ApplicationSet 推出不久後就開始使用了,那個時候只有三個 Generator,分別是 Cluster Generator, Git Directory Generator 和 Git File Generator (當時寫的 ArgoCD ApplicationSet 詳細介紹文),在經過一年多後,現在 Generator 多了不少類型,讓 ApplicationSet 變得更加完整且實用,底下稍微提一下這些新增的 Generator 分別可以達成什麼目的:

👉 Matrix Generator: 可以把兩種基礎 Generator 混合使用
👉 Merge Generator: 讓使用者先採用的基本 Generator,然後再透過其他 Generator 獲得的參數來做覆寫 (感覺使用時要小心)
👉 SCM Provider Generator: 用來產生 ArgoCD 所定義的 Repository 資源 (可以把同一個 Git Organization 底下的所有 Repository 都撈出來)
👉 Pull Request Generator: 當 Git Pull Request 開啟時,根據 PR 的內容產生測試環境出來
👉 Cluster Decision Resource Generator: 用來產生 ArgoCD 所定義的 Cluster 資源

其中 Pull Request Generator 是我最喜歡的一個,因為如此一來就可以讓 ArgoCD 輕易地達成 Git Pull Request 的開發流程,而 SCM Provider Generator 和 Cluster Decision Resource Generator 自己覺得雖然放在 ArgoCD ApplicationSet 裡面有點突兀,,因為他並不是用來產生 ArgoCD Application,但確實是很實用的功能;除此之外 Git Generator 現在可以對 Path 做 Exclude,自己目前已經使用它來解決 Prometheus CRD 遇到的問題 (GitHub Issue)

2022 Argo external security audit: Lessons learned

Argo 團隊和 CNCF 在 2022 年初開始和 Ada Logics 對 Argo 的四個 Project 進行安全稽核,結果確認了 26 個問題,其中 7 個在 Argo CD, 6 個在 Argo Workflow,13 個在 Argo Events

這些問題當中存在著 9 個 CVE,有 7 個 在 Argo CD 以及 2 個在 Argo Events,至於其他的則被當成 non-CVE,詳細的稽核報告與 CVE 細解可以參閱內文,其中不乏有風險等級來到 Critical 和 High 的 CVE,所以大家一定要記得將使用到的 Argo 相關 Project 進行升級

Solving ArgoCD Secret Management with the argocd-vault-plugin

GitOps 在 2017 由 Weaveworks 提出後,目前已經毫無疑問成為管理 Kubernetes 的主流方式,而每次在 GitOps 相關主題的討論,分享,演講…等,其中一定會被人提出來的問題就是在 GitOps 的架構下要如何去做 Secret Management,而作者的團隊當初選擇使用的 GitOps 工具為 ArgoCD,Secret Management 則為 HashiCorp Vault,在遍尋了既有的工具之後,發現採用的障礙都很高,甚至需要手動加密或是安裝其他的 Operator 來達成,並沒有找到符合自己團隊需求的解決方式

所以他們就決定自己建立自己的工具,也就是 argocd-vault-plugin,他們透過 ArgoCD 的 Custom Plugin Patten 來開發這個工具,透過他就可以從 HashiCorp Vault 取得 Secret,並將其注入到 Kubernetes 的 YAML 檔案內,實際安裝與使用方式可以參閱內文,這個工具在去年二月誕生,去年五月發布 V1.0 時也一併支援了 AWS Secret Manager(Reference),專案也持續活躍的更新當中 (GitHub Repository),最近也有看到其他人的文章在分享這個工具,分享給有需要將 ArgoCD 與 HashiCorp Vault 整合在一起的人

StarBugs Weekly

StarBugs Weekly 由一群不寫文章就會想要亂花錢,但是又沒有那麼多錢,只好繼續寫文章的開發者所創立。
內容包含 Web 前端、中端、後端、DevOps、產品開發、精實創業,一切跟產品有關的知識,都是我們的守備範圍!
不想漏追科技新聞的人,趕緊把 StarBugs Telegram Bot 訂閱起來 https://t.me/starbugs_weekly_bot (對機器人說 /subscribe 即可)

另外,為了讓 Starbugs 的專欄有更多豐富、優質的內容,我們決定要開始誠徵 Writer 了。如果你本來就有在寫文章,對於文章的品質有要求、而且也樂於分享討論技術,那很歡迎你以 Writer 的身份加入我們。請動動手指頭私訊我們粉專 星巴哥技術週刊,並附上自我介紹跟最近寫的文章,就有機會加入我們唷 🙌

Writers:

  • @HannahLin - 從台灣到矽谷,熱愛前端的工程師女孩。
  • @KyleMo - 雜食性軟體工程師,喜歡的技術我都想學。
  • @Airwaves - Hi~我是 Airwaves,熱愛研究如何造輪子的前端工程師。
  • @Andy - 目標成為用嘴巴工作的工程師,專長為網頁開發以及 K8s。
  • @lazypro - 從 embedded 到 kernel,從 device 上雲端,程式無涯、無法靠岸,軟體的求道者。
  • @ianchen0119 - 5G 領域研究生,同時也是喜歡學習不同領域技術的工程師。
  • @00-talk - 我是 00,脖子痠痛的前端生命鬥士。

Maintainers:

  • @GQSM - Hi!我是神 Q 超人,一個先衝再說的男人。
  • @LarryLu - 我是 Larry,傳說中的 0.1 倍工程師!
  • @LukaJoJo - 一名全身都是死角的工程師。
  • @smalltown - 熱愛鑽研各種可以提升雲端服務品質及增進團隊開發效率的開源技術。
  • @RicoChen - 熱愛許多技術且努力看透技術的本質,如果有什麼好玩的技術,還請各位歡迎直接找我聊聊。

Feedback

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