Openstack 簡介

46
Openstack 簡介 果凍

description

這個投影片有三個主軸: 第一個主軸是簡單的介紹各個元件,與如何快速試用 第二個主軸是介紹 openstack 架構與元件溝通方式 第二個主軸是介紹追蹤 openstack source code 的心得

Transcript of Openstack 簡介

Page 1: Openstack 簡介

Openstack 簡介果凍

Page 2: Openstack 簡介

簡介

● 任職於迎廣科技○ python○ openstack

● http://about.me/ya790206● http://blog.blackwhite.

tw/● https://github.

com/ya790206/call_seq

Page 3: Openstack 簡介

Openstack

● Build your own cloud.● RESTful api

Openstack

iScsi libvirt LVM Open vSwitch

other

Page 4: Openstack 簡介

trystack

● try openstack● use your facebook id to login.● http://trystack.org/

Page 5: Openstack 簡介

devstack

● build your development environment.● mini config:

ADMIN_PASSWORD=secreteDATABASE_PASSWORD=$ADMIN_PASSWORDRABBIT_PASSWORD=$ADMIN_PASSWORDSERVICE_PASSWORD=$ADMIN_PASSWORDSERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50

SCREEN_LOGDIR=$DEST/logs/screen

Page 6: Openstack 簡介

Component

● keystone -- auth and service catalog ● nova -- VM● glance -- image service● cinder -- block storage service● swift -- object storage service● neutron -- network

Page 7: Openstack 簡介

glance service:● privide image● support backend:

○ s3○ swift○ file system

cinder service:● for instance

swift: ● object storage

Page 8: Openstack 簡介

other interesting project

● Trove -- database as a service● Sahara -- provision a Hadoop cluster on top

of OpenStack● taskflow● oslo messaging

Page 9: Openstack 簡介

Common Requirement

SQLAlchemyoslo.configPastePasteDeployiso8601greenleteventlet

RoutesWebObsix

Page 10: Openstack 簡介

Threading Model

