概要
- 技術界隈には「バズワード追求派」と「常識重視派」の2つの陣営が存在
- 最近は「Small Data」ムーブメントと「Postgresルネサンス」が常識派を後押し
- Postgresは多くの用途でシンプルかつ十分な性能を発揮
- Kafkaのような高度な分散システムが不要なケースが多い現実
- 本記事ではPostgresのpub/sub・キュー用途でのスケーラビリティをベンチマーク
技術界隈の2つの陣営
-
バズワード追求派 :流行りの技術やキーワード(例:real-time, cloud-native, AI-powered)を深く考えずに採用
-
履歴書駆動設計 (Resume-driven design)の蔓延
-
コンサルタントやシステム設計面接 が「Googleスケール」な技術選定を推奨
-
キャリア評価 も「最新スタック」へのリプレースが重視される傾向
-
常識重視派 :本質的な要件から技術選定を行い、複雑化や過剰設計を避ける
-
ベンダーの主張やマーケティング に懐疑的な姿勢
-
シンプルで堅牢な設計 を優先
最近のトレンド
-
Small Dataムーブメント
- 多くの組織のデータ量は想定より小規模
- 最新ハードウェア (例:128コア/4TB RAMサーバ)が容易に利用可能
- 「それで十分」なケースが増加
-
Postgresルネサンス
- Postgres一択 (Just Use Postgres)の風潮
- 既存の多用途DBとしての進化(例:全文検索、JSON、UNLOGGED TABLE、ベクトルDB対応)
- Elasticsearch、MongoDB、Redis、Snowflake、Kafka など専用システムの8割以上の用途を2割の工数でカバー(パレートの法則)
PostgresとKafkaの比較
- Postgres :シンプル、スケーラブル、信頼性高、長年の実績
- Kafka :より大規模なスケール対応、堅牢なpub/sub基盤
- 小規模〜中規模用途ではPostgresで十分 なケースが多い
- 「最適な技術選択」は技術的観点だけでなく実用性重視が重要
本記事の目的
- Postgresのpub/sub用途でのスケール限界のベンチマーク
- Postgresのキュー用途でのスケール限界のベンチマーク
- どんな場合にPostgresが適しているかの考察
- 詳細な技術評価や網羅的な検証ではなく、実用的なデータポイント提示が目的
ベンチマーク結果(要約)
-
Pub/Sub
- シングルノードc7i.xlarge:書込4.8MiB/s、読込24.6MiB/s、最大60msレイテンシ
- 3ノードレプリケーション:書込4.9MiB/s、読込24.5MiB/s、最大186msレイテンシ
- シングルノードc7i.24xlarge:書込238MiB/s、読込1.16GiB/s、最大853msレイテンシ
-
Queue
- シングルノードc7i.xlarge:合計2.81MiB/s、最大17.7msレイテンシ
- 3ノードレプリケーション:合計2.34MiB/s、最大920msレイテンシ(レプリケーション遅延)
- シングルノードc7i.24xlarge:合計19.7MiB/s、最大930msレイテンシ
Postgresのpub/sub・キュー構成
- Queue :ポイント・ツー・ポイント通信、1回消費で即削除、厳密な順序保証なし
- Pub/Sub :1対多通信、ディスク保存で読者と書込を分離、厳密な順序保証あり
- Kafka :Log構造を用いた標準的pub/subシステム、Postgresで再現可能
実装概要
-
書込
- 各トピックパーティションごとに専用テーブル
- log_counterテーブル でオフセット管理
- バッチ書込+オフセット更新 をトランザクションで一括実行
-
読込
- consumer_offsetsテーブル で各コンシューマグループの進捗管理
- トランザクション内でバッチ取得+オフセット更新
- Kafka同様のat-least-once/at-most-once処理
-
NOTIFY/LISTEN は最適化用途で完全な信頼不可、基本はポーリング設計
結論・考察
- Postgresは多くのpub/sub・キュー用途で十分な性能
- Kafkaのような分散システムは本当に必要な場合のみ選択
- 技術選定は「実用性」「シンプルさ」「運用容易性」を重視
- 小規模・中規模用途ではPostgresの活用が合理的
参考文献・関連リンク
- GitHub: stanislavkozlovski/pg-queue-pubsub-benchmark
- PG as Queue ブログ(Adriano著, 2023年)