ADC

用例 1:SMPP 负载平衡

通过使用短消息点对点 (SMPP) 协议,个人与增值服务提供商(例如银行、广告商和目录服务)之间每天交换数百万条短消息。通常,消息传送会延迟,因为服务器过载,流量在服务器之间分布不佳。NetScaler 支持 SMPP 负载平衡,并提供服务器间消息的最佳分发,防止性能不佳和中断。

当从客户端收到消息时,NetScaler 在服务器端执行负载平衡;当从服务器收到消息时,NetScaler 在客户端执行负载平衡。

NetScaler 对 SMPP 消息进行负载平衡具有以下好处:

  • 更好的服务器负载分配,这意味着对最终用户的响应时间更短
  • 服务器运行状况监视和更好的故障转移功能
  • 无需更改客户端配置即可快速轻松地添加新服务器(消息中心)
  • 高可用性

SMPP 简介

SMPP 是一种应用层协议,用于通过长期 TCP 连接在外部短消息实体 (ESME)、路由实体 (RE) 和消息中心 (MC) 之间传输短消息。它用于在朋友、联系人和银行(移动银行)、广告商(移动商务)和目录服务等第三方之间发送短信服务(SMS)消息。来自 ESME(非移动实体)的消息到达 MC,后者将其分发给手机等短消息实体 (SME)。中小企业还使用 SMPP 向第三方发送短消息(例如,用于购买产品、支付账单和转账)。这些消息到达 MC 并转发到目标 MC 或 ESME。

下图显示了移动网络中的不同 SMPP 实体:ESMES、RES 和 MC。

体系结构

移动网络中不同 SMPP 实体的架构概述

注意:在整个文档中,“客户端”和“ESME”这两个术语可以互换使用。

ESME(客户端)以三种模式之一打开与 MC 的连接:作为发射器、接收器或收发器。作为发射器,它只能提交要传送的消息。作为接收者,它只能接收消息。作为收发器,ESME 既可以提交消息,也可以接收消息。ESME 向 MC 发送三条消息(也称为 PDU)中的一条:bind_transmenter、bind_receiver 或 bind_tractiver。MC 根据请求使用 bind_transmiter_resp、bind_receiver_resp 或 bind_transiver_resp 进行响应。

建立连接后,ESME 可以发送 submit_sm 或 data_sm 消息,接收 deliver_sm 或 data_sm 消息,或者发送和接收任何此类消息,具体取决于其绑定到 MC 的模式。ESME 还可以发送辅助消息,例如 query_sm、replace_sm 和 cancel_sm,以查询先前消息传输的状态、用新消息替换之前的消息或取消未传送的消息。

如果由于 ESME 不可用或移动订阅者不在线,消息未传送,则该消息将进入队列。之后,当 MC 检测到移动订阅者现在可以访问时,它会通过接收器或收发器会话向 ESME 发送 alert_notification PDU,请求传送任何排队消息。

每个请求 PDU 都有一个唯一的序列号。响应 PDU 的序列号与原始请求相同。由于通过 SMPP 的消息交换可以处于异步模式,因此 ESME 或 MC 一次可以发送多个请求。序列号在返回同一 SMPP 会话中的响应中起着至关重要的作用。换句话说,序列号使请求和响应的匹配成为可能。

下图显示了 ESME 绑定为收发器时流量如何使用各种 PDU。

交通流量

限制:

NetScaler 设备不支持出站操作。也就是说,消息中心无法通过 NetScaler 设备启动与 ESME 的 SMPP 会话。

SMPP 负载平衡是如何在 NetScaler 上工作的

ESME(客户端)发送绑定消息以打开与 NetScaler 的连接。ADC 对每个 ESME 进行身份验证,如果成功,则以相应的消息进行响应。NetScaler 与每个消息中心建立连接,并在这些消息中心之间对所有消息进行负载平衡。当 ADC 收到来自客户端的消息时,它会重复使用与消息中心的开放连接,或者在打开的连接不可用时向消息中心发送绑定请求。

ADC 可以对来自客户端和服务器的消息进行负载平衡。它可以监视消息中心的运行状况并处理串联的消息。它还为消息中心提供内容交换支持。

源自 ESME 的消息

必须在 NetScaler 上将每个 ESME 添加为用户才能进行身份验证。客户端通过发送绑定请求与在 ADC 上配置的 SMPP 虚拟服务器建立 TCP 连接。ADC 对客户端进行身份验证,如果成功,则解析绑定消息。然后,ADC 将请求发送到通过配置的负载平衡方法选择的消息中心。如果与消息中心的连接不可重复使用,ADC 会通过向消息中心发送新的绑定请求来打开与消息中心的 TCP 连接。

