LoginSignup
1
0

More than 5 years have passed since last update.

diameter

Posted at

diameter Queue

 diameterプロトコルはtcp であり、ネットワークリソースの接続、切断、タイムアウトに係るステートマシンをtcpレイヤに任せることができ、ビッグパケットにも対応することができる。

 diameterプトロコル設計単体で考えた場合、シンプルに実装設計することが可能である。しかし、シンプルになることによるデメリットもある、永続tcpなので、例えばudpサーバのようにRSSパケット受信+CPUコア占有処理のように、並列スケールアップさせる実装設計はdiameterプロトコルでは難しい

motivation

 先に述べた通りプロトコルがシンプルであるがために「diameter over tcp」はスケールアウト、スケールアップに弱い。アプライアンスメーカーの意図するように、ユーザ増加に伴ってそのライセンスを追加購入・配置するのは芳しくない。そこで「優先度付 分散キュー」と、「mysql-bin-log」を採用することによって1筐体(40 core割当)で、2Mtps(1グループパフォーマンス:500Ktps x 4グループ):1秒間に200万リクエストに応答できる diameterサーバを設計・実装した

モジュール配置図

doc_40.png

※実装評価では、10core:1グループ、500K tps(1秒間に50万リクエスト)までを確認
※4グループへのスケールアウトは、設計・論理上可能

優先度付 分散キュー

doc_41.png

seagull@diameter との接続評価

seagull@diameter は、1コア(シングルスレッド)で動作するdiameterクライアントシミュレータである、今回評価では以下のようにネットワーク接続設定した

doc_42.png

seagull@diameter クライアントと、xdiameterを接続し以下について評価した

  • キューイング処理で並列度が上がるか?
  • 1プロセス・500Kpps程度のスループット
    • キュー目詰まりとスレッド(CPU)間コンテキストスウィッチ増加の副作用は?
  • tcpリソースが充分か?

結果

  • seagullクライアントツールの送信・受信限界が想定よりもだいぶ低く、1プロセスあたり、20Kpps 程度が限界であったが、このクライアントを4並列(別プロセス)させて80Kppsまでスケールアウトできることを確認
  • この時、サーバ側負荷は非常に低く想定では、tcpサーバ:単体負荷評価時の500Kpps近いスループットを実現できると考えられる
    • 80Kpps x 平均322 Byte(CCR:466, CCA:178) = 200Mbps までは実測確認

doc_43.png

 左側:グリーン端末でseagullシミュレータをオペレートし、右側:ブルー端末はXdiameter サーバの起動・ログ表示・パケット確認に使用した

本パフォーマンス・スケール実動作の通りクライアント側はそれぞれのモジュールが理想的に分散スケールアウトできている。また、サーバ側はクライアント4CPUが100%CPUビジー状況時にも十二分な余裕を持っていることがわかる

パケットキャプチャイメージを以下に示す。

doc_44.png

このパケット送受信シーケンスが示す通り、readとsend は必ずしも交互に処理されていない、xdiameterのパケット受信 -> キューイング処理をバッチ処理としており、最大一度のバッチで16パケットまで連続処理している

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0