ADC

使用例 1:SMPP 負荷分散

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

NetScalerは、クライアントからメッセージを受信したときはサーバー側で、サーバーからメッセージを受信したときはクライアント側で負荷分散を実行します。

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

  • サーバーの負荷分散が改善され、エンドユーザーへの応答時間が短縮されます
  • サーバーのヘルスモニタリングとフェイルオーバー機能の向上
  • クライアント構成を変更せずに、新しいサーバー (メッセージセンター) をすばやく簡単に追加できます
  • 高可用性

SMPP の概要

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

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

アーキテクチャ

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

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

ESME (クライアント) は、送信機、受信機、またはトランシーバの 3 つのモードのいずれかで MC への接続を開きます。送信機としては、配信用のメッセージのみを送信できます。受信側としては、メッセージのみを受信できます。トランシーバーとして、ESMEはメッセージを送受信できます。ESME は MC に、バインド送信機、バインドレシーバー、またはバインドトランシーバーの 3 つのメッセージ (PDU とも呼ばれます) のうちの 1 つを MC に送信します。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 はモバイル加入者が接続可能になったことを検出すると、受信側またはトランシーバセッション経由で alert_notification PDU を ESME に送信し、キューに入っているメッセージの配信を要求します。

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

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

トラフィックフロー

制限事項:

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

NetScalerでのSMPP負荷分散の仕組み

ESME(クライアント)は、NetScalerへの接続を開くためのバインドメッセージを送信します。ADC は各 ESME を認証し、認証に成功すると、適切なメッセージで応答します。NetScalerは各メッセージセンターとの接続を確立し、これらのメッセージセンター間ですべてのメッセージの負荷分散を行います。ADC はクライアントからメッセージを受信すると、開いている接続をメッセージセンターに再利用するか、開いている接続が利用できない場合はメッセージセンターにバインド要求を送信します。

ADC は、クライアントとサーバーから発信されるメッセージのロードバランシングを行うことができます。メッセージセンターの状態を監視し、連結されたメッセージを処理できます。また、メッセージセンターのコンテンツスイッチングもサポートしています。

ESME から送信されるメッセージ

認証を行うには、各ESMEをNetScalerにユーザーとして追加する必要があります。クライアントは、バインド要求を送信することにより、ADC に設定された SMPP 仮想サーバーとの TCP 接続を確立します。ADC はクライアントを認証し、成功するとバインドメッセージを解析します。次に、ADC は、設定された負荷分散方式で選択されたメッセージセンターに要求を送信します。メッセージセンターへの接続を再利用できない場合、ADC はメッセージセンターに新しいバインド要求を送信して、メッセージセンターとの TCP 接続を開きます。

メッセージ・センターからクライアントに応答(submit_sm_resp または data_sm_resp)を転送する前に、ADCはメッセージIDにカスタム・サーバーIDを追加して、クライアントによるメッセージのクエリ、置換、キャンセルなどの補助操作のためにメッセージ・センターを識別します。他のクライアントからのリクエストも同様に負荷分散されます。

元のバインドリクエストでは、クライアントは処理できるアドレス範囲を指定します。この範囲は、メッセージセンターからクライアントに deliver_sm または data_sm メッセージを転送するために使用されます。

メッセージセンターから送信されたメッセージ

特定のアドレス範囲を処理できるESMEは、クラスターにグループ化されます。クラスター内のすべてのノードが同じ認証情報を提供します。クラスター内では、ロードバランシングにはラウンドロビン方式のみが使用されます。モバイル発信(MO)メッセージを配信するために、メッセージセンターはdeliver_smメッセージをNetScalerに送信します。宛先アドレス範囲 (たとえば、998 で始まる番号) に対応できるクラスターが ADC にバインドされている場合、ADC はそのクラスターを選択し、そのクラスター内の ESME ノード間でメッセージの負荷分散を行います。

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

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

エスメ

メッセージ(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_resp (1) をNetScaler に送信する
  12. MC2がsubmit_sm_resp (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はアラート通知をNetScalerに送信します(ESME1はメッセージで指定されたアドレス範囲を処理します)
  25. NetScaler deliver_sm_respをMC2に転送します
  26. NetScalerはアラート通知を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 として配信されます。NetScalerはメッセージの断片を同じメッセージセンターに転送します。各メッセージには、参照番号、シーケンス番号、およびフラグメントの総数が含まれます。参照番号は、長いメッセージの各フラグメントで同じです。シーケンス番号は、メッセージ全体における特定のフラグメントの位置を指定します。すべてのフラグメントが受信されると、ESME はフラグメントを 1 つの長いメッセージにまとめ、そのメッセージをモバイルユーザに配信します。

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

制限事項

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

NetScalerでのSMPP負荷分散の構成

ADC で SMPP ロードバランシングを設定するには、次のタスクを実行します。

  1. SMPP ユーザーを追加します。ADC は、ユーザーからのバインド要求を受け入れる前にユーザーを認証します。ユーザーは通常 ESME です。
  2. プロトコルを SMPP として指定して、負荷分散仮想サーバーを追加します。
  3. プロトコルを SMPP として指定し、各サーバに固有のカスタムサーバ ID を指定してサービスを追加します。サービスを以前に作成した負荷分散仮想サーバーにバインドします。
  4. オプションで、サービスグループを作成し、そのサービスグループにサービスを追加します。
  5. オプションで、SMPP-ECV タイプのモニターを追加してサービスにバインドします。TCP-Default モニターはデフォルトでバインドされます。
  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 を指定します。