在将响应(submit_sm_resp 或 data_sm_resp)从消息中心转发到客户端之前,ADC 会在消息 ID 中添加一个自定义服务器 ID,以标识客户端执行辅助操作(例如查询、替换或取消消息请求)的消息中心。来自其他客户端的请求以相同的方式进行负载平衡。

在原始绑定请求中,客户端指定了它可以提供的地址范围。此范围用于将 deliver_sm 或 data_sm 消息从消息中心转发到客户端。

源自消息中心的消息

可以处理特定地址范围的 ESME 被分组到一个群集中。群集中的所有节点都提供相同的证书。在群集中,仅使用循环方法进行负载平衡。为了传送来自移动设备的 (MO) 消息,消息中心向 NetScaler 发送 deliver_sm 消息。如果可以提供目标地址范围(例如,以 998 开头的数字)的群集绑定到 ADC,它会选择该群集,然后在该群集中的 ESME 节点之间对消息进行负载平衡。

如果可以为地址范围提供 deliver_sm 消息的 ESME 未绑定到 ADC,并且启用了消息队列,则消息将排入队列,直到此类客户端在接收器或收发器模式下绑定到 ADC 为止。您可以指定队列的大小。

下图说明了 esME、NetScaler 和消息中心之间的 PDU 的内部流动。为简单起见,仅显示两个 ESME 和两个消息中心。

ESME

报文流 (PDU):

  1. ESME1 向 NetScaler 发送绑定请求
  2. NetScaler 向 MC1 发送绑定请求
  3. MC1 向 NetScaler 发送绑定响应
  4. NetScaler 向 ESME1 发送绑定响应
  5. ESME1 向 NetScaler 发送 submit_sm (1)
  6. ESME1 向 NetScaler 发送 submit_sm (2)
  7. NetScaler 将 submit_sm (1) 转发到 MC1
  8. NetScaler 向 MC2 发送绑定请求
  9. MC2 向 NetScaler 发送绑定响应
  10. NetScaler 将 submit_sm (2) 转发给 MC2
  11. MC1 向 netScaler 发送 submit_sm_resp (1)
  12. MC2 向 netScaler 发送 submit_sm_resp (2)
  13. NetScaler 将 submit_sm_resp (1) 转发给 ESME1
  14. NetScaler 将 submit_sm_resp (2) 转发给 ESME1
  15. ESME2 向 NetScaler 发送绑定请求
  16. NetScaler 向 ESME2 发送绑定响应
  17. ESME2 向 NetScaler 发送 submit_sm (3)
  18. NetScaler 将 submit_sm (3) 转发到 MC1
  19. MC2 向 NetScaler 发送 deliver_sm(ESME2 提供消息中指定的地址范围)
  20. MC1 向 netScaler 发送 submit_sm_resp (3)
  21. NetScaler 将 submit_sm_resp (3) 转发给 ESME2
  22. NetScaler 将 deliver_sm 转发给 ESME2
  23. ESME2 向 NetScaler 发送 deliver_sm_resp
  24. MC1 向 NetScaler 发送 alert_notification(ESME1 提供消息中指定的地址范围)
  25. NetScaler 将 deliver_sm_resp 转发到 MC2
  26. NetScaler 将 alert_notification 转发给 ESME1

消息中心的运行状况监视

默认情况下,TCP_Default 监视器绑定到 SMPP 服务,但您可以绑定类型为 SMPP 的自定义监视器。自定义监视器打开与消息中心的 TCP 连接并发送 enquire_link 数据包。根据探测的成功或失败,该服务会被标记为 UP 或 DOWN。

在消息中心切换内容

消息中心可以接受来自 ESME 的多个连接(或绑定请求)。您可以将 NetScaler 配置为基于 SMPP 绑定参数对这些请求进行内容切换。以下是一些用于配置方法以选择消息中心的常见表达式:

  • 根据地址范围:在以下示例表达式中,如果地址范围从 988 开始,ADC 将选择特定的消息中心。

示例:

SMPP.BINDINFO.ADDRESS_RANGE.CONTAINS(“^988”)

  • 基于 ESME ID:在以下示例表达式中,如果 ESME ID 等于 ESME1,ADC 将选择特定的消息中心。

示例:

