また、OpenStack自体について興味がある方は『マイクロサービスアーキテクチャが支えるOpenStackの動作と仕組み』の連載記事も併せてご参照ください。
osloとは?
osloはOpenStackの各コンポーネント(OpenStackの最も大きなソフトウェアモジュールの単位)で共通で利用するライブラリを集めたプロジェクトです。
その昔のOpenStackでは設定ファイルやコマンドライン引数の解析、メッセージパッシング、ロギングなどといった処理がコンポーネントごとに個別で存在しており、開発・メンテナンスコストが掛かることが問題になっていました。
そして2013年にリリースされたOpenStackのメジャーバージョンGrizzlyで共通ライブラリ群を提供するolsoプロジェクトが発足し、同じ年にリリースされたHavanaで設定ファイルとコマンドライン引数の解析を行うoslo.configと、通知やRPCの仕組みを提供するoslo.messagingがリリースされました。現在では、国際化や並行処理など、本稿執筆時点で34のプロジェクトが存在しています。
余談ですが、olsoプロジェクトのネーミングは、イスラエルとパレスチナの和平協定「オスロ合意」にちなんで付けられたという経緯があったりします。
oslo自体はOpenStackのプロジェクトですが、用途はOpenStackに限定されません。例えばoslo.configは、設定ファイルとコマンドライン引数の解析を行うライブラリとして広く知られており、SDN Framework Ryuなどで採用されています。他にもロギング処理全般を行うolso.logやCLIフレームワークのcliffなどが有名で、OpenStackユーザ会のメンバーによる解説などもあります。
本稿で取り上げるoslo.messagingは、RabbitMQやZeroMQなどのMQシステムを介した通知やRPCの仕組みを提供します。以降でoslo.messagingとその使い方について詳しく解説していきます。
oslo.messagingの概要
oslo.messagingの使い方について見ていく前に、oslo.messagingについての理解を深めるため、なぜこの仕組みを使うと良いかについて考えてみます。
MQを利用した通知やRPCの仕組みは、もちろんoslo.messagingが登場する以前から存在していました。RabbitMQを使う場合にはPikaというAMQPライブラリを用いてそれらの処理を行うことができます。またZeroMQを使う場合には、PyZMQライブラリを用い、Kafkaにも同様のPythonライブラリが存在します。
しかし、これらを用いることによって、アプリケーションにミドルウェアないしはプロトコル依存のコードが入ってしまいます。例えばMQに「RabbitMQ」を使っていて、これを「Kafka」に切り替えたいと思った場合、アプリケーションにそれなりの規模のコード修正が必要になると思います。
これに対しoslo.messagingは各MQライブラリを抽象化しており、利用するMQに応じてドライバを選択できる仕組みを提供しています。そのため、先のようにMQをRabbitMQからKafkaに変更したいといった場合でも、設定ファイルを変更するだけでアプリケーションのコード修正を行わずにMQを切り替えることができます。
このようにoslo.messagingによって、ミドルウェア・プロトコル非依存の通知、RPCをアプリケーションに実装できます。これによってユーザはさまざまなMQシステムを選択できるようになり、アプリケーションをサステイナブル(Sustainable)にすることができます。