> ## Documentation Index
> Fetch the complete documentation index at: https://generaltranslation.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 復旧と冗長性

ストリーミングデータを取得する際には、接続時間を最大限に伸ばし、条件に一致したすべてのデータを受信することが基本的な目標になります。つまり、冗長な接続を活用し、自動的に切断を検知して速やかに再接続し、失われたデータを復旧するための計画を用意しておくことが重要です。

このインテグレーションガイドでは、冗長接続、バックフィル、および復旧といった、さまざまな復旧と冗長性の機能について説明します。
 

<div id="redundant-connections">
  ## 冗長接続
</div>

冗長接続を使用すると、ストリームに対して複数の同時接続を確立できます。これにより、2 つの別々のコンシューマーから同じストリームに接続し、両方の接続で同じデータを受信できるため、冗長性が確保されます。これによって、どちらか一方のストリーム接続が切断された場合や、アプリケーションのプライマリサーバーが障害を起こした場合など、さまざまな状況に対してアプリケーションにホットスタンバイのフェイルオーバーを持たせることができます。

冗長ストリームを使用するには、プライマリ接続に使用しているのと同じ URL に接続するだけです。ストリームのデータは両方の接続を通じて送信されます。

<div id="backfill">
  ## バックフィル
</div>

切断を検知したら、システムはストリームに再接続できるように設計しておく必要があります。可能であれば、適切なリカバリ機能を使ってデータをバックフィルできるよう、切断がどのくらいの時間続いたかを記録しておくべきです。 

切断時間が 5 分以下であると判断できた場合は、バックフィル用のパラメータ `backfillMinutes` を使用できます。 このパラメータを `GET /powerstream` リクエストに指定すると、直近 1〜5 分間にルールにマッチした投稿を受け取ることができます。通常、これらの古い投稿は新たにマッチした投稿よりも先に配信され、また投稿の重複排除は行われません。つまり、90 秒間切断されていたにもかかわらず 2 分間分のバックフィルデータを要求した場合、30 秒分の重複した投稿を受け取ることになり、システム側でそれを許容できるようにしておく必要があります。以下は、バックフィルパラメータを指定したリクエスト例です。

`curl 'https://api.x.com/2/powerstream?backfillMinutes=5' -H "Authorization: Bearer $ACCESS_TOKEN"`

切断時間が 5 分を超えていたと判断できた場合は、[recent search endpoint](/ja/x-api/posts/search/introduction) もしくはリカバリ機能を利用して、取り逃したデータを取得できます。 

<div id="recovery">
  ## リカバリ
</div>

5 分間のバックフィルウィンドウ内に再接続できない場合、Recovery 機能を使用して、直近 24 時間以内に取得し損ねたデータを再取得できます。

ストリーミングのリカバリ機能を使用すると、バックフィルウィンドウを 24 時間まで拡張できます。Recovery を利用すると、取得し損ねたデータの期間を「リプレイ」できます。`startTime` と `endTime` リクエストパラメータを使用して接続リクエストを行うと、リカバリストリームが開始されます。接続されると、Recovery は指定された期間のデータを再ストリーミングし、その後切断します。  

|             |                 |                                                                              |
| :---------- | :-------------- | :--------------------------------------------------------------------------- |
| **Name**    | **Type**        | **Description**                                                              |
| `startTime` | date (ISO 8601) | YYYY-MM-DDTHH:mm:ssZ (ISO 8601/RFC 3339)。<br /><br />リカバリを開始する時刻を表す UTC の日時。 |
| `endTime`   | date (ISO 8601) | YYYY-MM-DDTHH:mm:ssZ (ISO 8601/RFC 3339)。<br /><br />リカバリを終了する時刻を表す UTC の日時。 |

リクエスト URL の例: `https://api.x.com/2/powerstream?startTime=2022-07-12T15:10:00Z&endTime=2022-07-12T15:20:00Z`
