写真1●Zebra 2.0の開発を進めている石黒邦宏氏
写真1●Zebra 2.0の開発を進めている石黒邦宏氏
[画像のクリックで拡大表示]
写真2●Zebra 2.0の特徴
写真2●Zebra 2.0の特徴
[画像のクリックで拡大表示]

 2016年10月21日に開催されたネットワーク関連のイベント「ONIC Japan 2016」で、HASH-SET 代表取締役の石黒邦宏氏(写真1)は新しいルーティングソフトウエア「Zebra 2.0」を開発中であることを明らかにした。同氏が開発した「GNU Zebra」およびその派生ソフトウエアである「Quagga」は、オープンソースのルーティングソフトウエアとして広く使われている。Zebra 2.0は、米グーグルが開発したプログラミング言語「Go」を採用し、マルチスレッドに対応したのが特徴。2017年には公開したいとする。

 同氏がZebraの開発を始めたのは1996年。当時のネットワークソフトウエアはモノリシックな(=一体型の)構造を持つものが多かった。それに対し、Zebraはマルチプロセスで、各プロトコルを処理するモジュールを独立したプロセスとして実装するという、当時としては先進的な構造を持っていた。カーネルのFIB(Forwarding Information Base、ルーティングテーブル)には「zebra」というプロセスだけがアクセスするようになっていた。

 しかし、現在ではZebraの構造には古さが目立つという。まず、プロトコルモジュールがシングルスレッドでしか動作しない。このため、「100×100ノードのフルメッシュネットワークにおけるOSPF(Open Shortest Path First)処理」といった負荷が高いルーティングを実行しようとすると、処理を取りこぼすことがあった。

 設定機能がモジュールに埋め込まれて一体化しているのも問題だという。また、プロトコルモジュールとzebraプロセスの間はIPC(Inter-Process Communication、プロセス間通信)を利用してデータをやり取りしており、非同期通信やキューの仕組みがない。MPLS(Multi-Protocol Label Switching)によるVPNをサポートしていないという問題もある。「Zebraを商用化したソフトウエアはMPLSをサポートしていたが、Zebra/Quaggaには入れられなかった。そのことをとても後悔している」(石黒氏)。

 こうした問題点を解決するソフトウエアとして「Zebra 2.0」を開発することにした(写真2)。「コンテナに対応すること」「マルチコアを効果的に利用すること」「分散アーキテクチャー」「様々なデータ転送オプションに対応すること」を目標とする。

 ライセンスには、GNUではなく「Apache License」を採用した。最大の特徴はGoを使ってプログラムを一から書き直していること。途中までC++を使って開発していたが、それらのソースコードを捨て、マルチスレッドソフトウエアを開発しやすいGoに切り替えたという。

 米インテルが開発したネットワーク高速化技術であるDPDK(Data Plane Development Kit)などを利用できるようにデータ転送エンジンを抽象化している。MPLSサポートも追加した。内部の通信には、グーグルが開発したRPC(Remote Procedure Call)フレームワークである「gRPC」を採用した。gRPCが対応するGo、Python、Rubyといった様々な言語でAPIにアクセスできる。

 設定機能は「Openconfigd」としてモジュールから独立させた。設定のコミットやロールバックといった動作も可能。シェルの「bash」をベースにしたコマンド体系を持つ。

 個々のプロトコルモジュールはシングルプロセス/マルチスレッドのアーキテクチャーになり、少なくとも二つのスレッドを持つ。なおZebra 2.0では、従来のZebra用のプロトコルモジュールや、Goで開発されているBGPルーティングソフトウエアである「GoBGP」も利用できるという。