Skip to content
所有標籤

#distributed-systems

10 篇文章

Apache Kafka:不是把訊息排隊,而是保存可重播的事件日誌

Kafka 的核心是依 partition 排序、依 retention 保存的分散式 log;consumer group 用 offset 分工,exactly-once 只在 Kafka transaction 能涵蓋的邊界內成立。

Apache Pulsar:把 stateless broker 與 BookKeeper 儲存拆開的事件平台

Pulsar 將 serving 與 storage 分離:stateless broker 處理連線,BookKeeper 保存 ledger 與 subscription cursor;彈性與多租戶能力換來更多營運元件。

Cloudflare Durable Objects:讓 Workers 有狀態、協調與 WebSocket 的那塊拼圖

Durable Objects 把一個 name 或 ID 對到全球唯一、單執行緒、帶私有 SQLite storage 的 actor。它適合 per-room、per-user、per-tenant、per-run 這種需要強一致協調的邊界;真正的設計題是 object key 要切在哪裡。

gRPC 與 Connect:同一份 Protobuf 合約如何跨服務與瀏覽器

gRPC 以 Protobuf service 產生跨語言 stub;Connect server 可同時支援 gRPC、gRPC-Web 與 Connect protocol,讓瀏覽器不必額外翻譯 proxy。

NATS 與 JetStream:先選即時訊息還是持久事件,再談同一套 API

Core NATS 是不落盤的 at-most-once pub/sub;JetStream 才加入 stream、consumer、ack、retention 與重播。兩者同用 subject,可靠性契約卻完全不同。

Protobuf 與 Buf:把跨語言 schema 的 lint、codegen 與相容性放進 CI

Protobuf 用穩定 field number 定義 binary message;Buf 補上 module、lint、remote plugin、generation 與 breaking-change check,讓 schema 能被治理。

RabbitMQ:先用 exchange 表達路由,再用 quorum queue 保住工作

RabbitMQ 的強項是 exchange、binding 與 queue 組成的訊息路由;需要高可用時以 quorum queue 為預設,並同時啟用 publisher confirm、manual ack 與冪等 consumer。

tech deep-dive 自架推論服務

Ray Serve 自架推論服務:Python 服務圖、GPU 排程與自動擴縮

Ray Serve 是建立在 Ray 上的分散式 serving layer:用 deployment 與 handle 組合 Python 服務圖,配置 CPU/GPU replica、自動擴縮與模型多工;它負責編排,不取代 vLLM 或 SGLang 的 LLM 執行引擎。

Redpanda:Kafka API 相容,不代表換 broker 可以不做驗證

Redpanda 以 C++/Seastar、thread-per-core 與每個 partition 的 Raft group 重做 Kafka-compatible event log;client 相容度高,營運與邊角語意仍須實測。

Restate:把 journal、durable state 與服務呼叫放進同一個執行模型

Restate 以 journal 記錄操作與結果,失敗後重跑 handler 並跳過已完成操作;Virtual Object 與 Workflow 再提供 keyed state、single-writer 與長期協調。