Citrix ADC

用例1:SMPP负载均衡

用例1:SMPP负载均衡

通过使用短消息点对点(SMPP)协议,个人和增值服务提供商(如银行、广告商和目录服务)之间每天交换数百万条短消息。通常情况下,由于服务器过载和通信流没有在服务器之间进行最佳分配,消息传递会被延迟。Citrix ADC支持SMPP负载平衡,并在服务器之间提供消息的最佳分布,防止性能下降和中断。

当从客户端接收消息时,Citrix ADC在服务器端执行负载平衡,当从服务器接收消息时,在客户端执行负载平衡。

Citrix ADC对SMPP消息的负载平衡提供了以下好处:

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

SMPP简介

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

下图显示了移动网络中的不同SMPP实体:esme、REs和mc。

体系结构

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

注意:术语客户端和ESME在整个文档中互换使用。

ESME(客户端)以三种模式之一打开到MC的连接:作为发射机、接收器或收发器。作为传送器,它只能提交信息以供传送。作为接收者,它只能接收消息。作为收发器,ESME既可以提交消息,也可以接收消息。ESME向MC发送三个消息(也称为pdu)中的一个:bind_transmitter、bind_receiver或bind_transceiver。MC根据请求的不同使用bind_transmitter_resp、bind_receiver_resp或bind_transceiver_resp进行响应。

在建立连接之后,根据ESME与MC绑定的模式,它可以发送一个submit_sm或data_sm消息,接收一个deliver_sm或data_sm消息,或者发送和接收任何这些类型的消息。ESME还可以发送辅助消息,如query_sm、replace_sm和cancel_sm,以查询较早的消息传递的状态,用新消息替换较早的消息,或取消未传递的消息。

如果由于ESME不可用或移动订阅者未联机而无法传递消息,则消息将被排队。稍后,当MC检测到移动订户现在可达时,它通过接收器或收发器会话向ESME发送一个alert_notification PDU,请求交付任何排队的消息。

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

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

交通流

限制:

Citrix ADC设备不支持外绑定操作。也就是说,消息中心不能通过Citrix ADC设备与ESME发起SMPP会话。

SMPP负载平衡如何在Citrix ADC上工作

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

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

来自esme的消息

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

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

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

来自消息中心的消息

可以处理特定地址范围的esme被分组到一个集群中。集群中的所有节点都提供相同的凭证。集群内只使用轮询方式进行负载均衡。为了传递源自移动的(MO)消息,消息中心向Citrix ADC发送一个deliver_sm消息。如果一个可以提供目标地址范围(例如,以998开头的数字)的集群被绑定到ADC,它将选择该集群,然后在该集群中的ESME节点之间负载均衡消息。

如果可以为该地址范围提供deliver_sm消息的ESME没有绑定到ADC,并且启用了消息队列,则消息将排队,直到这样的客户机以接收器或收发器模式绑定到ADC。您可以指定队列的大小。

下图说明了esme、Citrix ADC和消息中心之间pdu的内部流。为简单起见,只显示了两个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转发sub_sm(1)到MC1
  8. NetScaler向MC2发送绑定请求
  9. MC2向NetScaler发送绑定响应
  10. NetScaler转发sub_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转发sub_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的多个连接(或绑定请求)。您可以根据SMPP绑定参数配置Citrix ADC来对这些请求进行内容切换。下面是一些用于配置选择消息中心的方法的常用表达式:

  • 基于地址范围:在以下示例表达式中,如果地址范围从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(“虚拟机”)

  • 根据ESME的号码类型(TON):在以下示例表达式中,如果TON = 1(1代表国际号码),ADC将选择一个特定的消息中心。

例子:

SMPP.BINDINFO.ADDR_TON.EQ (1)

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

例子:

SMPP.BINDINFO.ADDR_NPI.EQ (0)

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

例子:

SMPP.BINDINFO.TYPE.EQ(收发)

串联消息处理

一条短信的长度不能超过140个字节。长信息必须分解成更小的部分。如果目标手机有能力,则将消息组合成一条长短信发送。Citrix ADC将消息片段转发到相同的消息中心。每条消息都包含一个引用号、一个序列号和片段的总数。对于长消息的每个片段,引用号都是相同的。序列号指定了特定片段在完整消息中的位置。在接收到所有的片段后,ESME将这些片段组合成一个长消息,并将该消息交付给移动订阅者。

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

限制

来自消息中心的消息id长度不超过59字节。如果消息中心返回的消息ID长度超过59字节,辅助操作将失败,Citrix ADC将响应一条错误消息。

在Citrix ADC上配置SMPP负载均衡

在ADC上配置SMPP负载均衡的任务如下:

  1. 添加SMPP用户。ADC在接受用户的绑定请求之前对用户进行身份验证。用户通常是ESME。
  2. 添加负载均衡虚拟服务器,协议指定为SMPP。
  3. 添加一个服务,指定协议为SMPP,并为每个服务器添加一个唯一的自定义服务器ID。将服务绑定到前面创建的负载均衡虚拟服务器。
  4. 可以选择创建服务组,并将业务添加到服务组中。
  5. 可选地,添加SMPP-ECV类型的监视器并将其绑定到服务。缺省情况下,TCP-default监控器是绑定的。
  6. 设置SMPP参数,如客户端模式、消息队列等。

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

在命令提示符处,输入:

add smpp user  -password  add service   smpp  -customserverID  add lb vserver   smpp  bind lb vserver  <服务名> set smpp param 

例子

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 -cipDISABLED -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 smmpsvc bind lb vserver smppvs smmpsvc set SMPP param -addrrange "d*" 

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

  1. 导航到System > User Administration > SMPP Users,并添加SMPP用户。
  2. 导航到流量管理>负载均衡>配置SMPP参数,并根据实际部署情况设置参数。
  3. 导航到流量管理>负载均衡>虚拟服务器,并添加一个SMPP类型的虚拟服务器。
  4. 单击“服务”部分中的,添加SMPP类型的服务,并指定服务器ID。