楽天が携帯電話網構築で導入することで話題になっているNFV。Network Function Virtualizationの略らしいですが、これが一体なんなのか、という点と、私がちょっと疑問に思っている点を軽く紹介。
NFVのキモは、ネットワークの機能を仮想化することです。読んで字のごとし。ではここでいうネットワークの機能とは何でしょうか。
これはNFVのプラットフォームごとにいろんな考え方があるので一概にこれだとは言い切れませんが、スイッチ、ルータといった基礎的なネットワーク要素から、DNS、DHCP、NATといった応用的なネットワーク要素までをおおよそ含んでいるように見えます。
具体的にどのように仮想化するのか、というと、ざっくりというと、物理基盤の上に仮想基盤を動かしてネットワーク機能に特化したバーチャルマシンを作って動かす、という感じ。バーチャルマシン自体も汎用OSだったりするパターンもあったり、バーチャルマシンがネットワーク装置をそのままエミュレートしているようなパターンもあったり、なので、これまた一概に言えませんが、共通しているのは「物理的な計算リソースを仮想化して間接的に使う」ということです。
そんなもん何十年前からあった話や、とツッコミが入りそうですが、いや、実のところ、その通りなんですよ。ネットワークの仮想化自体は、20年前の技術でもちょっとしたノウハウさえあれば素人でもなんとか一つ二つは組み上げることができた程度のものなんです。オープンソースのスイッチ・ルータエミュレータだのDHCPだのDNSだのは仮想基盤の上で動くものができて久しいですし。
じゃあなんで今頃になってNFVが注目されるようになったのか。これは逆説的に、私がNFVを懐疑的に見てしまう理由になってしまうんですが。
単純に、性能です。
計算機の物理的な計算リソースの性能が桁違いに向上し、どうやらいろんな仮想ネットワーク要素を同時に動かしても何とかなるレベルになってきたところでNFVという話題が盛り上がって、主要なネットワークベンダもNFV製品をどんどんとリリースし始めた、というのが昨今の状況なんですね。
でね、私が懐疑的なのは、「そこまで計算性能上がってないだろ」ってことなんです。もう少し具体的に言うと、「1コア単位の性能」でみると、ハイエンドのスイッチやルータをエミュレートするにはまるで足元にも及ばないってことなんです。仮想化すると、最終的にはパケットバイパケットで「どのCPUコアが処理するか」が決まってきます。つまり、一つのパケットを同時に1コアしか処理できないんです。そんなもん瞬時の話やん、って思うかもしれませんが、例えば一般的なハイエンドのスイッチ製品、基本的にパケット転送を専用のハードウェアで処理していますが、何らかの理由で(スイッチ内部に搭載している)CPUのコアで処理しなければならなくなると、その処理性能は百分の一以下に落ちるんです。別にスイッチ製品だからと言ってボロCPUを使っているわけはなくて、1コアあたりの性能でいえば最新サーバ製品にさほど劣るものではありません。仮想化しているオーバーヘッドを無視したとしても、CPUでのパケット処理ってのは、ちょっと無理があるんじゃね、ってのが私の印象なんです。
いや、実のところ、ごくごく普通の企業向け製品であれば、全然問題ないと思うんです。そもそもから言えば、そういう「ハイエンドのスイッチ製品」なんて企業向けで使うわけないですもん。じゃあ、ハイエンドのスイッチ製品を使うのってどんな人? ・・・はい、ご名答。通信キャリアやデータセンター屋さんです。そういう人たちは、NFVをちょっとかじっては去っていきます。彼らの求める処理性能を一ミリも満たせませんから。もちろん、DHCPやDNSやFWなどの「もともとCPUで処理していた機能」に関してはガンガンNFV化しているようですが、それを言ったらデータセンター屋さんなんて「マシンを仮想化してナンボ」のプロですからね、やって当たり前のところをやってるだけ、NFVなんていう大層なお題目を掲げたりなんてしてないわけです。
ということで、楽天の言う「オールNFV化」みたいなのに、すごく疑問を持ってしまうんですね。そもそもeNB/EPC関連ノードなんて仮想ノード以外の製品をいまさら探すほうが難しいくらいですし、じゃあそんな大層なお題目を掲げてNFV化するのはまさかネットワークインフラ部分? えー、いくらなんでもそんなん無理やろ、なんて思っちゃうわけです。
何はともあれ、NFVと一言で言っても、「NFV化に適していない部分」ってのはまだまだ残っていて、不適部分を無理にNFV化するとコスパすっごい悪いよ、っていうお話なのでした。
TWEET