Skip to Content

WWW 0x06: Life is short. I hate GIL

這裡是 WWW 第陸期,Wow Weihang Weekly 是一個毫無章法的個人週刊,出刊週期極不固定,從一週到五年都有可能。初期內容以軟體工程為主,等財富自由後會有更多雜食篇章。

WebAssembly Isolation with Tyler McMullen

聽了一集個人覺得不難但蠻有內容的 Podcast,主要在講 Isolation 和 WebAssembly 相關的知識,我覺得 web developer 都很值得稍微聽一下,內容包含:

  1. 概要提點了 VM vs. Container 等各種 Isolation 的差異
  2. WASM 如何 isolation workloads:限制 jump instruction 跳到任意的地方 etc.
  3. Fastly 為什麼要使用 WASM: 一個請求本來可能要起 container,但 container 啟動時間還是不夠快,WASM 的 isolation 可以提供安全快速的環境
  4. WASM 使用 linear memory model:和一般的 virtual memory 不同,memory space 是連續性一個 block,需要用到更多再與系統 / 瀏覽器請求
  5. WASM 還在解決的問題:與外部世界互動的標準還沒完整, 但可以參考 Fastly 和 Mozilla 等幾個大廠訂定的 WASI(WebAssembly System Interface)
  6. WASM 目前 function pointer 只能用 dynamic dispatch,對要求極極極高效能的應用場景較不吃香
  7. 市面上的 WASM runtime:lucetwasmtime(個人補充 wasmer)

Note: Fastly 是市面上前十大的 CDN provider(約第六)

An Introduction to Python Concurrency

如果你想用 Python 寫 Concurrency Programming,大推這篇!

雖然這份簡報因為早在 2010 年製作,沒有提到 async/await,但內容非常紮實,摘錄我有印象的點:

  • threading 應用時機與底層概念
  • 各種常見鎖的原理與應用時機
  • GIL 原理以及如何克服
  • multiprocessing 應用時機,並與 threading 比較
  • 使用上述工具實作高層次抽象的 message queue、event communication

其中讓孤陋寡聞的我最驚艷的是,原來 pickle 可以再 thread/process 中序列化 class instance,太好用了!

Load balancing and scaling long-lived connections in Kubernetes

一行摘要:Kubernetes 的 Service 資源提供負載均衡功能,但並沒提供 long-lived connection 負載均衡。如果使用 gRPC、AMQP、HTTP/2 或資料庫連線等,可能需要做 client-side 負載均衡。

本篇圖文並茂,詳細說明:

  • Kubernetes 如何透過 Service 做 proxy
  • 但 iptable 用機率選擇 IP 而不算能有做負載均衡
  • long-lived connection 為什麼會造成負載不均衡
  • 如何解決 long-lived connection 造成負載不均衡的問題
    1. 做 client-side 負載均衡:提供 client 所有服務節點,讓 client 自己選擇要送到哪個節點
    2. 用 service mesh(LinkerdIstio
  • 哪些情境下可暫時忽略這個問題,哪些不行
    • ✅ 多 client 少 server
    • ❌ 少 client 多 server

本文連圖片都有 step-by-step guide,不愧是教學為重的 learnk8s.io