会话启动协议 (SIP) 会话亲缘关系和故障转移

WebSphere 中的 SIP 提供会话亲缘关系和故障转移。

SIP 会话亲缘关系

集群中的单个 SIP 容器将处理所有与单个对话关联的消息。 如果容器在对话过程中失败,那么集群中的单个服务器将接管该对话的职责。 将由 SIP 代理负责根据会话标识(包括逻辑服务器名)维护会话亲缘关系。 逻辑服务器信息将由 SIP 容器发布,并由 SIP 代理通过“工作负载管理系统”(WLM) 使用。

根据会话标识传递 SIP 消息

ibmsid 嵌入在各种 SIP 消息中,并且用于路由至在 SIP 应用程序服务器上运行的特定会话。 一般说来,VIA 头总是用来路由响应。 容器总是将 ibmsid 嵌入在与 SIP 应用程序服务器关联的 VIA 中。 以下是这种 VIA 头的示例:

Via: SIP/2.0/UDP 9.51.252.69:5063;ibmsid=sipcontainer1.1153242645968.4_2_2;branch=z9hG4bK920196437955379

对于代理应用程序,ibmsid(或会话标识)插入在 Record-Route 中从 UAC 接收到的初始请求中。 UAS 将在响应中返回具有会话标识的相同 Record-Route。 UAC 将在对话的后续请求中返回具有会话标识的路由头。 例如:

Record-Route: <sip:protocol2.databeam.com:5060;transport=udp;ibmsid=sipcontainer1a.1138119214953.4_2_2;lr>
在此示例中,UAS 在响应中返回具有会话标识的相同 Record-Route,而 UAC 在对话的后续请求中返回具有会话标识的路由头。

对于 UAC 和 UAS 应用程序,充当 UAC 或 UAS 的容器将会话标识插入到“目标”标记 (UAS) 或“来源”标记 (UAC)(例如,“目标”标记 local.1132518053302_2_2)中。 后续请求中将包括相同的“目标”或“来源”标记。

已编码的 URI 也将包含 ibmappid(非常类似于 ibmsid),然后可以在后续 HTTP 请求中发送该 ibmappid。 此处要注意的一个要点是,IBM SIP 基础结构不支持事务级别故障转移。 它仅支持稳定呼叫的对话故障转移。

以下一般规则说明 IBM SIP 基础结构如何决定要对嵌入到出站 SIP 消息中的联系人头使用的地址:
  • 独立 SIP 应用程序服务器将在需要插入到 SIP 消息中的联系人头中使用其自己的地址。
  • 如果 SIP 应用程序服务器前面是无状态 SIP 代理,那么该应用程序服务器将在需要插入到 SIP 消息中的联系人头中使用 SIP 代理的地址。 SIP 应用程序服务器将通过 WLM 发现此地址。
  • 如果 SIP 应用程序服务器前面是无状态 SIP 代理,而该 SIP 代理前面又有 IP Sprayer,那么该应用程序服务器将在需要插入到 SIP 消息中的联系人头中使用 IP Sprayer 的地址。 必须在 SIP 代理中通过管理控制台配置 IP Sprayer 的地址,并且会通过 UCF 将此地址发布至 SIP 应用程序服务器。
呼叫过程中的故障转移

服务器发生故障时,将在复制域中的其余容器上激活与故障服务器关联的会话。 激活会话后,处理失败会话的容器会通过 WLM 将会话位置发布至集群前面的代理服务器。 当与其中一个失败对话关联的消息到达代理时,代理会从 SIP 消息中提取会话标识,然后使用该会话标识查找新的容器。 重新启动故障服务器后,该服务器将添加回集群中。 然后,它将仅处理新近创建的对话。

图 1。 集群中的 SIP 容器故障转移(之前)

集群中的 SIP 容器故障转移

图 2。 集群中的 SIP 容器故障转移(之后)

集群中的 SIP 容器故障转移
汇聚应用程序和故障转移

所有与汇聚 HTTP/SIP 会话关联的消息将由代理使用已编码的 URI 和 SIP 会话亲缘关系路由至相同的后端容器。 HTTP 和 SIP 使用相同的复制拓扑(它们共享相同的复制设置)。 如果出现故障,那么与失败对话关联的 HTTP 和 SIP 请求都将被路由至相同的新后端服务器。 当确定亲缘关系目标时,Jsession cookie 优先于代理中已编码的 URI。

图 3。 汇聚应用程序示例

集群中的 SIP 容器故障转移