● green thread model(implemented through using the Python eventlet and greenlet libraries.

Python VM

Openstack thread model

VM

M thread

M kernel thread

M thread M thread

1 kernel thread N kernel

threadkernel layer

application layer

Page 11: Openstack 簡介

XXX-api

YYY-api

ZZZ-api

python- XXXlib

python- YYYlib

python- ZZZlib

horizondashboard

REST api

REST api

REST api

REST apifunction call

function call

function call

REST api

XXX-aaa

XXX-bbb

amqp

rest a

pi

amqp

XXX-ccc

other

Page 12: Openstack 簡介

api.py: wsgi server(API or Controller)rpcapi.py < = > manager.py

api.pyrequest for RESTful api

python call

rpcapi.py

oslo.messagi

ng

manager.py

Page 13: Openstack 簡介
Page 14: Openstack 簡介

nova architecture

Page 15: Openstack 簡介

有什麼問題,中間加一層就對了

● Mediates interactions between nova-compute and the database.

● Security○ nova-compute never access database directly.

● Ease of Upgrade● Performance

○ Queries to the MySQL database will block the main thread of a service.

○ scales horizontally

nova-conductor

Page 16: Openstack 簡介
Page 17: Openstack 簡介

Component Communications

● REST api:○ nova-api -> keystone-api○ glance-api -> glance-registry

● oslo.messaging(AMQP)○ nova-api -> nova-compute○ nova-api -> cinder-volume

Page 18: Openstack 簡介

REST api

glance/api/v1/images.pyglance/registry/client/v1/client.py

glance/registry/api/v1/images.py

rest api

Page 19: Openstack 簡介

oslo.messaging

● support multi-endpoints.● RPC Client <-> Server:

○ call○ cast

● Notifier <-> Notification Listener○ ceilometer

example code:https://github.com/kgiusti/oslo-messaging-clients

Page 20: Openstack 簡介

openstack.taskflow

● workflow library.● make task execution easy, consistent, and

reliable.● flows can be stopped, resumed, and safely

reverted.

Page 21: Openstack 簡介

openstack.taskflow

● Tasks:○ retry○ revert

● Flows○ revert○ pattern:

■ Linear■ Unordered■ Directed acyclic graph

● Engines:○ serial○ parallel○ worker-based

Page 22: Openstack 簡介

openstack.taskflow -- use case

task1: create server || rollback by delete servertask2: create+attach volume || rollback by delete volume

Page 23: Openstack 簡介

class CallJim(task.Task):

def execute(self, jim_number, *args, **kwargs):

print("Calling jim %s." % jim_number)

class CallJoe(task.Task):

def execute(self, joe_number, *args, **kwargs):

print("Calling joe %s." % joe_number)

flow = lf.Flow('simple-linear').add(

CallJim(),

CallJoe()

)

taskflow.engines.run(flow, store=dict(joe_number=444,

jim_number=555))

Page 25: Openstack 簡介

Trace Code Tip

● Document● Database schema● Basic data struct● Entry point● Test code● Debug message.

Page 27: Openstack 簡介

pyreverse

● UML tool for Python● pyreverse -ASmy -k -o png main.py -p Main

Page 28: Openstack 簡介

Entry point

1. 由下而上(由樹見林)a. traceback.extract_stack.b. use debugger to show traceback.

2. 由上而下(由林見樹)a. call_seq.

Page 29: Openstack 簡介

call_seq

● written by me.● pip install git+https://github.

com/ya790206/call_seq● trace you program how to run and generate

a report with json format.

Page 30: Openstack 簡介

from call_seq import CallSeq

trail = CallSeq() trail.set_trace() # the code you want to trace. trail.unset_trace() trail.dump_to_file('output.json')

Page 31: Openstack 簡介

"arguments": {}, "code": "test1()", "file_name": "demo.py", "lineno": 14, "name": "test1", "return": "<int>: 2", "return_lineno": 10, "seq": [ { "arguments": {}, "code": "test2()", "file_name": "demo.py", "lineno": 9, "return": "<NoneType>", "return_lineno": 5, "seq": [] } ]

Page 32: Openstack 簡介
Page 34: Openstack 簡介

總結

● openstack: build you own cloud.● communication:

○ REST api○ oslo.messaging

● Trace Code Tip

Page 35: Openstack 簡介

徵才

● 迎廣科技研發中心● 尋找 openstack, python 的愛好者● 聯絡方式: http://www.blackwhite.

tw/#/contact

Page 36: Openstack 簡介

Thank you

Page 37: Openstack 簡介

雜記

● 此張投影片後的投影片內容為演講後所新增內容,對前面的投影片內容做補充

Page 38: Openstack 簡介

為何要介紹openstack元件?

● 站在巨人的肩上, 才能看的更遠○ 利用現有軟體, 減少沒必要的程式開發○ 利用已經有軟體, 創造更多價值

Page 39: Openstack 簡介

為何要介紹 Common Requirement?

● 了解大型專案所採用的 library● 如果我們要做 api server,但是不想浪費效能在無意

義的運算上。○ 採用 django, bottle 對 api server 而言,太多餘○ 直接寫 wsgi server 太痛苦○ 可以模仿 openstack 用 paste, route, 和 webob 來

建立 api server。

Page 40: Openstack 簡介

● 為 nova conductor 鋪路

為何介紹 Threading Model ?

Page 42: Openstack 簡介

● 另一個 rpc library 的選擇● 相似專案: zerorpc

為何介紹 oslo.messaging?

Page 43: Openstack 簡介

● 類似 pipeline,或 sql transaction。● 當工作失敗後,可以 rollback 動作。或是隔幾

秒重試,或是換不同的參數看看。● 每個工作下可以擁有子任務,子任務可以循序

執行,平行執行等。

為何介紹 openstack.taskflow ?

Page 44: Openstack 簡介

● 當你使用由下往上看(show traceback)的方法時,這是一個很好的切入點。

為何要在 trace code tip 中提到 basic data struct?

Page 45: Openstack 簡介

● 因為茫茫程式碼海裡,不知道要從何下手

為何要由下往上看?

Page 46: Openstack 簡介

● 要觀其大略,識大局● 為何我要寫 call_seq:

○ 因為我懶得一個一個開檔案看程式碼

○ 既然程式都知道怎麼執行了,讓他告訴我也不是一件

過份的事

為何要由上往下看?