障害後、ブローカー、デバイス、統合が接続回復時に蓄積された作業を解放するため、スマートホームサーバーにキューイングされたイベントが殺到します。
障害中、センサーは利用可能なブローカーに引き続きパブリッシュし、クライアントは送信メッセージを保存し、ゲートウェイは更新をバッファし、オートメーションサービスは再試行をスケジュールすることがあります。復旧時には、Home Assistantが統合、データベース、ダッシュボード、デバイス状態を復元しながら、これらの作業が短い配信ウィンドウに圧縮されます。この結果のバーストは、古いオートメーションをトリガーし、イベントループを飽和させ、現在のメッセージを遅延させ、再試行のさらなるラウンドを生み出すことがあります。以下のセクションでは、バックログがどのように形成され、制御された復旧がどのように安全にそれを排出するかを追跡します。
永続セッションは消費者がオフラインでも作業を保持する
永続セッションを持つMQTTサブスクライバーは、保存されたサブスクリプションを失うことなく切断できます。QoSやブローカーポリシーに応じて、障害中にパブリッシュされた該当メッセージはそのクライアントのために待機できます。
HiveMQはオフラインメッセージキューが、サブスクライバーが戻るまで該当するパブリケーションを保持すると説明しています。これにより信頼性が向上しますが、スマートホームサーバーは現在のトラフィックと見逃したイベントの蓄積履歴の両方に再接続することになります。
ブローカーはどの家庭内イベントがまだ有効かを知りません。モーションイベント、温度サンプル、デバイス状態、漏水アラームは、それぞれ許容される遅延が異なっていてもすべて確実に配信される可能性があります。
再接続は長いバックログを短い処理ウィンドウに圧縮する
30分の障害があっても30分かけて再生する必要はありません。ブローカーとクライアントは、確認応答、ネットワーク帯域幅、インフライト制限、消費者の処理能力が許す限り、キューイングされたメッセージをできるだけ速く送信します。
キュー・バックログシステムはバックログを迅速に排出するよう設計されていますが、下流のスマートホームサービスはそれを供給するブローカーよりも小さい場合があります。データベース書き込み、テンプレート評価、通知、履歴更新、デバイスコマンドが真の復旧のボトルネックになることがあります。
現在のイベントは古いイベントの後ろに待機し、接続が回復していてもホームが遅く見えることがあります。その遅延中にタイムアウトが発生すると、プロデューサーは再試行し、キューが再び大きくなります。
この洪水はつまり、バックログの解放とライブトラフィックの合計がサーバーの持続可能なイベント処理速度を超えていることによるレートミスマッチです。
保持された状態とキューイングされたイベントは異なる理由で到着する
保持されたMQTTメッセージはトピックの最新の保持ペイロードを保存し、サブスクライバーが一致するサブスクリプションを確立したときに配信されます。永続セッションキューは特定のオフラインクライアントのために該当するメッセージを保存します。
HiveMQの保持状態はサーバーの最新ビューを迅速に再構築できますが、キューイングされたセッションは中間の更新をまだ含んでいる可能性があります。タイムスタンプやシーケンスルールなしで両方を処理すると、古いキューイング値が新しい保持状態を上書きすることがあります。
デバイスの起動、検出、可用性メッセージは3番目の起動波を形成します。ゲートウェイはオートメーションサーバーが再びオンラインになったことを検知すると、設定や現在の値を再パブリッシュすることがあります。
再試行とファンアウトが元のキューを増幅する
1つの復旧イベントは複数の下流アクションを開始できます:エンティティ状態の更新、履歴書き込み、テンプレート評価、オートメーション実行、MQTTコマンドのパブリッシュ、通知送信、カメラやAIコンテキストの要求など。
制御されていない再試行増幅は、複数のレイヤーが失敗した作業を繰り返すと発生します。遅延したオートメーションは呼び出し元によって再試行される一方で、その通知プロバイダーやデバイス統合も独立して再試行することがあります。
この乗算が、障害後の負荷がキューイングされたセンサーイベント数を超える理由を説明します。システムはバックログとそこから生成されたすべての二次アクションおよび再試行を処理しています。
ジッター付きバックオフは再試行を分散させるのに役立ちますが、古い家庭内イベントをまだ実行すべきかどうかは決定しません。鮮度と再実行安全なアクションルールが依然として必要です。
復旧には有効期限、優先順位、制御された受け入れが必要
状態、テレメトリ、アラーム、一時的トリガーに異なる寿命を割り当てます。現在の状態は中間サンプルを置き換え、通常のテレメトリは集約でき、安全イベントは耐久的な配信と明示的な人間の承認を必要とする場合があります。
MQTT 5の有効期限間隔は、古くなったパブリケーションや放棄されたセッションが無期限に残るのを防ぎます。消費者側の受け入れ制限、有界並行性、優先キュー、ポーズ&ドレインモードは復旧トラフィックをサーバーの持続可能な速度以下に保ちます。
ZimaSpaceのスマートホームサービス境界は影響範囲を減らします:決定論的なデバイス制御は最初に復旧し、カメラの要約、長期分析、オプションのAI作業は後で再開します。
バックログが形成されるほど十分な長さの制御された障害でテストしてください。キューの深さ、最古メッセージの年齢、排出率、イベントループの遅延、データベース書き込み、重複アクション、現在のイベントが優先されるまでの時間を測定します。
テック&AIハブ
もっと読む

Home Assistantにおけるランタイム状態と永続状態:再起動後も維持すべきものは?
Home Assistantはすべてのライブ値を永続化するわけではありません。設定、レジストリ、選択された復元状態、履歴、デプロイデータは、再起動時にそれぞれ異なる役割を果たします。

Home Assistantはローカルセッションとリモートセッションをどのように認証しますか?
ローカルおよびリモートのHome Assistantセッションでは、同じサーバー側のIDモデルを使用します。リモートアクセスによって変わるのは経路とTLSの境界であり、トークンフローの中核ではありません。

Recorderデータが増えると、なぜHome Assistantの履歴クエリは遅くなるのですか?
レコーダーの成長に伴い、要求された範囲に含まれる行数が増えたり、キャッシュミスが増加したり、ストレージやインデックス処理が遅くなったりすると、履歴クエリのコストが上昇する可能性があります。

