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

# 管理生成别名并向其分配

> 使用 PlayFab 生成别名在加权生成之间分发多人服务器分配,以实现安全推出、向后兼容性和游戏模式。

生成别名是生成之上的管理层,它允许对 `RequestMultiplayerServer` 的调用以受控方式分发到多个生成。这可以提高生成到生成升级和下文列出的其他若干场景的简单性和可靠性。别名通过指定生成 ID 列表以及每个 ID 的权重来实现这一点。生成的权重决定了对于每个分配请求，该生成被首先尝试的可能性。例如，如果生成 1 的权重为 8，生成 2 的权重为 2，则大约 80% 的请求会首先尝试生成 1，因此在生成 1 具有 StandingBy 服务器时，它会处理大约 80% 的请求。如果生成 1 在某个区域中耗尽了 StandingBy 服务器，这些请求将改为转到生成 2，因此生成 2 在该区域中可能会处理超过 20% 的请求。不过，每个请求中的区域优先，权重仅决定在某个区域内由哪个生成处理请求。有关详细信息，请参阅[回退到其他生成和区域](#fallback-to-other-builds-and-regions)。

### 向后兼容的安全部署

这是生成到生成升级的最常见场景,即你正在更新游戏服务器,而零售客户端与两台服务器兼容。

客户端将引用别名 1,其配置如下:

* 生成 1:权重 = 1

创建生成 2 后,别名 1 将更改为:

* 生成 1:权重 = 8
* 生成 2:权重 = 2

你可以逐步更改权重,直到所有新的服务器请求都由生成 2 完成。此时,生成 1 的权重为 0,可以从别名中删除。

别名的典型用例是将其绑定到客户端兼容性版本和游戏模式。例如"DeathMatch 客户端 2.2 RETAIL"。别名允许你管理此更高级别的抽象,同时不断更新支持此体验的生成。别名还使你可以在必要时更轻松地回滚生成。

### 不向后兼容的部署

在这种情况下,你希望在更新游戏客户端的同时更新游戏服务器,因为你当前的游戏客户端与旧的服务器生成不兼容。从一个生成过渡到另一个生成可以按以下方式完成:

旧客户端将引用别名 1,其内容如下:

* 生成 1:权重 = 1

创建生成 2 后,新客户端将引用别名 2,其内容如下:

* 生成 2:权重 = 1

在此场景中,别名的使用方式与生成类似,不使用其多路复用功能。

### 向后兼容的爆炸式部署

这类似于向后兼容的生成到生成升级场景,但需求行为的切换更为突然。从一个生成过渡到另一个生成可以按以下方式完成:

客户端将引用别名 1,其内容如下:

* 生成 1:权重 = 1

创建生成 2 后,别名 1 将更改为:

* 生成 1:权重 = 0
* 生成 2:权重 = 1

### 测试向后兼容的部署

当你想更新游戏服务器,并且客户端版本与两台服务器都兼容,但你希望先测试第二个版本,然后再为所有玩家大规模部署它时。测试和从一个生成过渡到另一个生成可以按以下方式完成:

客户端将引用别名 1,其内容如下:

* 生成 1:权重 = 1

创建生成 2 后。测试客户端将引用别名 2,其内容如下:

* 生成 2:权重 = 1

验证生成 2 后。别名 1 将更改为:

* 生成 1:权重 = 8
* 生成 2:权重 = 2

逐步地,生成 2 的权重将增加并吸收所有流量。

## 回退到其他生成和区域

别名可以通过允许在多个生成之间进行回退，使多人服务器部署更具弹性。从别名请求服务器时，请在 `PreferredRegions` 中按偏好顺序列出能为玩家提供可接受体验的每个区域。PlayFab Multiplayer Servers (MPS) 按如下方式处理每个请求：

1. MPS 使用生成权重为该请求对别名中的生成进行排序。权重较高的生成更有可能排在前面。
2. MPS 按你列出的顺序遍历各区域。在每个区域中，它按该顺序尝试每个生成。它会跳过未在该区域中部署的生成。
3. MPS 从第一个具有 StandingBy 服务器的生成中分配服务器。如果该区域中没有任何生成具有 StandingBy 服务器，MPS 将转到下一个区域。如果没有任何区域具有 StandingBy 服务器，请求将失败并返回 `MultiplayerServerTooManyRequests` 错误。

区域顺序始终优先于生成权重。玩家会在具有容量的最优先区域中获得服务器，而权重仅决定在该区域中由哪个生成为其提供服务。使用权重来表达你在不同生成之间的成本和性能偏好，例如在不同虚拟机 (VM) 大小之间。向别名添加覆盖更多区域的生成只会增加容量。

权重为 0 的生成永远不会用于分配，即使作为回退也不会。若要将某个生成保留为回退，请改为为其指定一个较小的非零权重，例如相对于主生成的 999 指定为 1。

如果别名中的所有生成均未部署在任何请求的区域中，请求将失败并返回 `MultiplayerServerNotFound` 错误。有关避免这两种错误的方法，请参阅[最佳实践与发布检查清单](https://docs.xbox.com/zh-CN/services/playfab/multiplayer/servers/best-practices.md)。

例如，假设一个针对生成别名的分配请求将 EastUS 排名为区域 #1，将 West US 排名为区域 #2。此生成别名为两个生成（生成 1 和生成 2）提供了相似的权重。

假设对于给定分配，生成 1 在顺序中排在前面。

1. 尝试在 East US 中为生成 1 分配。
2. 如果 #1 失败,尝试在 East US 中为生成 2 分配。
3. 如果 #2 失败,尝试在 WestUS 中为生成 1 分配。
4. 如果 #3 失败,尝试在 WestUs 中为生成 2 分配。

特别是当你从一个生成逐步升级到另一个生成时,这种回退行为得到了优化,即使其中一个生成出现问题,玩家也能获得延迟最低的服务器。

## 使用 PlayFab REST API 管理生成别名

> [!NOTE]
>
> 你现在可以在 Game Manager 中管理生成别名。若要开始,请参阅[生成概述页面](https://docs.xbox.com/zh-CN/services/playfab/multiplayer/servers/build-overview.md)

1. 使用 API 创建生成别名。

   API:

   ```http theme={null}
   POST https://titleId.playfabapi.com/MultiplayerServer/CreateBuildAlias
   ```

   示例正文:

   ```json theme={null}
   {
       "AliasName":"TestingAlias",
       "BuildSelectionCriteria":
       [{
           "BuildWeightDistribution":{"9a8a4584-c81a-479c-9ef9-16d3743f7ca7":"1"}
       }]
   }
   ```

   示例响应:

   ```json theme={null}
   {
       "AliasId":"97d2b0a5-7c04-4593-8451-66bbb97f94b6",
       "AliasName":"TestingAlias",
       "BuildSelectionCriteria":
       [{
           "BuildWeightDistribution":{"9a8a4584-c81a-479c-9ef9-16d3743f7ca7":"1"}
       }]
   }
   ```

   **生成别名 ID 作为响应的一部分提供。**

2. 更新生成别名的任何参数。

   API:

   ```http theme={null}
   POST https://titleId.playfabapi.com/MultiplayerServer/UpdateBuildAlias
   ```

   示例正文:

   ```json theme={null}
   {
       "AliasId":"97d2b0a5-7c04-4593-8451-66bbb97f94b6",
       "AliasName":"TestingAliasRenamed",
       "BuildSelectionCriteria":
       [{
           "BuildWeightDistribution":{"9a8a4584-c81a-479c-9ef9-16d3743f7ca7":"1",
           "7ac7f347-3d61-9fe9-c974-a18c4854a8a9":"1"}
       }]
   }
   ```

   示例响应:

   ```json theme={null}
   {
       "AliasId":"97d2b0a5-7c04-4593-8451-66bbb97f94b6",
       "AliasName":"TestingAliasRenamed",
       "BuildSelectionCriteria":
       [{
           "BuildWeightDistribution":{"9a8a4584-c81a-479c-9ef9-16d3743f7ca7":"1",
           "7ac7f347-3d61-9fe9-c974-a18c4854a8a9":"1"}
       }]
   }
   ```

3. 删除生成别名。

   API:

   ```http theme={null}
   POST https://titleId.playfabapi.com/MultiplayerServer/DeleteBuildAlias
   ```

   示例正文:

   ```json theme={null}
   {
       "AliasId":"97d2b0a5-7c04-4593-8451-66bbb97f94b6"
   }
   ```

4. 列出生成别名。

   API:

   ```http theme={null}
   GET https://titleId.playfabapi.com/MultiplayerServer/ListBuildAliases
   ```

   示例响应:

   ```json theme={null}
   [{
       "AliasId":"97d2b0a5-7c04-4593-8451-66bbb97f94b6",
       "AliasName":"TestingAliasRenamed",
       "BuildSelectionCriteria":
       [{
           "BuildWeightDistribution":{"9a8a4584-c81a-479c-9ef9-16d3743f7ca7":"1",
           "7ac7f347-3d61-9fe9-c974-a18c4854a8a9":"1"}
       }]
   }]
   ```

## 使用生成别名进行分配

若要使用生成别名进行分配,请在 `RequestMultiplayerServer` 调用中指定生成别名 ID。

API:

```http theme={null}
POST https://titleId.playfabapi.com/MultiplayerServer/RequestMultiplayerServer
```

示例正文:

```json theme={null}
{
    "SessionId":"6a07440c-7bcc-4e23-8b81-4934543ff966",
    "PreferredRegions":["SouthCentralUs"],
    "BuildAliasParams":
        {"AliasId":"97d2b0a5-7c04-4593-8451-66bbb97f94b6"}
}
```


## Related topics

- [创建生成别名](https://docs.xbox.com/zh-CN/services/playfab/api-references/rest/multiplayer/multiplayer-server/create-build-alias.md)
- [删除生成别名](https://docs.xbox.com/zh-CN/services/playfab/api-references/rest/multiplayer/multiplayer-server/delete-build-alias.md)
- [获取生成别名](https://docs.xbox.com/zh-CN/services/playfab/api-references/rest/multiplayer/multiplayer-server/get-build-alias.md)
- [更新生成别名](https://docs.xbox.com/zh-CN/services/playfab/api-references/rest/multiplayer/multiplayer-server/update-build-alias.md)
- [列出生成别名](https://docs.xbox.com/zh-CN/services/playfab/api-references/rest/multiplayer/multiplayer-server/list-build-aliases.md)
