第 175 期 - 當我 walking on the street,看到 Medium 被人帶走
本週專欄
Replacing Medium with Hexo
本文介紹了一個幾乎沒有額外負擔的取代 Medium 的完整解決方案。作者過去一年半的時間每週發佈一篇文章,旨在獲得更多持續的曝光並吸引軟體工程師進行討論。然而,作者發現文章曝光的演算法需要大幅修改,儘管追隨者數超過 1,000,但實際閱讀數非常有限。因此,作者決定建立自己的 blog,並提出了對 blog 的幾項要求。
作者最終選擇使用 Hexo 和 Github Pages 來構建自己的網站。Hexo 具有內建功能,生成的靜態網站可以直接作為 Github Pages 呈現,無需額外操作。通過整合 Github Action,寫完 Markdown 文件後,只需將其推送到 Github,就可以自動發佈,這與在 Medium 上發佈文章的過程幾乎相同。為了實現對圖表和 Mermaid 的支援,作者選擇了 NexT 主題。此外,作者還使用 VS Code 和 Paste Image 插件實現了剪貼板上傳圖片的功能。
整篇文章介紹了 Hexo、Hexo Action 和 NexT 主題的基本用法,並提供了在 Github Pages 上快速生成 blog 的 SOP。作者還解釋了如何在 Hexo 中處理圖片並使用剪貼板上傳圖片。通過結合這些組件,作者能夠以比在 Medium 上更高效的方式撰寫文章,並消除了複製貼上 Mermaid 和表格的困擾。
總之,通過結合 Hexo、Github Action、Github Pages 和 NexT 等工具,作者能夠以更有效的方式撰寫文章,並解決了在 Medium 上的一些限制。作者計劃根據收集的追蹤數據逐步調整發佈頻率和內容。這是作者作為一名數據架構師對 Medium 和自己擁有的 blog 的實驗。
Backend
Load Balancing - Introduction
(由 Kashiwa 推薦)這篇文章言簡意賅地介紹了負載均衡於網頁請求和返回之間的關係,並且分析了負載均衡所想要解決的問題:dropped request 和 latency。而且文章還有很多圖片跟動畫幫助你理解,如果想了解 Load Balancing 更多的話很推薦這篇文章
PostgreSQL 技術筆記: 跟疾管署沒有關係的 CDC
本文介紹了 Dcard 中使用 PostgreSQL CDC(Change Data Capture)的運作原理。Dcard 的系統架構中,許多服務元件使用 PostgreSQL 進行資料儲存。為了避免直接使用生產資料庫對效能和安全性造成影響,Dcard 採用了 Microservices 架構,將不同服務獨立部署在各自的 PostgreSQL 資料庫中。
為了方便管理和查詢,Dcard 的開發團隊開發了一個 OfflineDB Proxy 服務,通過該服務可以使用特定的 on-demand 服務來存取和管理 PostgreSQL 複本資料庫。在此基礎上,開發了 PostgreSQL CDC 技術,使複本資料庫能夠提供近乎即時的資料。通過 CDC 服務,許多其他服務元件可以通過數據流的方式獲取資料庫的異動資料,從而保證了服務間的流程設計的完整性,提供更可靠和穩定的 Dcard 服務。
文章介紹了各個模組間的設計概念,包括 OfflineDB Proxy、Snapshot Rotate Job、Postgres Protocol Handle 和 Resource Controller 等。此外,還介紹了使用 PostgreSQL Replication 機制來獲取異動資料,以及使用 Apache Pulsar 作為儲存 Change Data 的消息隊列服務。文章還提到了 pg2pulsar 和 pulsar2pg 兩個程序,用於處理 Change Data 的儲存和同步。最後,介紹了 CDC Stream Gateway,通過這個服務可以簡化應用程式與消息隊列之間的處理,提供給各種不同的流式應用程式使用。
整個系統的架構和流程如圖所示,包括 OfflineDB Proxy、CDC、和 Stream Gateway。通過這些模塊的搭建和運作,可以實現 Dcard 的即時性和異動資料的同步更新,並提供給各種不同的應用程式使用。
文章最後提到,目前 Dcard 已經在數十個 CDC Stream 應用中使用了這些技術,並且不斷進行優化和探索。同時,Dcard 還在計劃和開發其他類型資料庫的 CDC 服務,如 MongoDB 等。
課程筆記 - 即使通訊與傳輸(realtime、streaming、websocket)
本篇摘要整理自 Frontend Masters 的 “Complete Intro to Real-Time” 課程。
簡介了以下主題:Long Polling(輪詢)、使用 setTimeout、requestAnimationFrame、Backoff and Retry(放棄或重試)、HTTP/2 Push、WebSocket、以及 Socket.IO。
在 Long Polling(輪詢)中,透過 AJAX 方式持續向服務器發送請求。使用 setTimeout 而非 setInterval 來進行輪詢,避免在 API 回應慢時打多次 API 請求。另外,也介紹了 requestAnimationFrame 來替代 setTimeout,以達到更好的性能和節能效果。
在 Backoff and Retry(放棄或重試)中,介紹了當 API 請求失敗時的處理機制,建議使用 backoff and retry 的方式,即在每次失敗後延遲一段時間再重試,並逐漸增加延遲時間。
在 HTTP/2 Push 中,說明了建立 WebSocket 連線的過程,包括使用 self-signed 的憑證、回傳特定的 headers 等。並介紹了如何在後端和前端進行相應的程式碼實現,以及如何處理資料的傳遞。
在自己實作 WebSocket 部分,提到了使用 WebSocket 和 HTTP 之間的協定升級過程,以及如何在後端和前端進行程式碼的實現。還提到了 WebSocket 中資料交換的格式和解析方法。
最後,介紹了使用 Socket.IO 來進行即時通訊的方式,並且提到了 Socket.IO 相對於 WebSocket 和 ws 套件的優勢,包括自動重新連線、兼容性等。
以上是本篇摘要。詳細內容可參考相應的課程和資料來源。
Golang
Step up Your Go App Testing Game With the Testify Framework
如果你才剛開始在學 Go,那你絕對不能不知道 Testify 這個好用的 testing library,他幫你簡化了很多常用的操作譬如說 assert.Equal
跟 assert.noError
等等,讓你可以更快寫出正確的測試。除此之外,他也讓你可以輕鬆的造出一個 mock object,所以別猶豫,趕快讓 Testify 成為你的好幫手,讓你的測試寫起來更漂亮!
Go 當中的 sync pattern
這篇文章比較進階一點,文中從 Mutex、Semaphore 講到 Channel,帶你看看這些不同的 sync pattern 各自有什麼優缺點。看完這篇文章之後,你就會知道在 Go 裡面要怎麼解決各種 multi thread 的問題!
SwissMap: A smaller, faster Golang Hash Table
SwissMap 聽起來像某一款高級巧克力的名字,但實際上,他是一個 Go 的 Hash Table package。他號稱比 Go 內建的 map 更快、記憶體的使用量也更少,是 Dolt 為了解決自身的問題而設計出來的。這篇文章講解了他們是怎麼設計跟實作 SwissMap,而且也提供了 Benchmark 給你參考,證明他們設計的這個 Hash Table 真的很不錯。
DevOps
4 Tools that Make it Easy to manage your Kubernetes Cluster
作者介紹了四個 Kubernetes 工具,K8sgpt、K9s、Lens 和 Rancher。其中最吸引的莫過於 K8sgpt,他會掃描整個 Kubrenetes 叢集後給予人性化的 troubleshooting 解答,也可以讓非維運人員看懂哪裡出問題。
Recover your Amazon EC2 instance when SSH key pair is lost
新手剛開始使用 AWS 有很高機率遺失 ssh key,這篇文章一步一步帶著讀者怎麼挽救,原理就是把原本機器上的硬碟掛載到另外一台機器上(中間有許多小障礙文章都有解法),之後把新的 .ssh/authorized_keys 複製到硬碟上,再把硬碟掛載回舊的機器即可用新的 ssh key 連線到舊機器了。
How to Learn Linux Shell Scripting for DevOps?
Linux shell script 是到哪裡都很萬用的工具,作者彙整了有關 shell script 學習資源、現實場景的範例、可能需要 shell script 的場景或面試時可能會遇到的問題。
Writer:
- @lazypro - 從 embedded 到 kernel,從 device 上雲端,程式無涯、無法靠岸,軟體的求道者。
Maintainers:
- @LarryLu - 我是 Larry,傳說中的 0.1 倍工程師!
- @GQSM - Hi!我是神 Q 超人,一個先衝再說的男人。
- @LukaTW - 一名全身都是死角的工程師。
- @smalltown - 熱愛鑽研各種可以提升雲端服務品質及增進團隊開發效率的開源技術。
- @RicoChen - 熱愛許多技術且努力看透技術的本質,如果有什麼好玩的技術,還請各位歡迎直接找我聊聊。
Feedback
本週呈現主題方式做了一些改變,希望讓讀者能夠更快速精準的找到自己要的資訊。也加入社群活動這個區塊,每週更新社群活動的資訊。如果有任何建議,歡迎私訊 星巴哥技術週刊 FB 粉絲專頁 與我們聯繫。