SDN Framework
Ryu Internal
Satoshi Kobayashi
2013/11/11
What is Ryu?
•

SDN Framework

•
•
•

主に OpenFlow Controller
それ以外のプロトコルにも対応

特徴

•
•

Pure Python
OpenFlow 1.3 Support
Motivation
•

自分用の設計資料

•
•

説明すると理解が深まる

コントリビューションの一貫

•

興味を持つ人が増えるといいな
What is OpenFlow?
Control Plane
OpenFlow Controller
OpenFlow
Channel

Packet

OpenFlow
Protocol

OpenFlow Switch
FlowTable...
What is OpenFlow?
•

プレーンの分離

•
•
•

コントロール (制御): OpenFlow Controller
データ (転送): OpenFlow Switch

TCP/IP のレイヤに依存しないフォワーディング...
Overview
WSGIApplication

Ryu
AppManager

Spawn

Context
Context
Context

Instantiate / Inject
SERVICE_BRICK

WSGIServer

...
Overview
•

主要コンポーネントは一枚に収まる

•
•

シンプル

ユーザはアプリケーションを作る

•

それ以外の部分は Ryu が提供する
Event model
SERVICE_BRICK
Handler

OFPHandler

Handler

Handler Handler

Built-in App
Built-in App

!
Msg
!
OpenFlow Event...
Event model
•

イベントドリブン

•

OpenFlow メッセージ毎にイベントが発生する

•
•

データパス -> アプリのイベントハンドラ

イベント

•

OpenFlow メッセージ毎に定義
Protocol Parser
Handler

RyuApp
Python object

of1.0

O/F Event

of1.2
Parser
of1.3

Datapath
socket

Binary

パーサは OpenFlo...
Protocol Parser
•

対応 OpenFlow プロトコルバージョン

• 1.0, 1.2, 1.3
•

パーサはネゴシエーションで決定

•

前述の OFPHandler が担当
Component
Communication
一方向イベント
(返り値なし)

双方向イベント
(返り値あり)

Your App A

User-defined
Event

User-defined
Request
User-defined
R...
Component
Communication
•

アプリケーション間の通信

•

イベントをやり取りする

•
•

一方向 / 双方向

イベント

•

ユーザが必要に応じて定義する
Context
AppManager
Instantiate
Inject

Context
Handler

Use

RyuApp
Context
•

アプリで共通に使われるユーティリティなど

•
•

コンストラクタにインジェクトされる
例

•

DPSet

•
•

接続中の Datapath 一覧

WSGIApplication

• HTTP サーバを作る...
WSGI Support
Instantiate
AppManager

WSGIApplication

Call

Inject

Register
Handler

WSGIServer

Connect

HTTP Client

Ry...
WSGI Support
•

WSGI (Web Service Gateway Interface)

• Python 用 Web インターフェース
• 多くの Web フレームワークが準拠する
• Web API やアプリを作ることがで...
Eventlet
•

Ryu の並行処理に用いられているライブラリ

•
•

OpenStack でも利用されている
類似したものに Gevent など
Eventlet: thread
•

ライブラリ Greenlet を使った協調スレッド

•
•

a.k.a グリーンスレッド
スレッドの割り込みが発生しない

•
•

切り替えのタイミングは I/O 待ちだけ
切り替えをプログラマが把...
Eventlet: thread
Cooperative
Save

Hub
thread 2

threads
thread 1

Restore
Save

thread 3

Run
I/O 待ち

Restore
thread 5

t...
Eventlet: I/O
•
•

ノンブロッキング I/O
モンキーパッチを使う

•
•
•
•

既存のブロックするコードの挙動を変更
アプリケーションからは透過的に利用できる
ブロックするコードの混入に配慮が不要

唯一の注意点は C...
Eventlet: I/O
Monkey

Python 標準パッケージ

patching

(blockable)
os

Eventlet
select
アプリケーションからは
透過的にノンブロックになる

socket
threadin...
Appendix
•

Web サイト

•
•

Wiki

•
•

http://osrg.github.io/ryu/

http://github.com/osrg/ryu/wiki

リポジトリ

•

http://github....
以上
Upcoming SlideShare
Loading in...5
×

SDN Framework Ryu Internal

1,228

Published on

Pure Python で書かれた SDN Framework (OpenFlow コントローラ) Ryu の設計資料。

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,228
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
26
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

