FBOSS は、ネットワーク スイッチを制御および管理するための Facebook のソフトウェア スタックです。
FBOSS は、多数のユーザー空間アプリケーション、ライブラリ、およびユーティリティで構成されます。
FBOSS の最初のオープンソース リリースは主にエージェント デーモンで構成されていますが、追加の部分や機能のリリースにも取り組んでいます。
FBOSS の中心部分の 1 つは、各スイッチ上で実行され、ハードウェア転送 ASIC を制御するエージェント デーモンです。エージェント デーモンは、転送情報をハードウェアに送信し、ARP や NDP などのいくつかのコントロール プレーン プロトコルを実装します。エージェントは、ルートを管理するための節約 API を提供し、外部ルーティング制御プロセスがハードウェア転送テーブルにプログラムされたルーティング情報を取得できるようにします。
エージェントのコードは fboss/agent にあります。
エージェントには、ポートと VLAN 構成を指定するための JSON 構成ファイルが必要です。いくつかのサンプル設定ファイルは fboss/agent/configs にあります。これらのファイルは実際には人間が消費することを目的としたものではありません。Facebook にはこれらのファイルを生成するツールがあります。
FBOSS エージェントはハードウェア ASIC 内の転送テーブルを管理しますが、Thrift API を介して現在のルートを通知する必要があります。
最初のオープン ソース リリースには、エージェントと通信できるルーティング プロトコル デーモンがまだ含まれていません。私たちが Facebook で使用しているルーティング プロトコル デーモンは、むしろ私たちの環境に固有のものであり、オープンソース コミュニティにとってはあまり役に立たない可能性があります。 Facebook 以外でより一般的に使用するには、既存のオープンソース ルーティング ツールを変更して FBOSS エージェントと通信できるようにする必要がありますが、これはまだ実装されていません。それまでの間、ルートを手動で追加および削除できる小さなサンプル Python スクリプトを fboss/agent/tools に含めました。
明らかに、FBOSS エージェントとの対話、そのステータスの報告、構成ファイルの生成、および問題のデバッグには、追加のツールとユーティリティが必要です。
現時点では、オープンソース リリースに対応できるツールが多くありませんが、今後数週間のうちにさらに多くのツールを利用できるようにしたいと考えています。それまでの間、thrift コンパイラは、エージェントのさまざまな thrift インターフェイスを手動で呼び出すことができるように、Python リモート スクリプトを自動的に生成できます。
FBOSS のビルド方法については、BUILD.md ドキュメントを参照してください。
FBOSS は、Facebook のデータセンター ネットワークのニーズに対応するために特別に設計されていますが、より広範なコミュニティにも役立つことを期待しています。ただし、FBOSS のこの初期リリースでは、Facebook で使用される機能を超えた他のネットワーク構成をサポートするための変更と追加の開発が必要になる可能性があることに注意してください。 FBOSS がさらに成熟するまでは、FBOSS をターンキー ソリューションとして使用したいネットワーク管理者ではなく、主にネットワーク ソフトウェア開発者が関心を持つことになるでしょう。
私たちはコミュニティからのフィードバックを楽しみにしています。また、ネットワーク スイッチをプログラムしたい他のユーザーにとって FBOSS が出発点として機能することを願っています。
Facebook では FBOSS の開発が進行中であり、今後もさらに多くのコンポーネント、追加機能、既存のツールの改善をリリースしていく予定です。
「ライセンス」を参照してください。