how to implement opendaylight application ?

14
Copyright 2015 FUJITSU LABORATORIES LIMITED 2015年12月12日 株式会社富士通研究所 忠翰 ([email protected]) OpenDaylight上でApplicationを 実装してみよう!

Upload: chunghan-lee

Post on 16-Apr-2017

450 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: How to implement OpenDaylight application ?

Copyright 2015 FUJITSU LABORATORIES LIMITED

2015年12月12日株式会社富士通研究所李 忠翰 ([email protected])

OpenDaylight上でApplicationを実装してみよう!

Page 2: How to implement 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を作れるかに関して紹介します!

Page 3: How to implement 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

Page 4: How to implement OpenDaylight application ?

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 >

Page 5: How to implement OpenDaylight application ?

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などの自動生成

Page 6: How to implement OpenDaylight application ?

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

Page 7: How to implement OpenDaylight application ?

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)をサポートしているかを記述

Page 8: How to implement OpenDaylight application ?

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の一部 >

Page 9: How to implement OpenDaylight application ?

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)を利用すると割と役に立つ

Page 10: How to implement OpenDaylight application ?

Copyright 2015 FUJITSU LABORATORIES LIMITED99

JAVA – (2)

なぜGenericの知識が必要か?

Yangtoolsで変換されてDataStoreに保存されたObjectの中で必要なObjectだけを取り出して保存するために必要

内部実装でGoogleのpackage(com.google.common.collect)も良く使われるので覚えたほうが良い

なぜOOPの知識が必要か?

多くの内部実装がJAVA classの単一継承や複数のInterfaceを利用した多重継承を普通に使用

Page 11: How to implement OpenDaylight application ?

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で実行 (差分を無理可能)

Page 12: How to implement OpenDaylight application ?

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

Page 13: How to implement OpenDaylight application ?

Copyright 2015 FUJITSU LABORATORIES LIMITED1212

まとめ

OpenDaylightでApplication(feature)を実装するために、必要な知識に関して紹介 YangとJAVAをちゃんと理解したら、Applicationを作れます!

上の知識をベースにOpenDaylightでApplication(feature)を実装する全体的な手順に関して紹介

Page 14: How to implement OpenDaylight application ?

Copyright 2015 FUJITSU LABORATORIES LIMITED1313