各サービスのサーバ・クライアント機構

各サービスのファイル構成はどのようになっているのでしょうか? サンプルとして、nova-volume のソースコード一覧を見てみましょう。

nova-2012.1
  nova/
    volume/
      __init__.py
      api.py      クライアントコード(別コンポーネント用)
      manager.py  サーバコード(nova-volume)

      driver.py
      iscsi.py
      netapp.py
      san.py
      volume_types.py
      xensm.py
      nexenta/

ここで注目したいのは、api.py と manager.py です。

ファイル名 説明
api.py クライアント用コード。あるサービスが別のサービスに指示を出す為の メソッド群(API)が含まれている。
manager.py サーバ用コード。RPC で受けたリクエストは manager.py 上のパブリッ クメソッドにマッピングされて実行される。

基本的に nova-api 以外の nova の各サービスは api.py と manager.py が存在します。各サービスは関連する(指示を出す)別サービスの api.py を import し、自身の処理の中で別サービスの API メソッドをコールします。これにより、あるサービスは別サービスが管理する DB やリソースに関して直接記述する必要がなく、各サービスがそれぞれ別サービスの API を記述する無駄を避ける事ができます。

nova-api は例外で、REST クライアントからのリクエストを受け取り、他サービスに指示を出すのが基本なので、nova-api を REST で呼び出すための api.py が存在しません。

Previous topic

service.py の迷宮

Next topic

RPC:投げっぱなしと返事待ち

This Page