SlideShare a Scribd company logo
OpenStack Swift Debugging
OpenStack Korea Community Study Organizer
장태희
List
▪ What is Swift?
▪ Swift APIs
▪ How to debug?
2017년 Openstack Swift 분석 스터디
▪ Study Lead : 조성수
▪ Study Period : 2017.04.11 ~ 2017.07
▪ 장소 제공 : Naver D2
▪ 산출물 공유 : Github(https://git.io/vdvHv)
What is Swift?
▪ OpenStack Object Store project(Object Storage)
▪ Store data as objects.
▪ Offers cloud storage software, store and retrieve lots of data
with a simple API.
▪ swift-proxy, account, container, object로 구성됩니다.
▪ Swift-proxy는 account, container, object를 관리, Object API를 제공
▪ Account, Container는 DB로 데이터가 관리되며, Object는 저장공간에
직접 저장되는 방식으로 설계 되어 있습니다.
▪ User는 API를 통하여 데이터를 저장하거나 다운로드
For more information, please visit https://docs.openstack.org/swift/latest
Source) http://naleejang.tistory.com/104
Swift URl
▪ http://host/v1/account/container/object
▪ v1 : api version
▪ account : account name in swift
▪ container : container name
▪ object : object name
For more information, please visit https://docs.openstack.org/swift/latest
Swift APIs
▪ account – accounts in swift.
▪ container – same concept of Amazon S3 bucket. objects are stored in
container.
▪ object - data such as documents, files, and movies. Available to save w
ith metadata
Swift APIs
▪ account – accounts in swift.
Swift APIs
▪ container – same concept of Amazon S3 bucket. objects are stored in
container.
Swift APIs
Swift Components
▪ proxy-server
▪ Provide Swift API and relay requests to backend servers(accout,
container, object)
▪ account-server
▪ Save swift account information. Shows information amounts of
container per accounts, storage usage.
▪ container-server
▪ Save container information of accounts
Swift Components
▪ object-server
▪ Store real objects. Each objects has basically 3 replications.
▪ Daemon
▪ Numeral daemons must be executed due to the fact that swift is
eventual consistency system so that it should sustain consistency.
How to debug OpenStack Swift
▪ Create a loopback device for storage
▪ ignore erasurecode library
Make VM for OpenStack Test Bench
Pycharm Development Environment
▪ Same swift code on Native OS and Virtual Machine.
▪ Required : Pycharm Professional Edition.
Summary) koain 김영우 - https://git.io/v5jpA
Summary) koain 김영우 - https://git.io/v5jpA
Summary) koain 김영우 - https://git.io/v5jpA
Summary) koain 김영우 - https://git.io/v5jpA
Summary) koain 김영우 - https://git.io/v5jpA
Summary) koain 김영우 - https://git.io/v5jpA
Summary) koain 김영우 - https://git.io/v5jpA
Summary) koain 김영우 - https://git.io/v5jpA
▪ tempauth.py
▪ swob.py
▪ crossdomain.py
▪ base.py
▪ ratelimit.py
▪ wsgi.py
▪ healthcheck.py
▪ eventlet/wsgi.py
▪ BaseHTTPSServer.py
▪ SocketServer.py
▪ greenpool.py
/swift/common/middleware/tempauth.py
▪ token 인증을 처리하는 부분
▪ URL은 어떻게 제공되는가?
▪ 원하는 대상 정하기
▪ request에 보낸 내용을 가지고 보기
▪ request를 보내는 것이 없으면 log를 가지고 (log가 찍혔다면
code가 지나간 자리이므로) 해당 부분을 검색하여 string을 검
색
/swift/common/middleware/tempauth.py
▪ account_user = account + ':' + user -> 유저 인증 시작 부분(user와
group이 정상적인지 이전에 확인)
▪ if self.users[account_user]['key'] != key -> 키 검사
▪ account_id = self.users[account_user]['url'].rsplit('/', 1)[-1] -> 계정
id 가져오기
▪ if not token: -> token이 생성되는 과정을 볼 수 있다
▪ resp = Response(request=req, headers={ -> token이 모두 발급 된
것을 확인
▪ X-Auth Token을 언제 가져오는가?
▪ token = env.get('HTTP_X_AUTH_TOKEN',
env.get('HTTP_X_STORAGE_TOKEN'))
/swift/common/middleware/tempauth.py
▪ 유효성 검사
▪ breaking point : groups = self.get_groups(env, token)
▪ memcache_token_key = '%s/token/%s' % (self.reseller_prefix,
token)
▪ memcache_token_key = '%s/token/%s' % (self.reseller_prefix,
token)
▪ token의 문자열을 검사 하는 것이 아니라, memcache에서 무엇
인가를 가져와서 비교하는구나 라고 알게 됨.
/swift/commom/middleware/proxy-logging.py
▪ Logging middleware for the Swift proxy.
▪ `client_ip remote_addr datetime request_method request_path
protocol status_int user_agent auth_token bytes_recvd
bytes_sent client_etag transaction_id headers request_time
source log_info request_start_time request_end_time`
▪ url 인코딩되고, 스페이스로만 구분되므로 `split()`으로 간단히
구분이가능
/swift/commom/middleware/proxy-logging.py
▪ `remote_addr` : `REMOTE_ADDR` 환경변수 값
▪ `client_ip` : `X-Forwarded-For` 해더, `x-Cluster_Ip` 해더,
`REMOTE_ADDR` 환경 변수 값들을 나타낸다.
▪ `source` : WSGI 환경에서의 `swift.source` 를 나타낸다. 요청을 생성
한 코드를 나타냄
▪ `log_info`WSGI 환경에서의 `swfit.log_info` 값을 나타낸다.
▪ `x-delete-at` 값이나 일반 로그 정보에서 감지할 수 없는 <b>뒤에서
동작하는</b> 코드들에 대한 추가 정보를 내보냄.
▪ 로그 추가시`env.setdefault('swift.log_info', []).append(your_info)` 를
이용하여 다른 사람들과의 로그와 충돌이 없도록 해야 함.
▪ 헤더 값이 없거나, 누락된 값, 0은 일반적으로 `-` 로 표기.
/swift/commom/middleware/proxy-logging.py
▪ config 값
▪ `self.log_hdrs`
▪ `access_log_haders` 가 있으면 해당 값을 읽어오고 없으면
`log_headers`를 읽어오는데 그것도 없으면 `no`로 설정
▪ `log_hdrs_only` : `access_log_headers_only` 값이 존재하면
`log_hdrs_only` 값에다가 리스트로 가지고 있음.
▪ `self.valid_methods` : `access_log_statsd_valid_http_methods` 값을
가져오며, 없으면 `log_statsd_valid_http_methods` >
`GET,HEAD,POST,PUT,DELETE,COPY,OPTIONS` 순으로 값을 가져오게
된다.
▪ 해당내역도 각 항목별로 string list로 구성된다.
DLO / SLO
▪ /swift/commom/middleware/dlo.py
▪ D(Dynamic)LO : 파일을 무한정 올릴 수 있다. multipart 종료 시점을 알
수 없음.
▪ req = Request() 객체를 어떻게 잘 활용하는지, Debugging point, 분기
를 눈에 익히는것이 목적
▪ /swift/commom/middleware/slo.py
▪ S(Static)LO : multipart 업로드 종료 이후 더이상 part 업로드 불가.
Custom Middleware Development
▪ `def filter_factory`
▪ closer 기법을 통한 작성
class MyMiddleware:
def filter_factory(global_conf, **local_conf):
conf.update
def my_filter(app):
return MyMiddleware(app, conf)
return my_filter
For more information, https://docs.openstack.org/swift/pike/development_middleware.html
Custom Middleware Development
▪ pipeline에서 동작시 wsgi.py module이 어느 클래스를 로드 할지
결정.(paste.filter_factory 부분)
▪ wsgi가 각 middleware의 클래스들을 초기화 시켜준다.
▪ 각 middleware별 특정 변수들은 local_conf에 저장
▪ app parameter는 다음에 호출 할 middleware를 가리킴.
▪ 문서에 나온것과 달리 middleware는 따로 repository를 만들어서
관리. 이후 설치할 수 있는 설치형으로 만듬.
▪ setup.py에 pbr 설정을 한 뒤 setup.cfg에 swift를 설치하듯이 설치.
proxy/server.py __call__
▪ wsgi가 부르는 함수, 한번 인증된 키에 대해서는 memcached
가 가지고 있어 Keystone으로 갈 필요가 없음
▪ proxy server -> proxy/containers/server.py 가 핵심
Cluster
▪ cluster에서 region을 생성한다.(여러개가 될 수 있음)
▪ 여러개의 region
▪ region 간은 독립된 환경이어야 함. (전기, 네트워크 등)
▪ region 안에 여러개의 zone
▪ 여러개의 rack을 묶어 region을 만들 수도 있고, 하나의 데이터
센터를 region으로 할 수도 있다.
▪ 각 region은 독립된 전원과 네트워크 등을 사용해야 한다.
Cluster
▪ zone은 하나의 rack이라고 보면 된다.
▪ zone은 하나의 랙이라고 봐도 무방
▪ 한 열이 zone이 될수도, 랙 여러개가 zone이 될수도 있음
▪ zone안에 여러개의 node
▪ node는 서버라고 봐도 무방
▪ node안에 여러개의 하드디스크
▪ node는 각 서버 장비라고 보면 된다.
▪ hash 알고리즘은 md5를 기본으로 사용.
분산 시스템 - consistence hash ring
Source) http://www.paperplanes.de/2011/12/9/the-magic-of-consistent-hashing.html
Account / Container
▪ account와 container는 database에 접근하는 코드 구조가 비슷
▪ account/server.py
▪ PUT -> proxy 서버에서 request를 받을 때에는
http://prox_svr/v1/account/container/obj
▪ PUT에서 database로 request를 보낼 때에는
http://account_server/v1/sdb1/70/account/obj 로 바뀌어 보내
게 된다.
▪ account 생성 == db file 생성
Account / Container
▪ db.py -> initialize == sqlite에 table을 만드는 것 까지만 진행
▪ PUT 요청 -> db 파일을 하나 생성하고 원하는 이름은 rename
으로 db 파일을 생성한다. PUT 명령이 오면 실제 sqlite에 바로
쓰는것이 아니라 pending 파일에 기록하고, pending 파일이 일
정 capacity를 넘어서면 .lock 파일로 모든 요청을 잠시 막고 db
에 기록한다.
Account / Container
▪ GET 요청 -> 모든 요청을 잠시 막고 pending에 있는 것을 db에
merge시킨 뒤 db를 읽어온다.
▪ DELETE -> table field에 DELETED라고 flag 표시만 하고 실제
지우지는 않는다. 나중에 auditor daemon이 돌면서 실제 파일
을 지운다.

More Related Content

What's hot

NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
John Kim
 
형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영
창훈 정
 
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
Hyperledger Korea User Group
 
[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket io[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket ioNAVER D2
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기
John Kim
 
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
OpenStack Korea Community
 
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
Hyperledger Korea User Group
 
(OCI 탐험일지) nginx 설치(오라클 리눅스 7)
(OCI 탐험일지) nginx 설치(오라클 리눅스 7)(OCI 탐험일지) nginx 설치(오라클 리눅스 7)
(OCI 탐험일지) nginx 설치(오라클 리눅스 7)
Jay Park
 
Vert.x
Vert.x Vert.x
Vert.x
ymtech
 
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
[오픈소스컨설팅] SELinux : Stop Disabling SELinux[오픈소스컨설팅] SELinux : Stop Disabling SELinux
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
Open Source Consulting
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정
Jin wook
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migration
ymtech
 
Play node conference
Play node conferencePlay node conference
Play node conference
John Kim
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
KTH, 케이티하이텔
 
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
OpenStack Korea Community
 
Openstack에 컨트리뷰션 해보기
Openstack에 컨트리뷰션 해보기Openstack에 컨트리뷰션 해보기
Openstack에 컨트리뷰션 해보기
영우 김
 
Windows kernel basic exploit
Windows kernel basic exploitWindows kernel basic exploit
Windows kernel basic exploit
Kyoungseok Yang
 
.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기
Seong Won Mun
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
중선 곽
 

What's hot (20)

NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
 
형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영
 
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
 
[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket io[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket io
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기
 
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
 
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
 
(OCI 탐험일지) nginx 설치(오라클 리눅스 7)
(OCI 탐험일지) nginx 설치(오라클 리눅스 7)(OCI 탐험일지) nginx 설치(오라클 리눅스 7)
(OCI 탐험일지) nginx 설치(오라클 리눅스 7)
 
Vert.x
Vert.x Vert.x
Vert.x
 
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
[오픈소스컨설팅] SELinux : Stop Disabling SELinux[오픈소스컨설팅] SELinux : Stop Disabling SELinux
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
 
Vert.x
Vert.xVert.x
Vert.x
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migration
 
Play node conference
Play node conferencePlay node conference
Play node conference
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
 
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
 
Openstack에 컨트리뷰션 해보기
Openstack에 컨트리뷰션 해보기Openstack에 컨트리뷰션 해보기
Openstack에 컨트리뷰션 해보기
 
Windows kernel basic exploit
Windows kernel basic exploitWindows kernel basic exploit
Windows kernel basic exploit
 
.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
 

Similar to OpenStack Swift Debugging

성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3
Amazon Web Services Korea
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
Ji-Woong Choi
 
Hadoop security DeView 2014
Hadoop security DeView 2014Hadoop security DeView 2014
Hadoop security DeView 2014
Gruter
 
kubernetes from beginner to advanced
kubernetes  from beginner to advancedkubernetes  from beginner to advanced
kubernetes from beginner to advanced
Oracle Korea
 
kubernetes : From beginner to Advanced
kubernetes : From beginner to Advancedkubernetes : From beginner to Advanced
kubernetes : From beginner to Advanced
Inho Kang
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
wonyong hwang
 
모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호
용호 최
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Esun Kim
 
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
용호 최
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
SeungHyun Lee
 
2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기
Jay Park
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
I Goo Lee
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
nexusz99
 
Provisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterProvisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes Cluster
Jinwoong Kim
 
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
OpenStack Korea Community
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
Lee Ji Eun
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
Terry Cho
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02
정출 김
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
Tommy Lee
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
Jin wook
 

Similar to OpenStack Swift Debugging (20)

성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
Hadoop security DeView 2014
Hadoop security DeView 2014Hadoop security DeView 2014
Hadoop security DeView 2014
 
kubernetes from beginner to advanced
kubernetes  from beginner to advancedkubernetes  from beginner to advanced
kubernetes from beginner to advanced
 
kubernetes : From beginner to Advanced
kubernetes : From beginner to Advancedkubernetes : From beginner to Advanced
kubernetes : From beginner to Advanced
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호모바일 게임 하이브 런칭기 - 최용호
모바일 게임 하이브 런칭기 - 최용호
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
 
Provisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterProvisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes Cluster
 
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 

More from OpenStack Korea Community

2019년 커뮤니티 활동 보고: 오픈스택 한국 커뮤니티
2019년 커뮤니티 활동 보고: 오픈스택 한국 커뮤니티2019년 커뮤니티 활동 보고: 오픈스택 한국 커뮤니티
2019년 커뮤니티 활동 보고: 오픈스택 한국 커뮤니티
OpenStack Korea Community
 
[2018.10.19] Andrew Kong - Tunnel without tunnel (Seminar at OpenStack Korea ...
[2018.10.19] Andrew Kong - Tunnel without tunnel (Seminar at OpenStack Korea ...[2018.10.19] Andrew Kong - Tunnel without tunnel (Seminar at OpenStack Korea ...
[2018.10.19] Andrew Kong - Tunnel without tunnel (Seminar at OpenStack Korea ...
OpenStack Korea Community
 
[2018.10.19] 김용기 부장 - IAC on OpenStack (feat. ansible)
[2018.10.19] 김용기 부장 - IAC on OpenStack (feat. ansible)[2018.10.19] 김용기 부장 - IAC on OpenStack (feat. ansible)
[2018.10.19] 김용기 부장 - IAC on OpenStack (feat. ansible)
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 2 - E6: "SONA: ONOS SDN Controller 기반 OpenSta...
[OpenInfra Days Korea 2018] Day 2 - E6: "SONA: ONOS SDN Controller 기반 OpenSta...[OpenInfra Days Korea 2018] Day 2 - E6: "SONA: ONOS SDN Controller 기반 OpenSta...
[OpenInfra Days Korea 2018] Day 2 - E6: "SONA: ONOS SDN Controller 기반 OpenSta...
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 2 - E3-2: "핸즈온 워크샵: Kubespray, Helm, Armada를 ...
[OpenInfra Days Korea 2018] Day 2 - E3-2: "핸즈온 워크샵: Kubespray, Helm, Armada를 ...[OpenInfra Days Korea 2018] Day 2 - E3-2: "핸즈온 워크샵: Kubespray, Helm, Armada를 ...
[OpenInfra Days Korea 2018] Day 2 - E3-2: "핸즈온 워크샵: Kubespray, Helm, Armada를 ...
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 2 - E5-1: "Invited Talk: Kubicorn - Building ...
[OpenInfra Days Korea 2018] Day 2 - E5-1: "Invited Talk: Kubicorn - Building ...[OpenInfra Days Korea 2018] Day 2 - E5-1: "Invited Talk: Kubicorn - Building ...
[OpenInfra Days Korea 2018] Day 2 - E5-1: "Invited Talk: Kubicorn - Building ...
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 2 - E6 - 마이크로서비스를 위한 Istio & Kubernetes [다운로드...
[OpenInfra Days Korea 2018] Day 2 - E6 - 마이크로서비스를 위한 Istio & Kubernetes [다운로드...[OpenInfra Days Korea 2018] Day 2 - E6 - 마이크로서비스를 위한 Istio & Kubernetes [다운로드...
[OpenInfra Days Korea 2018] Day 2 - E6 - 마이크로서비스를 위한 Istio & Kubernetes [다운로드...
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 2 - E6 - OpenInfra monitoring with Prometheus
[OpenInfra Days Korea 2018] Day 2 - E6 - OpenInfra monitoring with Prometheus[OpenInfra Days Korea 2018] Day 2 - E6 - OpenInfra monitoring with Prometheus
[OpenInfra Days Korea 2018] Day 2 - E6 - OpenInfra monitoring with Prometheus
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] Day 2 - E4 - 핸즈온 워크샵: 서버리스가 컨테이너를 만났을 때
[OpenInfra Days Korea 2018] Day 2 - E4 - 핸즈온 워크샵: 서버리스가 컨테이너를 만났을 때 [OpenInfra Days Korea 2018] Day 2 - E4 - 핸즈온 워크샵: 서버리스가 컨테이너를 만났을 때
[OpenInfra Days Korea 2018] Day 2 - E4 - 핸즈온 워크샵: 서버리스가 컨테이너를 만났을 때
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] (삼성전자) Evolution to Cloud Native
[OpenInfra Days Korea 2018] (삼성전자) Evolution to Cloud Native[OpenInfra Days Korea 2018] (삼성전자) Evolution to Cloud Native
[OpenInfra Days Korea 2018] (삼성전자) Evolution to Cloud Native
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] (NetApp) Open Source with NetApp - 전국섭 상무
[OpenInfra Days Korea 2018] (NetApp) Open Source with NetApp - 전국섭 상무[OpenInfra Days Korea 2018] (NetApp) Open Source with NetApp - 전국섭 상무
[OpenInfra Days Korea 2018] (NetApp) Open Source with NetApp - 전국섭 상무
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] (Track 4) - 오픈스택기반 NFV 관리 및 HA (high Availability...
[OpenInfra Days Korea 2018] (Track 4) - 오픈스택기반 NFV 관리 및 HA (high Availability...[OpenInfra Days Korea 2018] (Track 4) - 오픈스택기반 NFV 관리 및 HA (high Availability...
[OpenInfra Days Korea 2018] (Track 4) - 오픈스택기반 NFV 관리 및 HA (high Availability...
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] (Track 4) - Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
[OpenInfra Days Korea 2018] (Track 4) - Backend.AI: 오픈소스 머신러닝 인프라 프레임워크[OpenInfra Days Korea 2018] (Track 4) - Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
[OpenInfra Days Korea 2018] (Track 4) - Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
OpenStack Korea Community
 
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
OpenStack Korea Community
 

More from OpenStack Korea Community (20)

2019년 커뮤니티 활동 보고: 오픈스택 한국 커뮤니티
2019년 커뮤니티 활동 보고: 오픈스택 한국 커뮤니티2019년 커뮤니티 활동 보고: 오픈스택 한국 커뮤니티
2019년 커뮤니티 활동 보고: 오픈스택 한국 커뮤니티
 
[2018.10.19] Andrew Kong - Tunnel without tunnel (Seminar at OpenStack Korea ...
[2018.10.19] Andrew Kong - Tunnel without tunnel (Seminar at OpenStack Korea ...[2018.10.19] Andrew Kong - Tunnel without tunnel (Seminar at OpenStack Korea ...
[2018.10.19] Andrew Kong - Tunnel without tunnel (Seminar at OpenStack Korea ...
 
[2018.10.19] 김용기 부장 - IAC on OpenStack (feat. ansible)
[2018.10.19] 김용기 부장 - IAC on OpenStack (feat. ansible)[2018.10.19] 김용기 부장 - IAC on OpenStack (feat. ansible)
[2018.10.19] 김용기 부장 - IAC on OpenStack (feat. ansible)
 
[OpenInfra Days Korea 2018] Day 2 - E6: "SONA: ONOS SDN Controller 기반 OpenSta...
[OpenInfra Days Korea 2018] Day 2 - E6: "SONA: ONOS SDN Controller 기반 OpenSta...[OpenInfra Days Korea 2018] Day 2 - E6: "SONA: ONOS SDN Controller 기반 OpenSta...
[OpenInfra Days Korea 2018] Day 2 - E6: "SONA: ONOS SDN Controller 기반 OpenSta...
 
[OpenInfra Days Korea 2018] Day 2 - E3-2: "핸즈온 워크샵: Kubespray, Helm, Armada를 ...
[OpenInfra Days Korea 2018] Day 2 - E3-2: "핸즈온 워크샵: Kubespray, Helm, Armada를 ...[OpenInfra Days Korea 2018] Day 2 - E3-2: "핸즈온 워크샵: Kubespray, Helm, Armada를 ...
[OpenInfra Days Korea 2018] Day 2 - E3-2: "핸즈온 워크샵: Kubespray, Helm, Armada를 ...
 
[OpenInfra Days Korea 2018] Day 2 - E5-1: "Invited Talk: Kubicorn - Building ...
[OpenInfra Days Korea 2018] Day 2 - E5-1: "Invited Talk: Kubicorn - Building ...[OpenInfra Days Korea 2018] Day 2 - E5-1: "Invited Talk: Kubicorn - Building ...
[OpenInfra Days Korea 2018] Day 2 - E5-1: "Invited Talk: Kubicorn - Building ...
 
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
 
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
 
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
 
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
[OpenInfra Days Korea 2018] Day 2 - E4 - 딥다이브: immutable Kubernetes architecture
 
[OpenInfra Days Korea 2018] Day 2 - E6 - 마이크로서비스를 위한 Istio & Kubernetes [다운로드...
[OpenInfra Days Korea 2018] Day 2 - E6 - 마이크로서비스를 위한 Istio & Kubernetes [다운로드...[OpenInfra Days Korea 2018] Day 2 - E6 - 마이크로서비스를 위한 Istio & Kubernetes [다운로드...
[OpenInfra Days Korea 2018] Day 2 - E6 - 마이크로서비스를 위한 Istio & Kubernetes [다운로드...
 
[OpenInfra Days Korea 2018] Day 2 - E6 - OpenInfra monitoring with Prometheus
[OpenInfra Days Korea 2018] Day 2 - E6 - OpenInfra monitoring with Prometheus[OpenInfra Days Korea 2018] Day 2 - E6 - OpenInfra monitoring with Prometheus
[OpenInfra Days Korea 2018] Day 2 - E6 - OpenInfra monitoring with Prometheus
 
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
 
[OpenInfra Days Korea 2018] Day 2 - E4 - 핸즈온 워크샵: 서버리스가 컨테이너를 만났을 때
[OpenInfra Days Korea 2018] Day 2 - E4 - 핸즈온 워크샵: 서버리스가 컨테이너를 만났을 때 [OpenInfra Days Korea 2018] Day 2 - E4 - 핸즈온 워크샵: 서버리스가 컨테이너를 만났을 때
[OpenInfra Days Korea 2018] Day 2 - E4 - 핸즈온 워크샵: 서버리스가 컨테이너를 만났을 때
 
[OpenInfra Days Korea 2018] (삼성전자) Evolution to Cloud Native
[OpenInfra Days Korea 2018] (삼성전자) Evolution to Cloud Native[OpenInfra Days Korea 2018] (삼성전자) Evolution to Cloud Native
[OpenInfra Days Korea 2018] (삼성전자) Evolution to Cloud Native
 
[OpenInfra Days Korea 2018] (NetApp) Open Source with NetApp - 전국섭 상무
[OpenInfra Days Korea 2018] (NetApp) Open Source with NetApp - 전국섭 상무[OpenInfra Days Korea 2018] (NetApp) Open Source with NetApp - 전국섭 상무
[OpenInfra Days Korea 2018] (NetApp) Open Source with NetApp - 전국섭 상무
 
[OpenInfra Days Korea 2018] (Track 4) - 오픈스택기반 NFV 관리 및 HA (high Availability...
[OpenInfra Days Korea 2018] (Track 4) - 오픈스택기반 NFV 관리 및 HA (high Availability...[OpenInfra Days Korea 2018] (Track 4) - 오픈스택기반 NFV 관리 및 HA (high Availability...
[OpenInfra Days Korea 2018] (Track 4) - 오픈스택기반 NFV 관리 및 HA (high Availability...
 
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
 
[OpenInfra Days Korea 2018] (Track 4) - Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
[OpenInfra Days Korea 2018] (Track 4) - Backend.AI: 오픈소스 머신러닝 인프라 프레임워크[OpenInfra Days Korea 2018] (Track 4) - Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
[OpenInfra Days Korea 2018] (Track 4) - Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
 
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
 

OpenStack Swift Debugging

  • 1. OpenStack Swift Debugging OpenStack Korea Community Study Organizer 장태희
  • 2. List ▪ What is Swift? ▪ Swift APIs ▪ How to debug?
  • 3. 2017년 Openstack Swift 분석 스터디 ▪ Study Lead : 조성수 ▪ Study Period : 2017.04.11 ~ 2017.07 ▪ 장소 제공 : Naver D2 ▪ 산출물 공유 : Github(https://git.io/vdvHv)
  • 4.
  • 5. What is Swift? ▪ OpenStack Object Store project(Object Storage) ▪ Store data as objects. ▪ Offers cloud storage software, store and retrieve lots of data with a simple API. ▪ swift-proxy, account, container, object로 구성됩니다. ▪ Swift-proxy는 account, container, object를 관리, Object API를 제공 ▪ Account, Container는 DB로 데이터가 관리되며, Object는 저장공간에 직접 저장되는 방식으로 설계 되어 있습니다. ▪ User는 API를 통하여 데이터를 저장하거나 다운로드 For more information, please visit https://docs.openstack.org/swift/latest Source) http://naleejang.tistory.com/104
  • 6. Swift URl ▪ http://host/v1/account/container/object ▪ v1 : api version ▪ account : account name in swift ▪ container : container name ▪ object : object name For more information, please visit https://docs.openstack.org/swift/latest
  • 7. Swift APIs ▪ account – accounts in swift. ▪ container – same concept of Amazon S3 bucket. objects are stored in container. ▪ object - data such as documents, files, and movies. Available to save w ith metadata
  • 8. Swift APIs ▪ account – accounts in swift.
  • 9. Swift APIs ▪ container – same concept of Amazon S3 bucket. objects are stored in container.
  • 11. Swift Components ▪ proxy-server ▪ Provide Swift API and relay requests to backend servers(accout, container, object) ▪ account-server ▪ Save swift account information. Shows information amounts of container per accounts, storage usage. ▪ container-server ▪ Save container information of accounts
  • 12. Swift Components ▪ object-server ▪ Store real objects. Each objects has basically 3 replications. ▪ Daemon ▪ Numeral daemons must be executed due to the fact that swift is eventual consistency system so that it should sustain consistency.
  • 13.
  • 14. How to debug OpenStack Swift
  • 15. ▪ Create a loopback device for storage ▪ ignore erasurecode library
  • 16. Make VM for OpenStack Test Bench
  • 17. Pycharm Development Environment ▪ Same swift code on Native OS and Virtual Machine. ▪ Required : Pycharm Professional Edition.
  • 18. Summary) koain 김영우 - https://git.io/v5jpA
  • 19. Summary) koain 김영우 - https://git.io/v5jpA
  • 20. Summary) koain 김영우 - https://git.io/v5jpA
  • 21. Summary) koain 김영우 - https://git.io/v5jpA
  • 22. Summary) koain 김영우 - https://git.io/v5jpA
  • 23. Summary) koain 김영우 - https://git.io/v5jpA
  • 24. Summary) koain 김영우 - https://git.io/v5jpA
  • 25. Summary) koain 김영우 - https://git.io/v5jpA
  • 26. ▪ tempauth.py ▪ swob.py ▪ crossdomain.py ▪ base.py ▪ ratelimit.py ▪ wsgi.py ▪ healthcheck.py ▪ eventlet/wsgi.py ▪ BaseHTTPSServer.py ▪ SocketServer.py ▪ greenpool.py
  • 27.
  • 28. /swift/common/middleware/tempauth.py ▪ token 인증을 처리하는 부분 ▪ URL은 어떻게 제공되는가? ▪ 원하는 대상 정하기 ▪ request에 보낸 내용을 가지고 보기 ▪ request를 보내는 것이 없으면 log를 가지고 (log가 찍혔다면 code가 지나간 자리이므로) 해당 부분을 검색하여 string을 검 색
  • 29. /swift/common/middleware/tempauth.py ▪ account_user = account + ':' + user -> 유저 인증 시작 부분(user와 group이 정상적인지 이전에 확인) ▪ if self.users[account_user]['key'] != key -> 키 검사 ▪ account_id = self.users[account_user]['url'].rsplit('/', 1)[-1] -> 계정 id 가져오기 ▪ if not token: -> token이 생성되는 과정을 볼 수 있다 ▪ resp = Response(request=req, headers={ -> token이 모두 발급 된 것을 확인 ▪ X-Auth Token을 언제 가져오는가? ▪ token = env.get('HTTP_X_AUTH_TOKEN', env.get('HTTP_X_STORAGE_TOKEN'))
  • 30. /swift/common/middleware/tempauth.py ▪ 유효성 검사 ▪ breaking point : groups = self.get_groups(env, token) ▪ memcache_token_key = '%s/token/%s' % (self.reseller_prefix, token) ▪ memcache_token_key = '%s/token/%s' % (self.reseller_prefix, token) ▪ token의 문자열을 검사 하는 것이 아니라, memcache에서 무엇 인가를 가져와서 비교하는구나 라고 알게 됨.
  • 31. /swift/commom/middleware/proxy-logging.py ▪ Logging middleware for the Swift proxy. ▪ `client_ip remote_addr datetime request_method request_path protocol status_int user_agent auth_token bytes_recvd bytes_sent client_etag transaction_id headers request_time source log_info request_start_time request_end_time` ▪ url 인코딩되고, 스페이스로만 구분되므로 `split()`으로 간단히 구분이가능
  • 32. /swift/commom/middleware/proxy-logging.py ▪ `remote_addr` : `REMOTE_ADDR` 환경변수 값 ▪ `client_ip` : `X-Forwarded-For` 해더, `x-Cluster_Ip` 해더, `REMOTE_ADDR` 환경 변수 값들을 나타낸다. ▪ `source` : WSGI 환경에서의 `swift.source` 를 나타낸다. 요청을 생성 한 코드를 나타냄 ▪ `log_info`WSGI 환경에서의 `swfit.log_info` 값을 나타낸다. ▪ `x-delete-at` 값이나 일반 로그 정보에서 감지할 수 없는 <b>뒤에서 동작하는</b> 코드들에 대한 추가 정보를 내보냄. ▪ 로그 추가시`env.setdefault('swift.log_info', []).append(your_info)` 를 이용하여 다른 사람들과의 로그와 충돌이 없도록 해야 함. ▪ 헤더 값이 없거나, 누락된 값, 0은 일반적으로 `-` 로 표기.
  • 33. /swift/commom/middleware/proxy-logging.py ▪ config 값 ▪ `self.log_hdrs` ▪ `access_log_haders` 가 있으면 해당 값을 읽어오고 없으면 `log_headers`를 읽어오는데 그것도 없으면 `no`로 설정 ▪ `log_hdrs_only` : `access_log_headers_only` 값이 존재하면 `log_hdrs_only` 값에다가 리스트로 가지고 있음. ▪ `self.valid_methods` : `access_log_statsd_valid_http_methods` 값을 가져오며, 없으면 `log_statsd_valid_http_methods` > `GET,HEAD,POST,PUT,DELETE,COPY,OPTIONS` 순으로 값을 가져오게 된다. ▪ 해당내역도 각 항목별로 string list로 구성된다.
  • 34. DLO / SLO ▪ /swift/commom/middleware/dlo.py ▪ D(Dynamic)LO : 파일을 무한정 올릴 수 있다. multipart 종료 시점을 알 수 없음. ▪ req = Request() 객체를 어떻게 잘 활용하는지, Debugging point, 분기 를 눈에 익히는것이 목적 ▪ /swift/commom/middleware/slo.py ▪ S(Static)LO : multipart 업로드 종료 이후 더이상 part 업로드 불가.
  • 35.
  • 36.
  • 37. Custom Middleware Development ▪ `def filter_factory` ▪ closer 기법을 통한 작성 class MyMiddleware: def filter_factory(global_conf, **local_conf): conf.update def my_filter(app): return MyMiddleware(app, conf) return my_filter For more information, https://docs.openstack.org/swift/pike/development_middleware.html
  • 38. Custom Middleware Development ▪ pipeline에서 동작시 wsgi.py module이 어느 클래스를 로드 할지 결정.(paste.filter_factory 부분) ▪ wsgi가 각 middleware의 클래스들을 초기화 시켜준다. ▪ 각 middleware별 특정 변수들은 local_conf에 저장 ▪ app parameter는 다음에 호출 할 middleware를 가리킴. ▪ 문서에 나온것과 달리 middleware는 따로 repository를 만들어서 관리. 이후 설치할 수 있는 설치형으로 만듬. ▪ setup.py에 pbr 설정을 한 뒤 setup.cfg에 swift를 설치하듯이 설치.
  • 39. proxy/server.py __call__ ▪ wsgi가 부르는 함수, 한번 인증된 키에 대해서는 memcached 가 가지고 있어 Keystone으로 갈 필요가 없음 ▪ proxy server -> proxy/containers/server.py 가 핵심
  • 40. Cluster ▪ cluster에서 region을 생성한다.(여러개가 될 수 있음) ▪ 여러개의 region ▪ region 간은 독립된 환경이어야 함. (전기, 네트워크 등) ▪ region 안에 여러개의 zone ▪ 여러개의 rack을 묶어 region을 만들 수도 있고, 하나의 데이터 센터를 region으로 할 수도 있다. ▪ 각 region은 독립된 전원과 네트워크 등을 사용해야 한다.
  • 41. Cluster ▪ zone은 하나의 rack이라고 보면 된다. ▪ zone은 하나의 랙이라고 봐도 무방 ▪ 한 열이 zone이 될수도, 랙 여러개가 zone이 될수도 있음 ▪ zone안에 여러개의 node ▪ node는 서버라고 봐도 무방 ▪ node안에 여러개의 하드디스크 ▪ node는 각 서버 장비라고 보면 된다. ▪ hash 알고리즘은 md5를 기본으로 사용.
  • 42. 분산 시스템 - consistence hash ring Source) http://www.paperplanes.de/2011/12/9/the-magic-of-consistent-hashing.html
  • 43. Account / Container ▪ account와 container는 database에 접근하는 코드 구조가 비슷 ▪ account/server.py ▪ PUT -> proxy 서버에서 request를 받을 때에는 http://prox_svr/v1/account/container/obj ▪ PUT에서 database로 request를 보낼 때에는 http://account_server/v1/sdb1/70/account/obj 로 바뀌어 보내 게 된다. ▪ account 생성 == db file 생성
  • 44. Account / Container ▪ db.py -> initialize == sqlite에 table을 만드는 것 까지만 진행 ▪ PUT 요청 -> db 파일을 하나 생성하고 원하는 이름은 rename 으로 db 파일을 생성한다. PUT 명령이 오면 실제 sqlite에 바로 쓰는것이 아니라 pending 파일에 기록하고, pending 파일이 일 정 capacity를 넘어서면 .lock 파일로 모든 요청을 잠시 막고 db 에 기록한다.
  • 45. Account / Container ▪ GET 요청 -> 모든 요청을 잠시 막고 pending에 있는 것을 db에 merge시킨 뒤 db를 읽어온다. ▪ DELETE -> table field에 DELETED라고 flag 표시만 하고 실제 지우지는 않는다. 나중에 auditor daemon이 돌면서 실제 파일 을 지운다.