how to implement opendaylight application ?
TRANSCRIPT
Copyright 2015 FUJITSU LABORATORIES LIMITED
2015年12月12日株式会社富士通研究所李 忠翰 ([email protected])
OpenDaylight上でApplicationを実装してみよう!
Copyright 2015 FUJITSU LABORATORIES LIMITED11
以前、MPLS JAPAN 2015では
MLPS JAPAN 2015ではOpenDaylightでGroup based Policy(GBP)を用いて仮想・物理ネットワーク機器を同時に制御してコンテナの仮想ネットワーク設定とトラヒックのQoS制御を行うデモを紹介しましたOpenDaylightを用いたグループベースドポリシーによる仮想ネットワ
ークの制御, 李 忠翰(株式会社富士通研究所)
http://www.mpls.jp/presentations/lch_MPLS_JP.pdf
今日は、OpenDaylight上でどうすればApplicationを作れるかに関して紹介します!
Copyright 2015 FUJITSU LABORATORIES LIMITED22
今日のTramaDay#8では
OpenDaylightのApplication(feature)を作るために必要な知識に関して紹介
Apache Karaf (OSGi)
SAL (AD-SAL/MD-SAL)
YANG
RESTconf
Yang and RESTconf
JAVA
Concurrent programming (Multithreading)
Generic
Object Orient Programming (OOP)
Maven
Copyright 2015 FUJITSU LABORATORIES LIMITED33
Apache Karaf (OSGi)
Apache Karafって何?
OSGiに基づいた実行環境であり、 OSGiを使いやすくしたもの
ODLはKaraf基盤であり、Karaf上で動くApplicationをfeatureと言う
Karafのコマンドを利用してfeatureを動的にinstall/uninstallなどが可能
例えば、OpenFlowとOVSDBを同時に使いたい時には、それらに関連するfeatureをODL上でInstallして使用
< ODL on Karaf >
Copyright 2015 FUJITSU LABORATORIES LIMITED44
SAL (AD-SAL/MD-SAL)
Service Abstraction Layer (SAL)って何?
SALはOSのKernelのようなもの
Featureとして存在
AD-SAL/MD-SALの違い
AD-SAL : Application(Feature)のData modelの構造を個別に設計・実装する必要があり、RESTAPIのmessageを個別のData storeに保存
MD-SAL : Data modelをYangで記述して必要なAPIなどをYangtoolsが自動生成したりRESTconfのmessageを共通のData storeに保存
ODL(AD-SAL)Feature
DataStore
FeatureDataStore
RESTAPI (Northbound)
・個別のDatastoreでDataの管理・必要なAPIなどの直接設計・実装
ODL(MD-SAL)DataStore
Feature
Feature
RESTconf (Northbound)
・共通のDatastoreでDataの管理・必要なAPIなどの自動生成
Copyright 2015 FUJITSU LABORATORIES LIMITED55
Yang
Yangって何?
Data modeling languageの一つで、代表的にNetconfで利用される
なぜ、Yangが必要か?
ODL(Lithium)ではAD-SALが完全になくなり、MD-SALに移行
MD-SALで内部のデータ構造がYangで記述されているので、必ず理解する必要がある
Yangで記述したものがJAVAのClassやObjectとしてマップされる
参考文献&資料
YangのRFC
https://tools.ietf.org/html/rfc6020
Copyright 2015 FUJITSU LABORATORIES LIMITED66
RESTconf
RESTconfって何?
MD-SALで利用されるNorthboundのProtocolであり,Rest + Netconf
Endpoint/Policyなどで必要な機能を追加してPUT/POST/DELETE/GETを利用してODLのData storeを操作
参考資料
RESTconfのRFC
•https://tools.ietf.org/id/draft-bierman-netconf-restconf-04.txt
ODL APIdoc
•http://your host ip:8181/apidoc/explorer/index.html
>feature:install odl-mdsal-apidocs (ODL(karaf)で以下のcommandで有効)
•使用するRESTconf messageがどのType(PUT/POST/DELETE/GET)をサポートしているかを記述
Copyright 2015 FUJITSU LABORATORIES LIMITED77
Yang and RESTconf YangとRESTconfの関係
Yangで記述したものがRESTconfで確認できる
じゃ、Yangだけ記述できたら何となくODLで作成できるか?
→ NO, Yangで記述できたらYangtoolsがJAVA Codeは生成してくれるが、MD-SALのData storeから必要なデータを取り出す部分とSouthbound protocolまでの部分は全部実装する必要がある
< pyangによるpolicy.yang(GBP)の一部 >
< RESTconfのPolicy messageの一部 >
Copyright 2015 FUJITSU LABORATORIES LIMITED88
JAVA – (1)
なぜJAVA concurrent programmingの知識が必要か?
ODLはJAVAで実装
FeatureはMultithreading構造になっていて複数のThreadが同時に実行されるケースが頻繁に存在
Callback methodもかなり登場
実際よく登場するケースと対策
Methodの最初にObjectがNULLであるかどうかをCheckしてNULLであればそのままThreadが終了されるケースが頻繁に存在
→どこで終了されたのかを把握することがとても困難
複数のThreadの中で一部だけ止めても、非同期のThreadは普通に動く
最後にThreadが終了された部分を探す時にLogger(Debug mode)を利用すると割と役に立つ
Copyright 2015 FUJITSU LABORATORIES LIMITED99
JAVA – (2)
なぜGenericの知識が必要か?
Yangtoolsで変換されてDataStoreに保存されたObjectの中で必要なObjectだけを取り出して保存するために必要
内部実装でGoogleのpackage(com.google.common.collect)も良く使われるので覚えたほうが良い
なぜOOPの知識が必要か?
多くの内部実装がJAVA classの単一継承や複数のInterfaceを利用した多重継承を普通に使用
Copyright 2015 FUJITSU LABORATORIES LIMITED1010
Maven
Mavenって何?
作ったアプリケーション(feature)をコンパイルする時に利用されるtool
コンパイル時、遠隔のRepositoryから新しいSource(MD-SALなど)の差分とかを取ってくる
→ ControllerのCore部分(MD-SALなど)がたまたま変わることもあり、突然ODL上でちゃんとFeatureをinstallできない状況がある
なぜMavenの知識が必要か?
単純にコンパイルだけできれば良いのではないか?
→ NO,コンパイルする際にいろいろoptionがあり、POM.XMLを修正して作ったfeatureを新たにODL(karaf)上でfeatureとしてDeployするために必要
覚えておくと役に立つ機能
-Dmaven.test.skip=true
Unit testをSkip (Skipしたくなければ、test codeを実装すればOK)
-o
Offline modeで実行 (差分を無理可能)
Copyright 2015 FUJITSU LABORATORIES LIMITED1111
Featureを実装するための全体的な手順
① Data Storeのために、YangでData modelを記述
② Data Storeで保存されている複数のobjectから必要な部分だけを取り出すためのMethodを実装
③ ObjectをSouthbound protocolとやり取りするためのMethodを実装
④ Mavenを利用してコンパイルして、Karaf上でFeatureをinstall
⑤ RESTconf message (Northbound)を作成してSouthbound protocolまでちゃんとmessageが降りてくることを確認
Application(Feature)の実装の流れ
MD-SAL(RESTconf) ⑤
MD-SAL(Data Store) ①
Feature ②
Feature (southbound) ③
OpenDaylightRESTconfprotocol
User
SouthboundProtocol
Networkdevice
④
Copyright 2015 FUJITSU LABORATORIES LIMITED1212
まとめ
OpenDaylightでApplication(feature)を実装するために、必要な知識に関して紹介 YangとJAVAをちゃんと理解したら、Applicationを作れます!
上の知識をベースにOpenDaylightでApplication(feature)を実装する全体的な手順に関して紹介
Copyright 2015 FUJITSU LABORATORIES LIMITED1313