Citrix ADC

使用例 1:SMPP ロードバランシング

個人と銀行、広告主、ディレクトリサービスなどの付加価値サービスプロバイダーの間で、Short Message peer to peer(SMPP; ショートメッセージピアツーピア)プロトコルを使用して、毎日数百万のショートメッセージが交換されます。多くの場合、サーバーが過負荷になり、トラフィックがサーバー間で最適に分散されないため、メッセージの配信が遅れます。Citrix ADCはSMPP負荷分散をサポートし、サーバー間でメッセージを最適に分散し、パフォーマンスの低下や停止を防ぎます。

Citrix ADCは、クライアントからメッセージを受信する場合はサーバー側で、サーバーからメッセージを受信する場合はクライアント側で負荷分散を実行します。

Citrix ADCによるSMPPメッセージの負荷分散には、次のような利点があります。

  • サーバへの負荷分散が改善され、エンドユーザーへの応答時間が短縮されます。
  • サーバの健全性監視とフェイルオーバー機能の向上
  • クライアント構成を変更することなく、新しいサーバ(メッセージ・センター)を迅速かつ容易に追加
  • 高可用性

SMPP の概要

SMPP は、長寿命の TCP 接続を介して外部ショートメッセージエンティティ(ESME)、ルーティングエンティティ(RE)、およびメッセージセンター(MC)間でショートメッセージを転送するためのアプリケーションレイヤプロトコルです。友人、連絡先、銀行(モバイルバンキング)、広告主(モバイルコマース)、ディレクトリサービスなどの第三者との間でショートメッセージサービス(SMS)メッセージを送信するために使用されます。ESME(非モバイルエンティティ)からのメッセージは MC に到着し、MC によって携帯電話などのショートメッセージエンティティ(SME)に配信されます。SMPPは、SMEが第三者に短いメッセージを送信するためにも使用されます(たとえば、製品の購入、請求書の支払い、資金振替など)。これらのメッセージは MC に到着し、宛先 MC または ESME に転送されます。

次の図は、モバイルネットワーク内の ESME、RES、および MC のさまざまな SMPP エンティティを示しています。

アーキテクチャ

モバイルネットワークにおけるさまざまな SMPP エンティティのアーキテクチャの概要

注:クライアントと ESME という用語は、ドキュメント全体で同じ意味で使用されます。

ESME(クライアント)は、送信機、受信機、またはトランシーバの 3 つのモードのいずれかで MC への接続を開きます。送信機として、配信のためのメッセージのみを送信できます。受信者は、メッセージのみを受信できます。トランシーバとして、ESME はメッセージの送信と受信の両方を行うことができます。ESME は、バインドトランスミッタ、バインドレシーバ、バインドトランシーバの 3 つのメッセージ(PDU とも呼ばれます)の 1 つを MC に送信します。MC は、要求に応じて、バインドトランスミッタレスプ、バインドレシーバレスプ、またはバインドトランスミッタレスプで応答します。

接続が確立されると、ESME は MC にバインドされているモードに応じて、submit_sm メッセージまたは data_sm メッセージの送信、deliver_sm メッセージまたは data_sm メッセージの受信、またはこれらのタイプのメッセージの送受信を行うことができます。ESME は、query_sm、replace_sm、cancel_sm などの補助メッセージを送信して、以前のメッセージ配信の状態を照会したり、以前のメッセージを新しいメッセージに置き換えたり、未配信メッセージをキャンセルしたりすることもできます。

ESME が使用できないか、モバイルユーザがオンラインでないためにメッセージが配信されない場合、メッセージはキューに入れられます。その後、MC はモバイルサブスクライバが到達可能になったことを検出すると、レシーバまたはトランシーバセッションを介して alert_notification PDU を ESME に送信し、キューに入れられたメッセージの配信を要求します。

各要求 PDU には一意のシーケンス番号があります。応答 PDU のシーケンス番号は、元の要求と同じになります。SMPP を介したメッセージ交換は非同期モードになる可能性があるため、ESME または MC は一度に複数の要求を送信できます。シーケンス番号は、同じ SMPP セッションで応答を返す上で重要な役割を果たします。つまり、シーケンス番号によって、要求と応答のマッチングが可能になります。

次の図は、ESME がトランシーバとしてバインドされるときに、トラフィックフローがさまざまな PDU を使用する方法を示しています。

trafficflow

制限事項:

Citrix ADCアプライアンスは、アウトバインド操作をサポートしていません。つまり、メッセージセンターは、Citrix ADCアプライアンスを介してESMEとのSMPPセッションを開始できません。