SMPP.BINDINFO.SYSTEM_ID.EQ(“ESME1”)

  • 基于 ESME 类型:在以下示例表达式中,如果 ESME 类型为 VMS,则 ADC 会选择特定的消息中心。VMS 代表语音邮件系统。

示例:

SMPP.BINDINFO.SYSTEM_TYPE.EQ(“VMS”)

  • 根据 ESME 的数字类型 (TON):在以下示例表达式中,如果 TON 等于 1(1 代表国际号码),则 ADC 会选择特定的消息中心。

示例:

SMPP.BINDINFO.ADDR_TON.EQ(1)

  • 基于 ESME 的数字计划指标 (NPI):在以下示例表达式中,如果 NPI 等于 0(0 代表未知连接),则 ADC 会选择特定的消息中心。

示例:

SMPP.BINDINFO.ADDR_NPI.EQ(0)

  • 根据绑定类型:在以下示例表达式中,如果绑定类型为 TRASTRIVER,则 ADC 会选择特定的消息中心。(收发器可以发送和接收消息。)

示例:

SMPP.BINDINFO.TYPE.EQ(TRANSCEIVER)

串联消息处理

一条短信最多可容纳 140 字节。较长的消息必须分解为较小的部分。如果目标手机有能力,则将消息合并并作为一条长短信发送。NetScaler 将消息的片段转发到同一个消息中心。每条消息都包含参考号、序列号和片段总数。长消息的每个片段的参考编号是相同的。序列号指定特定片段在完整消息中的位置。收到所有片段后,ESME 将这些片段合并为一条长消息,并将消息传送给移动订阅者。

如果客户端断开与活动连接的连接,则与消息中心的连接不会关闭。它可以重复用于来自其他客户端的请求。

限制

不支持来自消息中心的长度超过 59 字节的消息 ID。如果消息中心返回的消息 ID 长度超过 59 字节,则辅助操作将失败,NetScaler 会使用错误消息进行响应。

在 NetScaler 上配置 SMPP 负载平衡

执行以下任务,在 ADC 上配置 SMPP 负载平衡:

  1. 添加一个 SMPP 用户。ADC 在接受用户的绑定请求之前对用户进行身份验证。用户通常是 ESME。
  2. 添加负载平衡虚拟服务器,将协议指定为 SMPP。
  3. 添加服务,将协议指定为 SMPP,并为每台服务器指定唯一的自定义服务器 ID。将服务绑定到先前创建的负载平衡虚拟服务器。
  4. (可选)创建服务组并将服务添加到该服务组。
  5. 或者,添加 SMPP-ECV 类型的监视器并将其绑定到服务。默认情况下,TCP 默认监视器处于绑定状态。
  6. 设置 SMPP 参数,例如客户端模式和消息队列。

使用命令行配置 SMPP 负载平衡

在命令提示符下,键入:

add smpp user <username> -password <password>  
add service <name> <IP> SMPP <port> –customserverID <customserverID>  
add lb vserver <name> <IP> SMPP <port>  
bind lb vserver <name> <service name>  
set smpp param  
<!--NeedCopy-->

示例

add smpp user smppclient1 -password c03ebb540695b6110eb31172f32245a1 -encrypted -encryptmethod ENCMTHD_2
add smpp user smppclient2 -password c03ebb540695b6110eb31172f32245a1 -encrypted -encryptmethod ENCMTHD_2
add service smmpsvc 10.102.84.140 SMPP 2775 -gslb NONE -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport YES -sp ON -cltTimeout 180 -svrTimeout 360 -CustomServerID ab -CKA NO -TCPB NO -CMP NO
add service smmpsvc2 10.102.81.175 SMPP 2775 -gslb NONE -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport YES -sp ON -cltTimeout 180 -svrTimeout 360 -CustomServerID xy -CKA NO -TCPB NO -CMP NO
add lb vserver smppvs SMPP 10.102.239.179 2775 -persistenceType NONE -cltTimeout 180
bind lb vserver smppvs smmpsvc2
bind lb vserver smppvs smmpsvc
set smpp param -addrrange "d*"
<!--NeedCopy-->

使用配置实用程序配置 SMPP 负载平衡

  1. 导航到“系统”>“用户管理”>“SMPP 用户”,然后添加 SMPP 用户。
  2. 导航到 流量管理 > 负载平衡 > 配置 SMPP 参数,然后根据部署的要求设置参数。
  3. 导航到 流量管理 > 负载平衡 > 虚拟服务器,然后添加 SMPP 类型的虚拟服务器。
  4. 单击“服务”部分,添加 SMPP 类型的服务,然后指定服务器 ID。