用例1:smpp负载平衡
通过使用短消息对等(SMPP)协议,个人和增值服务提供商(如银行,广告商和目录服务)之间每天交换数百万条短消息。通常情况下,邮件传递会延迟,因为服务器负载过重,而且流量未在服务器之间以最佳方式分配。Citrix ADC支持 SMPP 负载平衡,并在服务器之间提供最佳消息分配,从而防止性能不佳和中断。
Citrix ADC在从客户端接收消息时在服务器端执行负载平衡,并在从服务器接收消息时在客户端执行负载平衡。
Citrix ADC对SMPP消息进行负载平衡具有以下优势:
- 服务器上更好的负载分配,这意味着对最终用户的响应时间更快
- 服务器运行状况监视和更好的故障转移功能
- 快速轻松地添加新服务器(消息中心),无需更改客户端配置
- 高可用性
SMPP简介
SMPP是一种应用层协议,用于通过长期TCP连接在外部短消息实体(埃斯米),路由实体(重新)和消息中心(MC)之间传输短消息。它用于在朋友,联系人和银行(移动银行),广告商(移动商务)和目录服务等第三方之间发送短信服务(SMS)消息。来自esme(非移动实体)的消息到达Mc,后者将这些消息分发给移动电话等短消息实体。SMPP也被中小型企业用来向第三方发送短信(例如,购买产品,支付账单和资金转账)。这些消息到达MC并转发到目标MC或esme。
下图显示了移动网络中的不同SMPP实体:esmes, res和Mc。
移动网络中不同SMPP实体的架构概述
注意:客户端和esme术语在整个文档中可互换使用。
Esme(客户端)以三种模式之一打开与MC的连接:作为发射器,接收器或收发器。作为一个发射器,它只能提交消息进行传递。作为接收者,它只能接收消息。作为收发器,esme可以提交和接收消息。埃斯米会向 MC 发送三条消息(也称为 PDU)中的一条:bind_transmitter、bind_receiver 或 bind_transceiver。MC 会根据请求的情况使用 bind_transmitter_resp、bind_receiver_resp 或 bind_transceiver_resp 进行响应。
建立连接后,埃斯米可以根据其绑定到MC的模式,发送submit_sm或data_sm消息消息,接收deliver_sm或data_sm消息,或发送和接收任何这些类型的消息。埃斯米还可以发送辅助消息,例如query_sm, replace_sm和cancel_sm,以查询早期邮件传递的状态,用新邮件替换早期邮件或取消未传递的邮件。
如果因esme不可用或移动订阅者未联机而未传递邮件,则该邮件将排队。稍后,当MC检测到移动用户现在可以访问时,它会通过接收器或收发器会话向埃斯米发送一个alert_通知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可以负载平衡来自客户端和服务器的消息。它可以监视消息中心的运行状况并处理连接的消息。它还为消息中心提供内容切换支持。
源自欧洲和微型企业的报文
必须以用户身份在Citrix ADC上添加每个ESME以进行身份验证。客户端通过发送绑定请求,与adc上配置的SMPP虚拟服务器建立TCP连接。Adc对客户端进行身份验证,如果成功,则解析绑定消息。然后,adc将请求发送到配置的负载平衡方法选择的消息中心。如果与消息中心的连接无法重复使用,ADC将通过向消息中心发送新的绑定请求来打开与消息中心的TCP连接。
在将响应(submit_sm_resp或data_sm_resp)从消息中心转发到客户端之前,ADC会向消息ID添加一个自定义服务器ID,以标识消息中心进行辅助操作(如查询,替换或取消消消息请求)。来自其他客户端的请求以相同的方式进行负载平衡。
在原始绑定请求中,客户端指定它可以提供的地址范围。此范围用于将传递_sm或data_sm邮件从邮件中心转发到客户端。
来自消息中心的邮件
可以处理特定地址范围的esmes分组到一个群集中。群集中的所有节点都提供相同的凭据。在群集中,只使用轮询方法进行负载平衡。要传递移动源(MO)消息,消息中心会向Citrix ADC发送一条传递_sm消息。如果能够提供目标地址范围(例如,以998年开头的数字)的群集绑定到ADC,则会选择该群集,然后在该群集中的埃斯米节点之间负载平衡消息。
如果能够在地址范围内提供传递_sm消息的埃斯米未绑定到ADC,并且消息队列已启用,则消息将排队,直到此类客户端以接收器或收发器模式绑定到ADC。您可以指定队列的大小。
下图说明了ESME, Citrix ADC和消息中心之间PDU的内部流程。为简单起见,仅显示两个esme和两个消息中心。
报文流(pdu):
- ESME1向NetScaler发送绑定请求
- NetScaler将绑定请求发送到MC1
- MC1将绑定响应发送到NetScaler
- NetScaler将绑定响应发送到ESME1
- ESME1向NetScaler发送submit_sm(1)
- ESME1将submit_sm(2)发送到NetScaler
- NetScaler将submit_sm(1)转发到MC1 .使用实例
- NetScaler将绑定请求发送到MC2
- MC2将绑定响应发送到NetScaler
- NetScaler将submit_sm(2)转发到MC2
- MC1向NetScaler发送submit_sm_resp(1)
- MC2向NetScaler发送submit_sm_resp(2)
- NetScaler将submit_sm_resp(1)转发至ESME1 .使用实例
- NetScaler将submit_sm_resp(2)转发至ESME1 .使用实例
- ESME2向NetScaler发送绑定请求
- NetScaler将绑定响应发送到ESME2
- ESME2将submit_sm(3)发送到NetScaler
- NetScaler将submit_sm(3)转发到MC1 .使用实例
- MC2将deliver_sm发送到NetScaler (ESME2提供消息中指定的地址范围)
- MC1向NetScaler发送submit_sm_resp(3)
- NetScaler将submit_sm_resp(3)转发至ESME2 .使用实例
- NetScaler将deliver_sm转发至ESME2 .使用实例
- ESME2将deliver_sm_resp发送至NetScaler
- MC1向NetScaler发送alert_notification (ESME1提供消息中指定的地址范围)
- NetScaler将deliver_sm_resp转发至MC2
- NetScaler将alert_notification转发到ESME1 .使用实例
消息中心的运行状况监视
默认情况下,TCP_Default监视器绑定到SMPP服务,但您可以绑定类型为SMPP的自定义监视器。自定义监视器打开到消息中心的TCP连接,并发送一个enquire_link数据包。根据探头的成功或失败,服务标记为“向上”或“向下”。
消息中心上的内容切换
消息中心可以接受来自esme的多个连接(或绑定请求)。您可以将Citrix ADC配置为根据SMPP绑定参数进行内容切换这些请求。以下是一些用于配置方法以选择消息中心的常见表达式:
- 基于地址范围:在以下示例表达式中,如果地址范围从988开始,adc会选择特定的消息中心。
示例:
SMPP.BINDINFO.ADDRESS_RANGE.CONTAINS(“^ 988”)
- 基于埃斯米ID:在以下示例表达式中,如果艾思梅ID等于ESME1, ADC会选择特定消息中心。
示例:
SMPP.BINDINFO.SYSTEM_ID.EQ(“ESME1”)
- 基于埃斯米类型:在以下示例表达式中,如果艾思梅类型为vm, ADC会选择特定消息中心。虚拟机代表语音邮件系统。
示例:
SMPP.BINDINFO.SYSTEM_TYPE.EQ(“虚拟机”)
- 基于埃斯米的数字类型(吨):在以下示例表达式中,如果吨等于1(1代表国际数字),ADC会选择特定的消息中心。
示例:
SMPP.BINDINFO.ADDR_TON.EQ (1)
- 基于埃斯米的数字计划指示器(NPI):在以下示例表达式中,如果NPI等于0(0表示未知连接),ADC会选择特定的消息中心。
示例:
SMPP.BINDINFO.ADDR_NPI.EQ (0)
- 基于绑定类型:在以下示例表达式中,如果绑定类型为TransCEVER, ADC会选择特定的消息中心。(收发器可以发送和接收消息)。
示例:
SMPP.BINDINFO.TYPE.EQ(收发)
连接消息处理
短信最多可容纳 140 个字节。较长的消息必须分解成较小的部分。如果目标移动设备有能力,则会将消息组合起来并作为一条长短信传递。Citrix ADC会将消息片段转发到同一消息中心。每条消息都包含参考编号、序列号和片段总数。对于长消息的每个片段,参考编号是相同的。序列号指定特定片段在完整消息中的位置。在收到所有片段后,esme将这些片段合并为一条长消息,并将消息传递给移动用户。
如果客户端与活动连接断开连接,则与消息中心的连接不会关闭。它被重复用于来自其他客户端的请求。
限制
不支持来自消息中心的消息id超过59字节。如果消息中心返回的消息ID长度超过59个字节,辅助操作将失败,Citrix ADC会以错误消息响应。
在Citrix ADC上配置SMPP负载平衡
执行以下任务以在adc上配置SMPP负载平衡:
- 添加一个SMPP用户。Adc在接受来自用户的绑定请求之前对用户进行身份验证。用户通常是esme。
- 添加负载平衡虚拟服务器,将协议指定为smpp。
- 添加服务,将协议指定为smpp,并为每个服务器提供唯一的自定义服务器id。将服务绑定到之前创建的负载平衡虚拟服务器。
- 或者,创建服务组并将服务添加到服务组。
- 或者,添加类型为smpp-ecv的监视器并将其绑定到服务。默认情况下,将绑定TCP默认监视器。
- 设置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负载平衡
- 导航到”系统" > "用户管理" > " smpp用户,然后添加SMPP用户。
- 导航到流量管理>负载平衡>配置SMPP参数,然后根据部署的要求设置参数。
- 导航到流量管理 > 负载平衡 > 虚拟服务器,然后添加SMPP类型的虚拟服务器。
- 在“服务”部分中单击,添加SMPP类型的服务,然后指定服务器id。