日本OpenStackユーザ会 第16回勉強会に行ってきました
というわけで参加報告するまでが勉強会ということで。
まずはじめに勉強会の準備・会場の準備をしていただいた方、発表者の方、お疲れ様です。 本当にありがとうございました。
では、私の記憶と手元のメモを晒します。 意外とメモが役に立たなくてなんのメモかもう思い出せない・・・ あと、発表者が言ったことなのか?自分の感想・メモなのかが思い出せない・・・
誰かこれを読んで間違いに気づいた方いれば教えて下さいませ。
勉強会について
- Site: http://connpass.com/event/4064/
- 日時: 2013/11/24 (Sun) 13:00〜17:00
テーマ
- novaのソースコードリーディング
- havana 2013.2
資材
-
- https://github.com/openstack/nova
- GitHubにソースあるしご自由に準備してくださいとのことでしたが、講師の @boot_vmlinuz さんが、GNU Globalを使用したHTML資材を準備してくれいました
発表スライド
内容
発表スライド読んだほうが正しいですが、なんとなく。
- ディレクトリ構造
- nova-* のブートストラップ
- RPC(プロセス間通信)
- DB
- 定期実行処理(Periodic Tasks)
ディレクトリ構造 編
発表スライドに書いてます。こんなメモよりそれを見るのが正解。
何となくとっていた and スライドに書いてない気がする メモをとりあえず
- hacking : なんだっけ?知ってる人います?に誰も反応せず
- objects
- サービス間のデータ受け渡し用(RPC)
- instance_id とか渡してたけど、それだとinstance_id使ってDBの情報を引くことになる。DBへの負荷高いから、objects の objects に突っ込んで渡そうになっているとのこと
- servicegroup: 死活監視
- 昔は DBで管理してた
- それは負荷が高い
- 死活監視をモジュール化した。DB以外使える
- 3種類
- DB
- zookeeper
- memcacched
- DBドライバは @boot_vmlinuz さんが書いたから不具合あれば教えてくださいとのこと
- storage: ストレージ操作関連 multipathとかも
この辺でファイルの話もあったけどなぜかメモも記憶も飛んでいる・・・
requirements.txt
etc に設定ファイルにサンプルあるのでのぞいてみる
- 設定の数は超絶多いとのこと
- @ishikawa84g さんがエクセルにまとめてくれているそうな
nova.conf.sample をExcelの表にしたものです http://t.co/asfKbduv1z #opst16
— ishikawa84g@魔法中年 (@ishikawa84g) 2013, 11月 24
nova-* プロセスのブートストラップ編
- プロセスのエントリーポイントとなるコードは、nova/cmd/*.py ですよ
- 昔は、binディレクトリ以下にあったけど変わった
- setup.cfg でスクリプトになるように書かれてる
簡単なサンプルとして nova/cmd/consoleauth.py を見てみた。
novaは3種類に分けれるよん
- 単一プロセスのサービス
- nova-consoleauthなど。ここが多い
- 複数プロセスのサービス
- nova-conductor
- workers で設定できる
- RESTful APIサービス
- nova-api
nova/cmd/*.py
から始まりソースを順番に読む。このあたりで、迷子の参加者多数。
そしてなぜか自分のメモがここだけ だぜ口調。
- nova.service.Service の解説だぜ
- nova.service.Service.create で作るんだぜ
- つまりは、 nova-compute だけ db_allowed=False だぜ
- nova-compute はDBアクセス禁止だぜ
- 今までDBからとっていたような情報が欲しい場合は、nova-conductor に問い合わせるぜ
この辺は1行ずつ読んで解説をしていただいたと思いますが、ソース追いかけてて断片的にしかメモがないので、記憶で読んだ気がするコードやキーワードを並べときます。
nova/cmd/*.py
nova/service.py
- class Service
- def create
- def start
nova/openstack/common/service.py
nova/manager.py
- def start の init_hostの話
- nova-computeの場合
nova/compute/manager.py
- additional_apisがあるのはのnova-conductorのみ(たぶん)
- post_start_hook は nova-cells だけ
- backdoor_port の話
- telnet 指定のportにつなぐと python のインタラクティブシェル使える
- http://eventlet.net/doc/modules/backdoor.html
RPC用 consumer の話
Sercice の startの解説で
- consumer 3つ
- topic = computeとかみたいにサービスの種類を表す
host = サービスが動作するホスト
topic and fanout=False : 複数ある同一topicのサービスのうち1つだけが、メッセージ受け取る
- topic.host and fanout=False : 自分宛てのメッセージを受け取る
- topic and fanout=True: topic関係者全員が受け取る
RPCの話
発表スライドの13枚目。
- サービスBのAPIでも rpcしないケースもあり。
- 例: DBみるだけのときなど
- RPC送信部 impl_kombuなど
nova/openstack/common/rpc/__init__.py
nova/openstack/common/rpc/amqp.py
nova/openstack/common/rpc/impl_kombu.py
- RabbitMQ
nova/openstack/common/rpc/impl_qpid.py
- Apache Qpid
nova/openstack/common/rpc/impl_zmq.py
- ZeroMQ
nova/openstack/common/rpc/impl_fake.py
- UnitTest向け。
- dispatcherにより適切なモジュールを呼び出し
- B/manager.py or baseapi.py
check_for_lock
- よくわかんなかった・・・
rpc の データのserialize/desirialize => MQに突っ込むために、JSON形式の文字列データにしたり、受信側でそれを pythonのプリミティブ型(int,str,dict,list)に戻したりする
nova/conductor/ 以下の例(スライド 14)
- manager.py nova-conductor 自身の本体
- api.py => 他のサービスからの nova-conductor の呼び出しコード
- rpcapi.py => 他のサービスからの nova-conductor のRPC呼び出しコード
おまけ編
- 中国のスパコンでOpenStack使われた話
- http://www.openstack.org/assets/presentation-media/How-to-Deploy-OpenStack-on-Tianhe-2-Supercomputer-2.pdf
DB呼び出し
スライド 16
サービスA => nova/db/api.py
=> nova/db/sqlalchemy/api.py
=> DB
- impl は sqlalchemy だけ。
- zookeeper かなんか別のドライバ作る?って話もあるとか。
- 作る話は止まってたけど、最近動き出した?みたいな話もありんすた
- DB操作のメソッドを追加する場合は、両方にメソッドを足しましょう
nova/db/api.py
nova/db/sqlalchemy/api.py
- すべての APIが context を渡すようになっている
periodic tasks
ユーザからのリクエストイベントからの処理じゃなくて、定期的に実行する処理。periodic_task
nova/openstack/common/periodic_task.py
nova/compute/manager.py
- デコレータがついてるやつがperiodic_taskになりんす
- @periodic_task.periodic_task
- いろいろあるよねーな話。ザクッと解説していただけましたがメモなし
- shelved => havanaからできた
- 停止に近い
- VMの定義を残したまま、ハイパーバイザー上のリソースを開放する
- デコレータに引数も付けれるよ
- interval を個別にコントールできたりする?
- spacing
まとめ
今日まだまだ読んでないところあるよん。virt のところとか。 でもまあプログラムのエントリーポイントとか、どこにコードがあるかわかったはずなので、今日の説明を足がかりに処理を追いかけれるよ。みんながんばれ。
その他宣伝
- クラウドマネジメントツール勉強会 第二回
- 12/4 水曜日
- みんなくるよね?
- OpenStack Advent Calendar 2013
- 小ネタでもなんでも歓迎
- Glance の代わりに Walrus を使おうとしている人や、イジメ抜く、許さない、絶対な人もいる
- 沖縄 OpenDays
- 沖縄でやる。丸一日は、OpenStackのみ。マジチャレンジャー。
- OpenStack Days Tokyo 2014
- 2/13,14
- 今年は二日間だから day ではなく days だよ
おしまい!意外とメモしてないとこ多いけどもう覚えてません! その他の情報は、 Twitter のハッシュタグ #opst16 でどうぞ。