SDN Framework Ryu Internal

  1. 1. SDN Framework Ryu Internal Satoshi Kobayashi 2013/11/11
  2. 2. What is Ryu? • SDN Framework • • • 主に OpenFlow Controller それ以外のプロトコルにも対応 特徴 • • Pure Python OpenFlow 1.3 Support
  3. 3. Motivation • 自分用の設計資料 • • 説明すると理解が深まる コントリビューションの一貫 • 興味を持つ人が増えるといいな
  4. 4. What is OpenFlow? Control Plane OpenFlow Controller OpenFlow Channel Packet OpenFlow Protocol OpenFlow Switch FlowTable Data Plane Routing Table Ryu はココ Forwarding Packet
  5. 5. What is OpenFlow? • プレーンの分離 • • • コントロール (制御): OpenFlow Controller データ (転送): OpenFlow Switch TCP/IP のレイヤに依存しないフォワーディング • パケットをマッチしてインストラクションを実行
  6. 6. Overview WSGIApplication Ryu AppManager Spawn Context Context Context Instantiate / Inject SERVICE_BRICK WSGIServer Handler Handler RyuApp RyuApp RyuApp ! Msg ! User Defined Event Communicate ユーザはココを作る Dispatch Spawn OpenFlowController Datapath Datapath Datapath ! Msg ! ! ! OpenFlow ! Event OpenFlow ! Event OpenFlow Event
  7. 7. Overview • 主要コンポーネントは一枚に収まる • • シンプル ユーザはアプリケーションを作る • それ以外の部分は Ryu が提供する
  8. 8. Event model SERVICE_BRICK Handler OFPHandler Handler Handler Handler Built-in App Built-in App ! Msg ! OpenFlow Event OFPHandler は OpenFlow プロトコルに 必ず必要な処理を担当する Datapath Your App Your App アプリケーションは 同じスーパークラス RyuApp を親にもつ Datapath は OpenFlow Switch を表現している
  9. 9. Event model • イベントドリブン • OpenFlow メッセージ毎にイベントが発生する • • データパス -> アプリのイベントハンドラ イベント • OpenFlow メッセージ毎に定義
  10. 10. Protocol Parser Handler RyuApp Python object of1.0 O/F Event of1.2 Parser of1.3 Datapath socket Binary パーサは OpenFlow プロトコルのネゴシエーション によって選択される socket OpenFlow Channel (over TCP, SSL)
  11. 11. Protocol Parser • 対応 OpenFlow プロトコルバージョン • 1.0, 1.2, 1.3 • パーサはネゴシエーションで決定 • 前述の OFPHandler が担当
  12. 12. Component Communication 一方向イベント (返り値なし) 双方向イベント (返り値あり) Your App A User-defined Event User-defined Request User-defined Reply Your App B Your App C
  13. 13. Component Communication • アプリケーション間の通信 • イベントをやり取りする • • 一方向 / 双方向 イベント • ユーザが必要に応じて定義する
  14. 14. Context AppManager Instantiate Inject Context Handler Use RyuApp
  15. 15. Context • アプリで共通に使われるユーティリティなど • • コンストラクタにインジェクトされる 例 • DPSet • • 接続中の Datapath 一覧 WSGIApplication • HTTP サーバを作るためのクラス
  16. 16. WSGI Support Instantiate AppManager WSGIApplication Call Inject Register Handler WSGIServer Connect HTTP Client RyuApp Dispatch Configure ControllerBase
  17. 17. WSGI Support • WSGI (Web Service Gateway Interface) • Python 用 Web インターフェース • 多くの Web フレームワークが準拠する • Web API やアプリを作ることができる
  18. 18. Eventlet • Ryu の並行処理に用いられているライブラリ • • OpenStack でも利用されている 類似したものに Gevent など
  19. 19. Eventlet: thread • ライブラリ Greenlet を使った協調スレッド • • a.k.a グリーンスレッド スレッドの割り込みが発生しない • • 切り替えのタイミングは I/O 待ちだけ 切り替えをプログラマが把握・管理できる • • スレッドセーフに作りやすい ネイティブスレッドはカーネルのスケジュール次第
  20. 20. Eventlet: thread Cooperative Save Hub thread 2 threads thread 1 Restore Save thread 3 Run I/O 待ち Restore thread 5 thread4 Run
  21. 21. Eventlet: I/O • • ノンブロッキング I/O モンキーパッチを使う • • • • 既存のブロックするコードの挙動を変更 アプリケーションからは透過的に利用できる ブロックするコードの混入に配慮が不要 唯一の注意点は C 拡張モジュール • モンキーパッチ不能なため
  22. 22. Eventlet: I/O Monkey Python 標準パッケージ patching (blockable) os Eventlet select アプリケーションからは 透過的にノンブロックになる socket threading Use time Application ※ ネイティブスレッドも 協調スレッドに置き換わる
  23. 23. Appendix • Web サイト • • Wiki • • http://osrg.github.io/ryu/ http://github.com/osrg/ryu/wiki リポジトリ • http://github.com/osrg/ryu
  24. 24. 以上
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×