Citrix ADC での SMPP ロードバランシングのしくみ

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に配信_smメッセージを送信します。宛先アドレス範囲(998 で始まる番号など)に対応できるクラスタが ADC にバインドされている場合、そのクラスタを選択し、そのクラスタ内の ESME ノード間でメッセージをロードバランシングします。

アドレス範囲の deliver_sm メッセージを提供できる ESME が ADC にバインドされておらず、メッセージキューイングが有効の場合、そのクライアントがレシーバモードまたはトランシーバモードで ADC にバインドするまで、メッセージはキューイングされます。キューのサイズを指定できます。

次の図は、ESME、Citrix ADC、およびメッセージセンター間の PDU の内部フローを示しています。簡単にするために、2 つの ESME と 2 つのメッセージセンターのみが表示されます。

esmes

メッセージ(PDU)のフロー:

  1. ESME1がバインド要求をNetScaler に送信する
  2. NetScalerがバインド要求をMC1に送信する
  3. MC1がバインド応答をNetScaler に送信する
  4. NetScalerがバインド応答をESME1に送信する
  5. ESME1がsubmit_sm(1)をNetScaler に送信する
  6. ESME1がsubmit_sm(2)をNetScaler に送信する
  7. NetScalerがsubmit_sm(1)をMC1に転送する
  8. NetScalerがバインド要求をMC2に送信する
  9. MC2がバインド応答をNetScaler に送信する
  10. NetScalerがsubmit_sm(2)をMC2に転送する
  11. MC1がsubmit_sm(1)をNetScaler に送信する
  12. MC2がsubmit_sm(2)をNetScaler に送信する
  13. NetScalerがsubmit_sm_resp(1)をESME1に転送する
  14. NetScalerがsubmit_sm_resp(2)をESME1に転送する
  15. ESME2がバインド要求をNetScaler に送信する
  16. NetScalerがバインド応答をESME2に送信する
  17. ESME2がsubmit_sm(3)をNetScaler に送信する
  18. NetScalerがsubmit_sm(3)をMC1に転送する
  19. MC2がdeliver_smをNetScalerに送信する(ESME2はメッセージで指定されたアドレス範囲を提供します)
  20. MC1がsubmit_sm_resp(3)をNetScaler に送信する
  21. NetScalerがsubmit_sm_resp(3)をESME2に転送する
  22. NetScalerがdeliver_smをESME2に転送する
  23. ESME2がdeliver_sm_respをNetScaler に送信する
  24. MC1がalert_notificationをNetScaler erに送信する(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(“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)

  • バインドタイプに基づく:次のサンプル式では、バインドタイプが TRANSCEIVER の場合、ADC は特定のメッセージセンターを選択します。(トランシーバはメッセージを送受信できます)。

例:

SMPP.BINDINFO.TYPE.EQ(TRANSCEIVER)

連結メッセージ処理

SMS は最大 140 バイトを保持できます。長いメッセージは、小さな部分に分割する必要があります。宛先モバイルが対応している場合、メッセージは結合され、1 つの長い SMS として配信されます。Citrix ADCは、メッセージのフラグメントを同じメッセージセンターに転送します。各メッセージには、参照番号、シーケンス番号、およびフラグメントの総数が含まれます。参照番号は、長いメッセージの各フラグメントで同じです。シーケンス番号は、メッセージ全体における特定のフラグメントの位置を指定します。すべてのフラグメントが受信された後、ESMEは、1つの長いメッセージにフラグメントを結合し、モバイル加入者にメッセージを配信します。

クライアントがアクティブな接続から切断しても、メッセージセンターへの接続は閉じられません。これは、他のクライアントからの要求のために再利用されます。

制限事項

メッセージセンターからの 59 バイトを超えるメッセージ ID はサポートされていません。メッセージセンターから返されたメッセージIDの長さが59バイトを超える場合、補助操作は失敗し、Citrix ADCはエラーメッセージを返して応答します。

Citrix ADC での 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  

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*"

構成ユーティリティを使用して SMPP ロードバランシングを設定するには

  1. [システム] > [ユーザ管理] > [SMPP ユーザ] に移動し、SMPP ユーザを追加します。
  2. [トラフィック管理] > [ロードバランシング] > [SMPP パラメータの設定] に移動し、展開で必要なパラメータを設定します。
  3. [トラフィック管理] > [ロードバランシング] > [仮想サーバ] に移動し、タイプ SMPP の仮想サーバを追加します。
  4. [Service] セクションをクリックし、SMPP タイプのサービスを追加して、サーバ ID を指定します。