(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-01-14
(54)【発明の名称】DPDK環境でのNATに基づく負荷分散方法
(51)【国際特許分類】
H04L 47/125 20220101AFI20220106BHJP
H04L 45/7453 20220101ALI20220106BHJP
【FI】
H04L12/803
H04L12/743
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2021521491
(86)(22)【出願日】2019-06-25
(85)【翻訳文提出日】2021-04-20
(86)【国際出願番号】 CN2019092690
(87)【国際公開番号】W WO2020177246
(87)【国際公開日】2020-09-10
(31)【優先権主張番号】201910158676.6
(32)【優先日】2019-03-04
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
(71)【出願人】
【識別番号】518371489
【氏名又は名称】南京郵電大学
【氏名又は名称原語表記】NANJING UNIVERSITY OF POSTS AND TELECOMMUNICATIONS
【住所又は居所原語表記】No.66 Xin Mofan Road, Gulou Nanjing, Jiangsu 210003 China
(74)【代理人】
【識別番号】110001139
【氏名又は名称】SK特許業務法人
(74)【代理人】
【識別番号】100130328
【氏名又は名称】奥野 彰彦
(74)【代理人】
【識別番号】100130672
【氏名又は名称】伊藤 寛之
(72)【発明者】
【氏名】李鵬
(72)【発明者】
【氏名】徐壮
(72)【発明者】
【氏名】王汝伝
(72)【発明者】
【氏名】徐鶴
(72)【発明者】
【氏名】朱楓
(72)【発明者】
【氏名】程海涛
(72)【発明者】
【氏名】李超飛
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA13
5K030HD09
5K030KA05
5K030LB05
5K030LE03
5K030MA12
5K030MB02
(57)【要約】
本発明はDPDK環境でのNATに基づく負荷分散の方法を提供する。この方法はDPDKモジュール及びNATモジュールを含むスケジューラにより実現され、以下のステップを含む。DPDKモジュール及びNATモジュールを初期化し、送受信キューポート、NATルールテーブル及びステータス記録テーブルを得る。DPDKモジュールによりデータパケットの送信元・宛先IP及びアドレスを受信して記録し、送信元・宛先IP及びアドレスに対応するハッシュ値を計算する。ハッシュ値に基づいてNATルールテーブルを検索し、NATルールテーブルには得られたハッシュ値に対応するサーバIP及びポート情報が存在するか否かを判断し、存在する場合、前記送信元・宛先IP及びアドレスを置き換え、データグラム伝送を実現し、そうでない場合、ステータス記録テーブルから残存負荷が最大のサーバを見つけ、データパケットを残存負荷が最大のサーバに送信し、残存負荷が最大のサーバとクライアントサイドの通信情報をNATルールテーブルに記録してNATルールテーブルを更新する。本発明によれば、スケジューラの大規模トラフィックに対する適用性が向上し、良好な拡張性を有し、サーバ負荷の均等化に有利である。
【選択図】
図1
【特許請求の範囲】
【請求項1】
DPDK環境でのNATに基づく負荷分散方法であって、
前記方法は、DPDKモジュール及びNATモジュールを含むスケジューラにより実現され、
前記DPDKモジュール及びNATモジュールを初期化し、前記スケジューラの送受信キュー及び対応するポートを配置し、対応するNATルールテーブル及びステータス記録テーブルを設定するステップS1と、
DPDKモジュールにより前記スケジューラが受信したデータパケットの送信元・宛先IP及びポートを記録し、前記送信元・宛先IP及びポートに基づいてハッシュ計算して前記データパケットのハッシュ値を得るステップS2と、
前記ハッシュ値に基づいて、前記NATルールテーブルをトラバースし、前記NATルールテーブルには前記ハッシュ値に対応する内部サーバのIP及びポート情報が存在するか否かを検索し、存在する場合、前記NATルールテーブルに基づいて前記送信元・宛先IPを置き換え、前記データパケットを対応するサーバに送信し、存在しない場合、ステップS4を実行するステップS3と、
前記NATには前記ハッシュ値に対応する内部サーバのIP及びポート情報が存在しない場合、前記ステータス記録テーブル中残存負荷が最大のサーバを探し、前記データパケットを前記残存負荷が最大のサーバに送信し、前記残存負荷が最大のサーバとクライアントサイドの通信情報を前記NATルールテーブルに記録し、前記NATルールテーブルを更新するステップS4と、
を含むことを特徴とする、方法。
【請求項2】
前記ステップS2は、以下のことをさらに含み、
前記データパケットがクライアントサイドからサーバに送信されたか、それともサーバからクライアントサイドに送信されたかを判断し、前記データパケットがクライアントサイドからサーバに送信された場合、ステップS3~S4を実行し、そうでない場合、以下のステップを実行し、
前記ハッシュ値に基づいて前記NATルールテーブルをトラバースし、前記NATルールテーブルにおける前記ハッシュ値に対応する送信元・宛先IP及びポート情報を検索し、前記送信元・宛先IP及びポートを置き換え、前記データパケットを対応するクライアントサイドに送信することを特徴とする、請求項1に記載の方法。
【請求項3】
前記ステップS1は、以下のことをさらに含み、
前記ステータス記録テーブルにおけるサーバに対して、残存負荷に基づいて所定ルールに従ってグレーディングすることを特徴とする、請求項1に記載の方法。
【請求項4】
前記DPDKモジュールでは、rte_eth_tx_burst()関数により前記データパケットを受信することを特徴とする、請求項1から3のいずれか1項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ネットワーク通信分野に属し、具体的にはDPDK(Data Plane Development Kit,データプレーン開発キット)環境でのNAT(Network Address Translation,ネットワークアドレス変換)に基づく負荷分散方法に関する。
【背景技術】
【0002】
今日、コンピュータユーザの爆発的な増加に伴い、ネットワークトラフィックもますます大きくなり、サーバの負荷容量も大きな課題となっている。現在、最高のパフォーマンスを発揮する単一サーバでさえ、今の大規模トラフィックの要求に耐えることはできない。したがって、負荷分散を実現するには、クラスタリングのアイデアを使用することが非常に重要である。従来のNATに基づく負荷分散では、伝統的なTCP/IPプロトコルスタックに配置され、システムの頻繁な中断やコンテキストの継続的なスケジューリングにより間違いなく多くの時間がかかっている。したがって、負荷分散を実現するための従来のNATの使用では、スケジューラ自体が負荷分散のボトルネックになっている。スケジューラのパフォーマンスの問題により、通常、約10台のサーバしかスケジュールできない。これはほとんどの場合には適用可能であるが、ネットワークトラフィックが爆発的に増加している現在では、特にDDOSテクノロジーの成熟により、数百GB/Sレベルのトラフィックを攻撃することはもはや問題ではなくなる。このような背景では、NATに基づく従来の負荷分散は明らかに適用できなくなるため、大規模なトラフィックに耐えることができる負荷分散技術を見つけることが急務となっている。
【0003】
従来のNATに基づく負荷分散の場合、外部要求に対して、スケジューラが傍受した後、一般にはポーリングの方法を使用し、アドレスプールから内部サーバのアドレスをランダムに見つけて宛先アドレスを置き換え、送信元アドレスをそのまま保持する。さらに内部サーバに送信して処理する。内部と外部の通信は逆の過程であり、スケジューラがサーバから送信されたデータパケットの送信元アドレスをスケジューラが有する全局アドレスに置き換え、宛先アドレスをそのまま保持し、送信する。
【0004】
従来のNATに基づく負荷分散の利点は、サーバがTCP/IPを支持する任意のオペレーティングシステムを実行できることである。従って、スケジューラに1つのIPを配置するだけで、サーバ群は独自のIPアドレスを使用できるため、パブリックネットワークのIPアドレスを節約し、より柔軟である。
【0005】
しかし、スケジューラは、データパケットに対して頻繁な検索、置き換え操作を行う必要がある。このワークロードは、サーバによるデータパケットの詳細な処理よりもはるかに少なくなるが、ワークロードが増加すると、スケジューラもこのような高頻度の作業に耐えることができなくなる。一般的に、サーバノードの数が20に増えると、スケジューラ自体がシステムの新しいボトルネックになる可能性がある。
【0006】
また、従来のNATに基づく負荷分散の場合、ポーリング方法は一般的に考えられている。つまり、各サーバにはスケジューラが優先する機会が均等にあり、ある程度、各サーバの使用のバランスをとることができる。しかし、この状況では、サーバ自体のパフォーマンスの違いは無視されている。例えば、サーバAの負荷容量がサーバBの10倍である場合、このようなポーリング方法では、サーバBの負荷が上限に達したときにおいても、サーバAの負荷上限の1/10に達す。これはサーバBにとって不公平であり、間違いなくシステム全体のパフォーマンスを低下させる。
【発明の概要】
【0007】
大規模なトラフィックに対応できず、システム全体のパフォーマンスが不公平なスケジューリングのために低下する従来技術における上記の問題に対して、本発明では、DPDK環境でのNATに基づく負荷分散方法が提供される。この方法では、DPDKモジュールをスケジューラの処理モジュールとして使用し、データパケットに対するDPDKの高速処理機能により、NATモジュールのステータス記録テーブルを組み合わせて、データパケットをスケジュール及び転送する。これによって、スケジューラ自体のパフォーマンスの制限が克服され、負荷分散の上限が向上し、バランスの取れた転送が実現される。具体的な技術案は以下の通りである。
【0008】
DPDK環境でのNATに基づく負荷分散方法であって、
前記方法は、DPDKモジュール及びNATモジュールを含むスケジューラにより実現され、
前記DPDKモジュール及びNATモジュールを初期化し、前記スケジューラの送受信キュー及び対応するポートを配置し、対応するNATルールテーブル及びステータス記録テーブルを設定するステップS1と、
DPDKモジュールにより前記スケジューラが受信したデータパケットの送信元・宛先IP及びポートを記録し、前記送信元・宛先IP及びポートに基づいてハッシュ計算して前記データパケットのハッシュ値を得るステップS2と、
前記ハッシュ値に基づいて、前記NATルールテーブルをトラバースし、前記NATルールテーブルには前記ハッシュ値に対応する内部サーバのIP及びポート情報が存在するか否かを検索し、存在する場合、前記NATルールテーブルに基づいて前記送信元・宛先IPを置き換え、前記データパケットを対応するサーバに送信し、存在しない場合、ステップS4を実行するステップS3と、
前記NATには前記ハッシュ値に対応する内部サーバのIP及びポート情報が存在しない場合、前記ステータス記録テーブル中残存負荷が最大のサーバを探し、前記データパケットを前記残存負荷が最大のサーバに送信し、前記残存負荷が最大のサーバとクライアントサイドの通信情報を前記NATルールテーブルに記録し、前記NATルールテーブルを更新するステップS4と、
を含む。
【0009】
さらに、前記ステップS2は、以下のことをさらに含み、
前記データパケットがクライアントサイドからサーバに送信されたか、それともサーバからクライアントサイドに送信されたかを判断し、前記データパケットがクライアントサイドからサーバに送信された場合、ステップS3~S4を実行し、そうでない場合、以下のステップを実行し、
前記ハッシュ値に基づいて前記NATルールテーブルをトラバースし、前記NATルールテーブルにおける前記ハッシュ値に対応する送信元・宛先IP及びポート情報を検索し、前記送信元・宛先IP及びポートを置き換え、前記データパケットを対応するクライアントサイドに送信する。
【0010】
さらに、前記ステップS1は、以下のことをさらに含み、
前記ステータス記録テーブルにおけるサーバに対して、残存負荷に基づいて所定ルールに従ってグレーディングする。
【0011】
さらに、前記DPDKモジュールでは、rte_eth_tx_burst()関数により前記データパケットを受信する。
【0012】
従来技術に比べて、本発明のDPDK環境でのNATに基づく負荷分散方法は以下の有益な効果を有する。
(1)大規模トラフィックの適応性を有する。従来のプロトコルスタックの代わりにDPDKを使用することによりデータパケットの処理を速くし、従来のNATに基づく負荷分散のスケジューラの制限を克服することにより、スケジューラはより多くのサーバをスケジューリングすることができ、大規模トラフィックでの負荷分散を実現する。(2)良好な均衡性を有し、サーバクラスタ全体のパフォーマンスを向上できる。ステータス記録テーブルの残存負荷及びパフォーマンスの比較により得られた値を利用することにより、本当の残存負荷が最大のサーバを高速に見つけることができ、各サーバをポーリングする従来の方法に比べて、サーバのパフォーマンスの違いを考慮に入れることにより、負荷分散を確実に実現する。(3)拡張性を有する。ソフトウェアによりスケジューラの処理パフォーマンスを向上させることができ、大規模トラフィックの負荷分散を実現することができる。ハードウェアシステムに比べ、後続の開発に優れたサポートを提供する多くの汎用APIインターフェースがあるとともに、実際のニーズに応じてソフトウェアをさらに開発することもできる
【図面の簡単な説明】
【0013】
【
図1】本発明の方法によりクライアントサイドとサーバの1回の通信を実現するフローチャートである。
【
図2】本発明の実施例に記載のNATルールテーブルの構造模式図である。
【
図3】本発明の実施例の前記方法を完成するモデル構造の模式図である。
【発明を実施するための形態】
【0014】
当業者が本発明をよりよく理解できるようにするために、以下、図面を参照しながら本発明の実施例を明確かつ完全に説明する。
【0015】
本発明の実施例では、DPDK環境でのNATに基づく負荷分散方法が提供される。
図3に示すように、本発明のスケジューラ内にはDPDKモジュール及びNATモジュールが設けられている。本発明の方法は前記スケジューラにより実現される。
図1は本発明の方法によりクライアントサイドとサーバの1回の通信を実現するフローチャートである。同図から分かるように、本発明の方法は以下のステップを含む。
【0016】
S1:DPDKモジュール及びNATモジュールを初期化し、スケジューラの送受信キュー及び対応するポートを配置し、対応するNATルールテーブル及びステータス記録テーブルを設定する。
【0017】
本発明の実施例において、DPDKモジュールによりデータパケットの受送信処理を実現し、NATモジュールによりNATルールテーブル及びステータス記録テーブルをメンテナンスする。NATルールテーブルはハッシュテーブルである。
図2に示すように、各キー値は2つの値に対応する。1つの値は受信時に宛先IP、ポートを置き換え、内部サーバに送信するために用いられ、もう1つの値は送信時に送信元アドレスを外部スケジューラのIPアドレス、ポートに置き換えてからクライアントサイドに送信するために用いられる。NATルールテーブルは初期化時に作成され、スケジューラがデータパケットを受信したときに更新される。毎回クライアントサイドのIP、ポート情報に基づいてハッシュし、内部サーバのIP、ポート情報を1番目の位置に配置し、スケジューラが使用する外部IP、ポート情報を2番目の位置に位置する。スケジューラが検索する際に、まずデータパケットの源端口アドレスに基づいてこのデータパケットが、外部クライアントサイドが受信するものであるか、又は内部サーバが送信するものであるかを確定し、そしてクライアントサイドのIP及びポート情報に基づいてハッシュすることにより、宛先IP、ポートの代わりにキーの1番目の値を使用するか、又は送信元IPポートの代わりに2番目の値を使用するかを確定する。
【0018】
本発明のステータス記録テーブルは、残存負荷を有するサーバの具体的な状況を記録するために用いられる。本発明では、1つのNATモジュールの内部サーバの照会周期を設定する。具体的には実際の状況に応じて設定する。これに対し、本発明は制限及び固定しない。1つの照会周期内では、NATモジュールは定時的に内部サーバを照会し、現在内部サーバの現在負荷を検索し、各内部サーバのパフォーマンスと組み合わせて総合的に考慮する。総合的な考慮のプロセスは以下のとおりである。for t←0to n;state record[t]←server_load[t]*server_kind[t]*r,用server_kind=[S1,S2...Sn]。各サーバのパフォーマンス情報を記録し、数値が大きければサーバのパフォーマンスが強いことを示し、現在負荷server_loadとserver_kindとを運算してサーバの真実な残存負荷状況を得る。ここで、rは校正定数であり、state_recordを1-100の間に限定するものである。最後に得られたグレード記録はステータス記録テーブルstate_recordに挿入される。このような方式によれば、従来のNATがポーリングを使用する方式ではサーバパフォーマンスの違いが無視されることによるシステム全体のパフォーマンスの低下が防止される。好ましくは、本実施例では、内部サーバの負荷状況を1-100の合計100個のグレードにグレーディングする。なお、これは本発明の好適な実施例に過ぎず、本発明を制限するものではない。
【0019】
S2:DPDKモジュールによりスケジューラが受信したデータパケットの送信元・宛先IP及びポートを記録し、送信元・宛先IP及びポートに基づいてハッシュ計算してデータパケットのハッシュ値を得る。
【0020】
本発明の具体的な実施例において、DPDKモジュールはrte_eth_tx_burst()関数によりデータパケットを受信する。rte_eth_tx_burst()関数のプロセス実現過程は以下のとおりである。
【0021】
rte_eth_dev_configure()から送受信キューを配置し、そしてmemcpy(&dev->data->dev_conf,sizeof(dev->data->dev_conf))関数により配置パラメータを設備のデータ領域にコピーし、(*dev->dev_ops->dev_infos_get)(dev,&dev_info)により設備情報を取得する。同時に、本発明では、rte_eth_rx_queue_setup()関数により受信キューに対してポートを初期化し、8つのキューを配置し、そしてrxq=rte_zmalloc_socket("ethdev RX queue",sizeof(structixgbe_rx_queue),RTE_CACHE_LINE_SIZE,socket_id)関数によりキュー構造を割り当て、構造体を充填し、配置完了後、rte_eth_tx_burst()関数によりデータパケットを受信し、対応するデータパケットの送信元・宛先IP及びポート情報を記録する。スケジューラは受信したデータパケットに対してデータパケットがクライアントサイドからサーバに送信されたものであるか、又はサーバからクライアントサイドに送信されたものであるかを判断する。データパケットがサーバからクライアントサイドに送信されたものである場合、IP及びポートに基づいてハッシュ計算して対応するハッシュ値を取得し、ハッシュ値に基づいてNATルールテーブルをトラバースし、NATルールテーブルにおける前記ハッシュ値に対応する送信元・宛先IP及びポート情報を検索し、送信元・宛先IP及びポートを置き換え、rte_eth_tx_burst()関数によりデータパケットをDPDKモジュールを介して対応するクライアントサイドに送信する。そうでない場合、即ち、データパケットがクライアントサイドからサーバに送信されたものである場合、同様に送信元・宛先IP及びポートに基づいてハッシュ計算してデータパケットのハッシュ値を取得し、得られたハッシュ値に基づいて以下のステップS3~S4を実行する。
【0022】
S3:ハッシュ値に基づいて、NATルールテーブルをトラバースし、NATルールテーブルにはハッシュ値に対応する内部サーバのIP及びポート情報が存在するか否かを検索し、存在する場合、NATルールテーブルに基づいて送信元・宛先IPを置き換え、データパケットを対応するサーバに送信し、存在しない場合、ステップS4を実行する。
【0023】
具体的には、rte_eth_tx_burst()関数がデータパケットを受信した後、データパケット送信元・宛先IPアドレスポートの情報を記録し、スケジューラは、これが受信したデータパケットであると識別し、送信元ポート、IP情報に基づいてハッシュ計算し、ハッシュ値に基づいてNATルールテーブルには対応する内部サーバのIP、ポート情報が存在するか否かを検索する。存在する場合、NATルールテーブルに基づいて送信元・宛先IPを置き換え、データパケットを対応するサーバに送信する。そうでない場合、ステップS4を実行する。
【0024】
S4:NATには前記ハッシュ値に対応する内部サーバのIP及びポート情報が存在しない場合、前記ステータス記録テーブル中残存負荷が最大のサーバを探し、前記データパケットを前記残存負荷が最大のサーバに送信し、前記残存負荷が最大のサーバとクライアントサイドの通信情報を前記NATルールテーブルに記録し、前記NATルールテーブルを更新する。
【0025】
具体的には、NATルールテーブルから対応する情報が見つからなかった場合、これはクライアントサイドの初めてのリクエストであることを示す。この場合、スケジューラは、ステータス記録テーブルから最大の記録数値を検索し、それに対応する内部サーバのIPを取り出し、そして、スケジューラはこのデータパケットの宛先アドレスを置き換え、DPDKモジュールのrte_eth_tx_burst()関数により内部サーバに送信し、残存負荷が最大のサーバとクライアントサイドの通信情報をNATルールテーブルに記録し、次回の使用のためにNATルールテーブルを更新する。
【0026】
以上、
図1を参照しながら本発明の方法によりサーバとクライアントサイドの1回の通信を行う過程を説明したが、複数回の通信の原理及びメカニズムは1回の通信と同じであるため、詳細な説明を省略する。
【0027】
以上のことから、従来技術に比べて、本発明の方法は、従来のプロトコルスタックの代わりにDPDKを使用することによりデータパケットの処理を速くし、従来のNATに基づく負荷分散のスケジューラの制限を克服することにより、スケジューラはより多くのサーバをスケジューリングすることができ、大規模トラフィックでの負荷分散を実現し、より大きな規模のトラフィックに適用でき、利用分野はより広くなる。本発明では、ステータス記録テーブルの残存負荷及びパフォーマンスの比較により得られた値を利用することにより、本当の残存負荷が最大のサーバを高速に見つけることができ、各サーバをポーリングする従来の方法に比べて、サーバのパフォーマンスの違いを考慮に入れることにより、負荷分散を確実に実現し、サーバ間の負荷を良好に均衡化することでき、サーバクラスタ全体のパフォーマンスを向上できる。本発明は、ソフトウェアによりスケジューラの処理パフォーマンスを向上させることができ、大規模トラフィックの負荷分散を実現することができる。ハードウェアシステムに比べ、後続の開発に優れたサポートを提供する多くの汎用APIインターフェースがあるとともに、実際のニーズに応じてソフトウェアをさらに開発することもできるので、スケジューラは良好な拡張性を有する。
【0028】
以上の説明は本発明の好適な実施例であり、本発明の保護範囲を制限しない。上記実施例により本発明を詳しく説明下が、当業者は、上記各実施形態の技術手段を修正したり、同等置換したりすることができる。本明細書及び図面の内容に基づいて得られた同等構造及び関連技術分野での使用はいずれも本発明の保護範囲内に含まれる。
【国際調査報告】