第 47 期 - 鐵人賽開賽了,那就來新增一個鐵人賽的分類推薦好文給大家

本週專欄

GitOps — 透過 Argo CD 認識 GitOps

兩年前初次聽到 GitOps 的時候,我想說是不是只要 Git tag 觸發一些部屬相關的事情,像是下了某個 tag,就會觸發某 Ansible 的工作,部屬某一台伺服器。很遺憾,完全不是我想的那樣。在最近實際將 GitOps 整合進開發流程的過程中,深入研究了一下 GitOps。對 GitOps 有了多一點的了解,趁這個機會來跟大家分享一下。

前端開發

5 SOLID principles with JavaScript. How to make your code SOLID

SOLID 是物件導向的基本原則,但是主要都是為了讓程式好維護且易於擴充的程式碼而已,一起來看看如何運用 JavaScript 玩轉 SOLID 的特性吧!

How to Build and Validate Beautiful Forms with Vanilla HTML, CSS, & JS

如果你使用 React、Vue 或 Angular,那你一定可以用它們製作許多厲害的表單,但如果你還不熟網頁開發的話,建議還是可以先用原生的方式撰寫一些簡單的頁面,來加強自己的基本知識哦!

Vue3.0 不畏惧祖传代码的 Composition API

前陣子才知道原來 Vue 在 GitHub 上的 star 數已經比 React 還要高了,而前陣子我也才剛學習 Vue 框架,Vue3 就接著出來,從文中的計時器例子來看 Vue3 真的改善了 Vue 需要定義許多區塊的問題(但別看一開始的那幾張圖,我完全看不懂,哈哈哈哈哈)!

電腦科學

進程、線程、協程,傻傻分得清楚!

要成為一個優秀的軟體工程師,一定要掌握作業系統中進程(Process)跟線程(Thread)的概念,雖然不了解也可以寫出跑得動的程式,但效能方面可能就不會太好

前端工程師用 javaScript 學演算法

要成為一個優秀的軟體工程師(怎麼又是這個開場 XD),資料結構跟演算法也是不可或缺的。這一系列介紹了各種資料結構如 Stack、Queue、Linked List 還有很多種演算法,重點是他還是用 JS 寫的!不太熟悉 C/C++ 又想練演算法的話看這個就對了

顛覆世界的「電腦」是怎麼誕生的呢?

身為一個軟體工程師,就算不懂作業系統跟演算法,也一定要知道電腦是怎麼怎麼發明出來的。這篇文章會跟大家介紹到 馮.紐曼圖靈 這兩個電腦科學界的名人,沒有他們兩個,很可能就沒有今天的電腦(後面太偏數學看不懂沒關係,只要知道這兩個人就可以了 XD)

鐵人賽

歐洲碼農的新手村任務“專欄介紹

由在柏林工作的資料科學家 bymiachang 帶來歐洲的求職經驗分享。內容包含個面相的求職思考,好期待這個系列文阿。

I Want To Know React - Component 內部原理 & 使用技巧

我想知道 React 多一點,這個系列文介紹了 React.js 的運用方式,與內部原理。這篇介紹的是 prop,下一篇則是介紹 state。

拯救資工系學生的基本素養—使用 GDB 除錯基本教學

由知名技術人微中子帶來的,GDB Debug Rust 的影片教學。也有文章可以看。我 ok,你先看。

DevOps

Docker Desktop 把 Snyk 直接整合在一起了!

今年五月就有發佈 Docker 跟 Snyk 要一起合作的消息,而今天一起推出直接在 Docker Desktop CLI 中可以透過 Snyk Sacn Container Image 的功能,沒錯!以後只要在 Docker Image 已經在本機端,再多下一個 ~$ docker scan #{IMAGE_NAME} 就可以幫開發者立即完成掃描,立即更新 Docker Desktop 到最新版,馬上離 DevSecOps 又更近了一步XD

GitHub CLI GA 啦~

再經過 Beta 公測之後,GitHub CLI 於今天正式宣布 GA,以後滿多 GitHub 平台的操作都可以透過 CLI 來完成,讓熱愛使用 Terminal 的開發者更方便了XD 例如可以列出有什麼 Issue,簡易的管理 PR;而且他有個 subcommand ~$ gh api 允許使用者可以無受限地直接存取 GitHub API,底下附上 Repository,有興趣的人可以趕快裝來玩玩看嘍!

gitlab.com 搬遷到 K8S 運行一年的酸甜苦辣

差不多在一年前 GitLab 的 Infra 部門決定要將運行在 gitlab.com 上的所有服務搬遷到 K8S 上,一路上遇到許多的挑戰,因為不只是要搬而已,還必須要管理搬遷過渡時期的混和部署,在過程中學習到了不少值得分享的課題,因此有了這篇文章;在舊環境是使用 VM 搭配上 Chef 來做 Provision 或是既有環境的管理,而新的環境則是則是使用 Terraform 跟 Helm 來完成所有的事情,也把這些設定的相關組態開源成三個專案 k8s-workloads/gitlab-com, k8s-workloads/gitlab-helmfiles, gitlab-com-infrastructure (Terraform + Heml 真的是在 Cloud Native 時代很棒的管理組合,自己也都是這樣弄),而搬遷過程中學習到了幾件事情包含了…

  1. 跨 Availability Zone 網路流量所造成的 GCP 帳單金額上升,所以他們正在考慮將使用到大量頻寬服務拆分到其他獨立的單一 AZ K8S Cluster,將 Redundancy 實作在 Cluster 層級

  2. 在 K8S Pod 資源的管理上,本來是使用較低的 Request 搭配上較高 Limit,不過這樣會造成 Pod 一直在 Node 之間被趕來趕去的;所以後來對於 Memory 需求量比較大的應用服務會使用 較高的 Request 搭上上較低的 Limit

  3. 在這一年間也順便改進了監控跟管理 SLO 的方式,而且在搬遷的過程中除了要一直持續的監看 Metric 變化之外,也要搭配 Log 一起看,因為有一些問題發生了也無法立即從 Metric 觀察出來,而且 User Ruqest 會同時被送到舊的 VM 跟新的 K8S 環境上,必須要有辦法兩個同時一起監控

  4. 利用 Canary 的方式,再將流量逐漸導流到新的 K8S Cluster 時,持續的監控是否有達到訂定的 SLO,舊的 VM 環境還是會留著,因為要是遇到問題的話就要 Rollback 回舊的環境

  5. Pod 啟動時間太長在準備搬遷的一開始就有被發現,例如 Sidekiq 花了兩分鐘才啟動完畢,而原因是因為 HPA 雖然可以很好的應付增長的流量,但是遇到突然的 Spike 時,節點會來不及生出來;所以後來使用比較大的 Pod Budget,並且讓 Scale Down 發生的時間點往後,在持續透過監控 SLO 的調教過程後,目前已經將時間縮短到 40 秒

StarBugs Weekly

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

Curators:

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

Feedback

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