Jepsen: NATS 2.12.1

2025/12/09 3:51

Jepsen: NATS 2.12.1

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

(欠落している要素をすべて組み込み、根拠のない推測を除去したもの)


要約

NATS JetStream のデフォルト「lazy‑fsync」ポリシーは、データをディスクにフラッシュする頻度が 2 分ごとにしか設定されていないため、データ損失およびサービス障害の重大なリスクを生じます。ノードがクラッシュしたり、そのブロック(.blk)やスナップショットファイルが破損すると、最大 78 % のメッセージが消失し、クラスターがクォーラムを失う可能性があります(GitHub issue #7549 および #7556)。協調クラッシュでも、全ストリームが削除されるケース (#6888) や永続的に利用不可になるケース (#7556) が報告されています。この問題は、単一ノードのクラッシュでそのノード上のすべてのデータが消去される点と、2 分間隔という設定が安全なフラッシュ前に約 30 秒分のトラフィックを失うリスク(#7564)を伴うため、さらに深刻です。

JetStream v2.10.22 はクラッシュ時に全ストリームを削除するバグ(v2.10.23 で修正済み)が存在し、スナップショットファイルの切断や単一ビットエラーもノードがストリームデータを削除しクォーラム復旧に失敗して永続的に利用不可になる原因となっていました(#7556)。OS のクラッシュとプロセス停止またはネットワーク分離の組み合わせにより、単一ノードの障害でもデータ損失や持続的なスプリットブレインが発生する可能性があります(#7567)。

NATS は lazy‑fsync ポリシーを文書化していますが、現時点でデフォルト設定変更を推奨していません。Jepsen は fsync を「always」に設定するか、ユーザーに対して相関失敗リスクを強調するよう勧告しています。JetStream のドキュメントが主張する線形性(linearizability)と「自己修復・常時可用性」は非同期ネットワークの CAP 定理に矛盾し、Jepsen もこの点を指摘しています。

Jepsen の LazyFS テストは、書き込みをディスクフラッシュ前にバッファリングするシステムで電源障害をシミュレートし、同様の相関ハードウェア障害が類似した失敗を引き起こすことを示しています。NATS は issue #7549、#7556、および #7567 を積極的に調査中であり、クラッシュ削除バグ(#6888)は v2.10.23 で修正済みですが、lazy fsync のドキュメントは残り変更されていません。

本文

NATS JetStream(2.12.1)に関する調査結果

概要

  • NATS JetStream は「少なくとも 1 回は配信」(at‑least‑once) を保証しますが、データファイルの破損や電源障害により書き込みを失うケースが確認されました。
  • 既知の問題(#6888)は 2.10.23 にて修正済みです。
  • その他(#7549, #7556, #7564, #7567)は現在調査中です。

背景

  • NATS は Raft を用いてレプリケーションし、線形可能性 (Linearizable) を主張していますが、実際には可用性と完全一致の両立は CAP 定理により不可能です。
  • JetStream のデフォルト fsync 周期は 2 分であり、ACK は即時返却されます。これにより、近くの書き込みがディスクへ永続化されず、電源障害等で失われる恐れがあります。

テスト設計

項目内容
ライブラリJepsen + JNATS (v2.24.0)
環境Debian12 LXC コンテナと NATS Docker イメージ併用
クラスター構成3 ノードまたは 5 ノード、レプリケーション係数 5
フォルト注入プロセス一時停止・クラッシュ、ネットワーク分断・パケット損失、ファイル単位のビットフリップや切り捨て(.blk, snapshot)
OS レベル電源障害LazyFS を利用してシミュレート

評価指標

  1. lost‑prefix / lost‑postfix / lost‑middle:ACK されたメッセージが最終読取で見つからないケースをプロセス単位で区分。
  2. divergence(split‑brain):同一 ACK メッセージがノード間で欠落する事象。

主な結果

番号要因影響状態
#6888プロセスクラッシュストリーム削除(全データ消失)修正済み (2.10.23)
#7549.blk ファイル破損1 ノードまたは複数ノードで大量書き込み喪失、分割脳発生未解決
#7556スナップショットファイル破損ストリーム全削除(クォーラム不可)未解決
#7564デフォルトの lazy fsync2 分間隔での書き込み失われ、電源障害時に数十秒分喪失文書化済み
#7567単一 OS クラッシュ + 一時停止ACK メッセージの喪失と persistent split‑brain未解決

詳細

1. .blk ファイル破損 (#7549)

  • 5 ノード中 2 ノードで単ビットエラーを注入。
  • n1, n3, n5 はそれぞれ 78 % の ACK メッセージを失う(n1: 852,413, n3/n5: 1,167,167)。
  • 消失は prefix/middle/postfix 全てに散在し、Swiss‑cheese ライクな欠落が観測。

2. スナップショット破損 (#7556)

  • n3, n5 の snapshot にビットフリップを注入。
  • n3 がメタデータリーダーになり、jepsen-stream を削除。
  • 他ノードはクォーラムが取れず、ストリーム利用不可。

3. lazy fsync 政策 (#7564)

  • デフォルト 2 分間隔で flush。
  • 単一ノードの同時クラッシュにより、30 秒分の書き込みを失うケース確認。
  • 連続する単一ノード故障でもストリーム全消失が発生。

4. 単一 OS クラッシュ + 一時停止 (#7567)

  • 1 ノードで電源障害後に再起動し、他ノードはクォーラム形成。
  • ACK メッセージが一部のノードで失われ、split‑brain が永続化。

推奨事項

  1. fsync 周期を “always” に変更(または文書でリスクを明示)。
  2. スナップショット・.blk ファイルのチェックサム検証を強化し、破損時に安全な削除/復旧機能を実装。
  3. 文書に「Linearizable でも完全可用性は保証されない」旨を明記。
  4. 単一ノード障害時のリカバリ手順(リーダー再選、データ整合性チェック)を検証。

今後の課題

  • 線形可能性/シリアライズ性 の実際の保証を検証。
  • exactly‑once semantics の動作確認。
  • クラスター構成変更(ノード追加/削除)の安全手順を確立。

参考文献

  1. Jepsen 調査レポート(2025年11月)
  2. LazyFS プロジェクト (INESC TEC)
  3. NATS JetStream ドキュメント (v2.12.1)

以上が現在の調査結果と推奨事項です。

同じ日のほかのニュース

一覧に戻る →

2025/12/09 8:53

Kroger acknowledges that its bet on robotics went too far

## Japanese Translation: > **概要:** > Kroger(クローガー)は、3つのロボット型ECフルフィルメントセンターを閉鎖することを発表し、約26億ドルの費用がかかるものの、EC利益率を約4億ドル向上させる見込みです。今回の閉鎖は、以前に「スピーク」施設を停止した後であり、UKテック企業Ocado(オカド)とのパートナーシップも業績不振により一時停止されたことに続くものです。臨時CEOのロン・サーガント氏は、Krogerが各Ocadoサイトを個別に検討し、大規模な資本投資なしで2,700店舗以上を活用した迅速配送へシフトする方針だと述べました。以前、Krogerは2024年中頃に新しいOcado技術を導入予定でしたが、サイトのパフォーマンスを疑問視し、2023年9月にプロジェクトを停止しました。 > > Pine Street AdvisorsのKen Fenyo氏は、密集都市外にOcadoセンターを配置することが主な欠陥であると指摘しました。低い注文量と長距離がモデルを非収益的にしていたのです。米国消費者はInstacartやDoorDashなどから30分以内の配送を重視し、UKで成功したOcadoの遅めで価格志向のモデルよりも優先します。 > > 今後、Krogerはサードパーティ配達パートナーとの関係強化を図り、高需要市場(AmazonのWhole Foods試験に似た)で資本負担が軽い店舗ベースの自動化をパイロットし、残存するOcadoサイトの運用をケースバイケースで決定します。自動化からの撤退はOcadoにとって大きな後退となり、その株価はIPO前レベルまで下落しています。これは密集都市外でマイクロフルフィルメント技術を導入する難しさを浮き彫りにしています。

2025/12/09 4:44

Icons in Menus Everywhere – Send Help

## Japanese Translation: 改善されたまとめ この記事は、macOS のデフォルト設定で全てのメニュー項目にアイコンを付ける慣習を批判し、多くの場合可視性の「補填」のために追加されていると主張しています。Google Sheets を極端な例として挙げ、すべてのオプションにアイコンが付いていることを指摘し、同じグループ内でアイコンの有無に不一致がある点や、アイコンがチェックマークやトグル状態と重なるケース(例えば Safari の「Safari」「File」「View」メニュー)も示しています。著者は、macOS が従来はデフォルトでメニューアイコンを避けていたことを指摘し、macOS Tahoe でそれらが広く導入されたことで Apple の 2005 年人間インターフェースガイドライン(任意のシンボルの使用を勧めない)と矛盾していると述べています。 とはいえ、Finder のウィンドウ配置オプション(Top Left, Bottom & Top, Quarters など)は本当に役立つアイコンであり、レイアウト選択を迅速に認識できる点は評価されています。著者は Apple が普遍的なアイコン化へ進むことで、デザイナーが不適切なアイコン使用に対抗しづらくなるとフラストレーションを表明し、メニューの美学に関する継続的な緊張を生んでいると指摘しています。ユーザー側では視覚的な雑然や混乱が起こり得ますが、開発者や UI デザイナーは使いやすさとスタイルのバランスを慎重に取らざるを得ません。この議論は将来の Apple UI ガイドラインに影響し、メニュー設計に関する業界全体の慣行にも波及する可能性があります。

2025/12/08 23:50

Strong earthquake hits northern Japan, tsunami warning issued

## Japanese Translation: > 7月1日(月)午後11時15分、青森県東部沖で規模7.5の地震が発生し、深さは54 kmでした。落下物や転倒により6名が負傷しました。六ヶ所村では長周期地震(クラス3)が記録され、高層ビルへの影響も懸念されています。気象庁は2022年以来初めてのメガクエイク警報を発令し、北海道から千葉県沿岸まで太平洋側で津波が起こる可能性があると警告しました。北日本に対する津波警報は火曜日午前6時20分に解除されました。 > > 交通機関は甚大な混乱をきたしました。東日本旅客鉄道は福島県から新青森までの出発方向の東北新幹線サービスを停止し、岩手で東北本線の運行も中止されました。北海道千歳空港は一時閉鎖され、白井―新千歳、高知市・浜町・西側インターチェンジ(トマコマイ・ヒガシ-ノムノハタ・ニシ)など複数の高速道路が閉鎖しました。 > > 東京電力は福島第一原発および第二原発で異常がないことを確認し、定められた手順に従い午後11時42分に処理水放流を停止しました。他の原子力施設(東多利・大和川・泊)は問題なしと報告しています。 > > 政府は午後11時16分に内閣官房で危機対策本部を設置し、安倍晋三首相が情報発信と被害調査の即時実施を指示しました。国務次官木原みどりは引き続き被害評価を行い、警察・消防隊・自衛隊・海上保安庁による救助・援助・防災活動を優先すると強調しました。 > > 佐々木慎一教授は浅い沖合での地震が既に津波を発生させている可能性があると警告し、沿岸住民には避難と暖かく保つよう促しました。

Jepsen: NATS 2.12.1 | そっか~ニュース