# 保障 REST 服务高可用 (/zh-CN/realtime-media/media-push/build/monitor-and-maintain-media-push/rest-availability)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

## 故障迁移 [#故障迁移]

为保障 REST 服务的高可用，避免因区域网络故障造成的服务不可用，声网提供故障迁移、多路推流任务保障和切换域名的方案。

针对网络故障，以及非声网云、非声网软件、设施和不可抗力因素等因素导致的推流中断，声网旁路推流为了保证更好的用户体验，提供自动故障迁移服务，该服务会在尽量短的时间内完成迁移（预计 2 分钟内），迁移期间推流任务中断，可能导致部分数据丢失。
对于频道内观众较多或关键性业务场景，你需要根据业务重要性和自动迁移时效，评估是否采用更高等级的保障措施。例如，准备[多路推流任务保障](/zh-CN/realtime-media/media-push/build/monitor-and-maintain-media-push/rest-availability)以应对迁移期间的快速切换，或采用[退避重试策略](/zh-CN/realtime-media/media-push/build/monitor-and-maintain-media-push/rest-availability)主动迁移以减少迁移时间。

## 多路推流任务保障 [#多路推流任务保障]

如需比故障迁移更高的质量保障，你可以采用多路推流任务保障策略。每路推流任务单独计费，详见[计费说明](/zh-CN/realtime-media/media-push/reference/billing)。

你可以选择以下两种方式实现多路推流任务保障：

- 同时开启推流主任务和多个备份任务，在每个推流任务中设置不同的 CDN 地址，当主任务发生故障，CDN 观众端可以及时切换到备份的 CDN 地址。

- 如果你想要推送的 CDN 支持优先级功能，你可以开启一个推流任务 1，向优先级为 1 的 CDN 地址（例如：`rtmp://xxx/xxx/xxx?priority=1`）进行推流，如果任务 1 发生故障，及时开启推流任务 2，向优先级为 2 的 CDN 地址进行推流。此时，任务 1 会被 CDN 忽略。

:::info[信息]
不同 CDN 优先级字段不相同，你需要与 CDN 厂商确认是否支持优先级功能，以及优先级的字段名。
:::

## 切换域名 [#切换域名]

切换域名的操作如下：

1. 根据你的业务服务器所在地设置主域名：
    - 业务服务器 DNS 地址位于中国大陆时，设置主域名为 `api.sd-rtn.com`。
    - 业务服务器 DNS 地址位于中国大陆以外的国家或地区时，设置主域名为 `api.agora.io`。
2. 当使用主域名发起 RESTful API 请求失败时，使用该域名重试一次。
3. 如果步骤 2 的重试依然失败，使用备用的主域名重试：
    - 如果当前设置的主域名为 `api.sd-rtn.com`，备用的主域名指 `api.agora.io`。
    - 如果当前设置的主域名为 `api.agora.io`，备用的主域名指 `api.sd-rtn.com`。
4. 如果步骤 3 的重试依然失败，使用与当前解析区域相邻的区域域名重试。

   举例说明：假设你的业务服务器位于欧洲，你设置主域名为 `api.agora.io`，并且该域名解析到德国。德国对应的区域域名为欧洲中部 `api-eu-central-1.agora.io`。查域名信息表可知，其相邻区域为欧洲西部，对应域名为 `api-eu-west-1.agora.io` 或 `api-eu-west-1.sd-rtn.com`。因此，出现网络故障且步骤 2、3 的重试失败时，请使用 `api-eu-west-1.agora.io` 或 `api-eu-west-1.sd-rtn.com` 重试。

#### 注意事项 [#注意事项]

- 为避免重试请求过于频繁，超过声网服务所规定的 QPS（每秒请求数），声网建议你使用退避策略。例如，第一次等待 1 秒后重试、第二次等待 3 秒后重试、第三次等待 6 秒后重试。
- 如果是网络问题而非 DNS 解析域名问题导致的请求失败，声网建议你跳过步骤 3，直接进行步骤 4。
- 切换至区域域名前，请确保你使用的业务（例如，云端录制、云信令、频道管理等 REST 服务）在该区域有部署服务。

#### 域名信息 [#域名信息]

<DocsTable>
<thead>
<tr>
<th scope="col">主域名</th>
<th scope="col">区域域名</th>
<th scope="col">地理区域</th>
</tr>
</thead>
<tbody>
<tr>
<td rowSpan={8}>`api.sd-rtn.com`</td>
<td>`api-us-west-1.sd-rtn.com`</td>
<td>美国西部</td>
</tr>
<tr>
<td>`api-us-east-1.sd-rtn.com`</td>
<td>美国东部</td>
</tr>
<tr>
<td>`api-ap-southeast-1.sd-rtn.com`</td>
<td>亚太东南</td>
</tr>
<tr>
<td>`api-ap-northeast-1.sd-rtn.com`</td>
<td>亚太东北</td>
</tr>
<tr>
<td>`api-eu-west-1.sd-rtn.com`</td>
<td>欧洲西部</td>
</tr>
<tr>
<td>`api-eu-central-1.sd-rtn.com`</td>
<td>欧洲中部</td>
</tr>
<tr>
<td>`api-cn-east-1.sd-rtn.com`</td>
<td>中国华东</td>
</tr>
<tr>
<td>`api-cn-north-1.sd-rtn.com`</td>
<td>中国华北</td>
</tr>
<tr>
<td rowSpan={8}>`api.agora.io`</td>
<td>`api-us-west-1.agora.io`</td>
<td>美国西部</td>
</tr>
<tr>
<td>`api-us-east-1.agora.io`</td>
<td>美国东部</td>
</tr>
<tr>
<td>`api-ap-southeast-1.agora.io`</td>
<td>亚太东南</td>
</tr>
<tr>
<td>`api-ap-northeast-1.agora.io`</td>
<td>亚太东北</td>
</tr>
<tr>
<td>`api-eu-west-1.agora.io`</td>
<td>欧洲西部</td>
</tr>
<tr>
<td>`api-eu-central-1.agora.io`</td>
<td>欧洲中部</td>
</tr>
<tr>
<td>`api-cn-east-1.agora.io`</td>
<td>中国华东</td>
</tr>
<tr>
<td>`api-cn-north-1.agora.io`</td>
<td>中国华北</td>
</tr>
</tbody>
</DocsTable>

## 使用退避策略重试 [#使用退避策略重试]

当推流过程中出现 `404`、`429`、`499`、`5xx` 错误码时，你需要采取退避策略，例如等待 5-6 秒、10-11 秒、15-16 秒后重试。

使用退避策略重试后，如果连续 3 次出现 `404`、`5xx` 错误码，或查询推流状态的响应 Body 中的 `state` 字段为 `failed`，说明推流失败，请按照以下步骤进行排查：

1. 确认 CDN 推流地址是否正确。
2. 如果 CDN 推流地址正确，请销毁当前 Converter，并重新创建。

其他异常情况下，旁路推流服务会自动更换推流服务器重新推流。

## 客户端添加请求超时时间 [#客户端添加请求超时时间]

为确保 App 客户端在等待服务器响应时不会过早断开连接，我们建议你在客户端添加 RESTful API 请求超时时间的逻辑，并将等待超时时间设置为至少 3 秒。声网建议的超时时间为 5 秒。
