SlideShare a Scribd company logo
Contribution - 전쟁의 서막
Apache OpenWhisk 성능 개선
20%30%50%
컨트리뷰션 경험담 기술 이슈 운영
오늘 드릴 말씀은요
발표자 소개
@style95
style9595@gmail.com
dominic.kim@navercorp.com
Apache OpenWhisk?
Apache OpenWhisk 소개
오픈소스 Serverless 플랫폼
Apache OpenWhisk 소개
오픈소스 Serverless 플랫폼 Apache 프로젝트
Apache OpenWhisk 소개
오픈소스 Serverless 플랫폼 Apache 프로젝트
컨테이너 기반
Apache OpenWhisk 소개
오픈소스 Serverless 플랫폼 Apache 프로젝트
컨테이너 기반 Scala
Apache OpenWhisk 소개
IBM이 오픈소스화
Apache OpenWhisk 소개
총 44개 repo
• Core: Scala
• CLI: Go
• ETC: Lua, Python, …
• Ansible, Helm, Compose
Apache OpenWhisk 소개
Apache OpenWhisk 소개
Apache OpenWhisk 소개
https://landscape.cncf.io/sort=stars
Apache OpenWhisk 소개
다양한 런타임 지원
Apache OpenWhisk 소개
다양한 런타임 지원 다양한 Cloud 상에서 동작
Apache OpenWhisk 소개
다양한 런타임 지원
Function chaining 가능
다양한 Cloud 상에서 동작
Apache OpenWhisk 소개
다양한 런타임 지원
Function chaining 가능 이벤트에 반응하여 실행
다양한 Cloud 상에서 동작
Apache OpenWhisk 소개
• Nginx: SSL termination
• Controller: Rest API + Scheduling
• CouchDB: Function 및 실행 결과 저장
• Kafka: Request 포워딩
• Invoker: 컨테이너 구동 및 Function 실행
OpenWhisk Core repo
OpenWhisk CLI Serverless OpenWhisk
Merged: 34
Open: 6
Contribution
컨트리뷰션의 시작
2017년 1월 11일 시작
하지만 실제로 열어보니..
2017년 7월 28일 최종 머지
https://github.com/apache/incubator-openwhisk/pull/1790
TL님의 홍보(?)
6개월 만에 머지
여기서 잠깐!
뭐가 문제인가?
Host에서 컨테이너 IP로 직접 접근 필요
Host(10.10.10.10)
Docker network(172.17.0.0/16)
ContainerA
(172.17.0.2)
ContainerB
(172.17.0.3)
ContainerC
(172.17.0.4)
Test process
172.17.0.2:8080
리눅스 기반의 Docker 네트워크 구조
docker0 인터페이스가 컨테이너들의 Gateway 역할
Host(10.10.10.10)
Docker network(172.17.0.0/16)
ContainerA
(172.17.0.2)
ContainerB
(172.17.0.3)
ContainerC
(172.17.0.4)
Eth0: 10.10.10.10
docker0: 172.17.0.1
리눅스 기반의 Docker 네트워크 구조
$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:4a:06:2c:db txqueuelen 0 (Ethernet)
RX packets 1600061407 bytes 757851585498 (705.8 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2662761605 bytes 240562713498 (224.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
.
.
.
리눅스 기반의 Docker 네트워크 구조
# route –n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.106.100.1 0.0.0.0 UG 0 0 0 eth1
10.106.100.0 0.0.0.0 255.255.254.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
bash-4.4# route –n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.17.0.1 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
[호스트 머신]
[컨테이너 내부]
리눅스에서의 구조
Host(10.10.10.10)
Docker network(172.17.0.0/16)
ContainerA
(172.17.0.2)
ContainerB
(172.17.0.3)
ContainerC
(172.17.0.4)
Test process
172.17.0.2:8080
docker0: 172.17.0.1
Host(10.10.10.10)
VM(virtualbox) network(192.168.0.0/8)
맥 OS(Docker-machine) 에서의 구조
Docker network(172.17.0.0/16)
ContainerA
(172.17.0.2)
ContainerB
(172.17.0.3)
ContainerC
(172.17.0.4)
Test process
172.17.0.2:8080
docker0: 172.17.0.1
192.168.99.10
Docker-machine 예제
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.187:2376 v1.9.1
$ env | grep DOCKER
DOCKER_HOST=tcp://192.168.99.187:2376
DOCKER_MACHINE_NAME=default
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/Users/<your_username>/.docker/machine/machines/default
Host(10.10.10.10)
VM(xhyve) network
Docker for Mac
Docker network(172.17.0.0/16)
ContainerA
(172.17.0.2)
ContainerB
(172.17.0.3)
ContainerC
(172.17.0.4)
Process
docker ps
Forward
Host(10.10.10.10)
VM(xhyve) network
맥 OS(Docker for Mac) 에서의 구조
Docker network(172.17.0.0/16)
ContainerA
(172.17.0.2)
ContainerB
(172.17.0.3)
ContainerC
(172.17.0.4)
Test Process
172.17.0.2:8080
docker0: 172.17.0.1
Host(10.10.10.10)
VM(xhyve) network
맥 OS(Docker for Mac) 에서의 구조
Docker network(172.17.0.0/16)
ContainerA
(172.17.0.2)
ContainerB
(172.17.0.3)
Squid-proxy
(172.17.0.4)
Test Process
Proxy configuration
localhost:3128
3128 port
8080 port
172.17.0.2:8080
Akka-http client는 proxy를 지원하지않음
Play-ws client 적용
신선하고 재미있다!
그래서 뭘 했는데?
Contribution 포인트
•Production
• 성능
• Failover
• 모니터링
• 기능
CouchDB 이슈
• 데이터 삭제가 되지 않음
• 잦은 Crash
• High bulk Insertion때 Crash
• Indexing으로 인한 Crash
CouchDB의 삭제 = 업데이트
Rev-1 Rev-2
Update
여러 버전의 Rev을 유지하고 있음
Rev을 통해 여러 노드간의 Conflict를 해결
CouchDB의 삭제 = 업데이트
Rev-1 Rev-2
Update
Rev-1
Rev-2
(_deleted)
Delete
문서 내용은 삭제되지만
Tombstone은 지워지지 않음
여러 버전의 Rev을 유지하고 있음
Rev을 통해 여러 노드간의 Conflict를 해결
CouchDB의 삭제 = 업데이트
초기 상태
CouchDB의 삭제 = 업데이트
초기 상태 데이터 삽입
CouchDB의 삭제 = 업데이트
초기 상태 데이터 삽입
데이터 삭제
CouchDB의 삭제 = 업데이트
초기 상태 데이터 삽입
데이터 삭제 Compaction 수행
CouchDB 성능 이슈
CouchDB 1.x -> CouchDB 2.x
CouchDB
1.x
CouchDB
1.x
CouchDB
1.x
Standalone node
ReplicationReplication
CouchDB
2.x
CouchDB
2.x
CouchDB
2.x
Consistent Hashing
Clustering
ShardingReplication
Cloudant(IBM)사에서 집중적으로 Contribution
Bulk insertion issue
CouchDB
2.x
CouchDB
2.x
CouchDB
2.x
Client
1. 500 docs / request
3. Replication
2. Indexing
3. Replication
4. Indexing
4. Indexing
Bulk insertion issue
메모리 상에 적용되지 않은 변경들이 쌓이기 시작
CouchDB 성능 이슈
1. Pending_changes가 계속 증가하면서
메모리를 소진
2. 메모리가 100% 달하면
CouchDB 노드가 Crash되고 재시작됨
40 Cores, 128 GB Memory, 2TB SSD
CouchDB 성능 이슈
처리되지 못한 데이터의 유실
불안정한 클러스터
불안정한 TPS
MongoDB로 변경
https://github.com/apache/incubator-openwhisk/pull/3570
ElasticSearch Activation Store
https://github.com/apache/incubator-openwhisk/pull/3977
ElasticSearch Activation Store
Metric 전송
• JVM 애플리케이션을 위한 모니터링 툴
• Metrics, Tracing, 등의 기능 제공
• Scala에서 활용하기 좋음
Tag를 이용한 Aggregation 지원
신규 스케쥴링 알고리즘 공유
https://www.youtube.com/watch?v=cgictUeK-Vk&feature=youtu.be
Bi-weekly Meeting
- 커뮤니티 멤버들끼리 모여서 이슈나 신규 기술 등을 공유하는 자리
- 누구나 참석 가능
- 밤 12시에 시작됨
신규 스케쥴링 알고리즘 공유
https://www.youtube.com/watch?v=cgictUeK-Vk&feature=youtu.be
현재 스케쥴링 로직 분석
성능 이슈 분석
신규 알고리즘 제안
Proto-typing 및 성능 비교 벤치마크
https://cwiki.apache.org/confluence/display/OPENWHISK/Autonomous+Container+Scheduling
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
Docker 데몬의 성능 이슈
OpenWhiskClient
Docker
Daemon
.
.
.
Function 실행 Docker API
컨테이너 생성/삭제
컨테이너 정지/재시작
Docker 데몬의 성능 이슈
액션 실행 결과
Docker 생성/삭제 API 성능
Docker 정지/재개 API 성능
Docker 데몬의 성능 이슈
OpenWhiskClient
Docker
Daemon
.
.
.
Function 실행 Docker API
5~10ms
500~700ms
컨테이너 생성/삭제
컨테이너 정지/재시작
100~200ms
Docker 데몬의 성능 이슈
OpenWhiskClient
Docker
Daemon
.
.
.
Function 실행 Docker API
5~10ms
500~700ms
컨테이너 생성/삭제
컨테이너 정지/재시작
100~200ms
bottleneck
Docker 데몬의 성능 이슈
• Docker API의 처리속도가 느림
• 잦은 API 호출 및 동시 호출 (X)
• Docker API 호출 최소화가 관건
오픈소스 프로젝트의 매력
• 누구에게나 평등한 기회
• 장소와 시간에 구애 받지 않음
• 코드로만 표현되고 평가받음
느낀점
• 다이나믹한 개발 경험
• 전 세계의 개발자들과 함께 커뮤니케이션
• 영국, 독일, 미국 등 다양한 나라의 개발자들과 화상회의
• Apache 프로젝트에 내 코드가 들어가는 경험
• 장소에 구애 받지 않을 수 있음
• 다양한 외부 발표 기회
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
Thank You!
Q & A

More Related Content

What's hot (20)

PDF
MySQL SYSスキーマのご紹介
Shinya Sugiyama
 
PPTX
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
株式会社クライム
 
PDF
TIME_WAITに関する話
Takanori Sejima
 
PDF
個人データ連携から見えるSociety5.0~法令対応に向けた技術的な活用事例について~
Scalar, Inc.
 
PDF
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Platform - Japan
 
PDF
AWS Builders Online Series | EC2와 Lambda로 AWS 시작하기 - 조용진, AWS 솔루션즈 아키텍트
Amazon Web Services Korea
 
PPTX
第15回JSSUG「Azure SQL Database 超入門」
裕之 木下
 
PDF
俺のTerraform CI/CD ライフサイクル
HonMarkHunt
 
KEY
What is Object Oriented CSS?
Nicole Sullivan
 
PPTX
A Brief Introduction to React.js
Doug Neiner
 
PDF
React JS & Functional Programming Principles
Andrii Lundiak
 
PDF
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
apkiban
 
PDF
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
 
PDF
AWS Black Belt Techシリーズ Amazon EMR
Amazon Web Services Japan
 
PDF
Hyper-V ネットワークの基本
Syuichi Murashima
 
PPTX
AWSで作る分析基盤
Yu Otsubo
 
PDF
Introducing Oracle Linux and Securing It With ksplice
LF Events
 
PDF
Microsoft Azure Storage 概要
Takeshi Fukuhara
 
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Noritaka Sekiyama
 
MySQL SYSスキーマのご紹介
Shinya Sugiyama
 
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
株式会社クライム
 
TIME_WAITに関する話
Takanori Sejima
 
個人データ連携から見えるSociety5.0~法令対応に向けた技術的な活用事例について~
Scalar, Inc.
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Platform - Japan
 
AWS Builders Online Series | EC2와 Lambda로 AWS 시작하기 - 조용진, AWS 솔루션즈 아키텍트
Amazon Web Services Korea
 
第15回JSSUG「Azure SQL Database 超入門」
裕之 木下
 
俺のTerraform CI/CD ライフサイクル
HonMarkHunt
 
What is Object Oriented CSS?
Nicole Sullivan
 
A Brief Introduction to React.js
Doug Neiner
 
React JS & Functional Programming Principles
Andrii Lundiak
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
apkiban
 
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
 
AWS Black Belt Techシリーズ Amazon EMR
Amazon Web Services Japan
 
Hyper-V ネットワークの基本
Syuichi Murashima
 
AWSで作る分析基盤
Yu Otsubo
 
Introducing Oracle Linux and Securing It With ksplice
LF Events
 
Microsoft Azure Storage 概要
Takeshi Fukuhara
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Noritaka Sekiyama
 

Similar to [네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경 (20)

PDF
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
 
PPTX
Docker osc 0508
Open Source Consulting
 
PDF
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
Ji-Woong Choi
 
PDF
[17.01.19] docker introduction (Korean Version)
Ildoo Kim
 
PDF
AWS + Docker in Vingle
D C
 
PPTX
Docker & Kubernetes 기초 - 최용호
용호 최
 
PPTX
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
SeungYong Oh
 
PPTX
애플리케이션 최적화를 위한 컨테이너 인프라 구축
rockplace
 
PPT
Backend Master | 3.4.5 Deploy - Docker Principal
Kyunghun Jeon
 
PDF
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
David Lee
 
PDF
Docker로 서버 개발 편하게 하기
Dronix
 
PDF
[오픈소스컨설팅]Docker on Kubernetes v1
Ji-Woong Choi
 
PDF
Kubernetes on Premise
Chan Shik Lim
 
PDF
K8s in action02
Sunggon Song
 
PDF
Docker Container
Seung-Hoon Baek
 
PDF
Open infradays 2019_msa_k8s
Hyoungjun Kim
 
PDF
OpenShift 4버전의 변경사항 및 OPENMARU APM의 CoreOS, CRI-O 모니터링 기능
Opennaru, inc.
 
PDF
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
Eunhyang Kim
 
PPTX
[AWSKRUG 컨테이너 소모임] Rancher 기본 입문
Hyunmin Kim
 
PDF
Docker.소개.30 m
Wonchang Song
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
 
Docker osc 0508
Open Source Consulting
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
Ji-Woong Choi
 
[17.01.19] docker introduction (Korean Version)
Ildoo Kim
 
AWS + Docker in Vingle
D C
 
Docker & Kubernetes 기초 - 최용호
용호 최
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
SeungYong Oh
 
애플리케이션 최적화를 위한 컨테이너 인프라 구축
rockplace
 
Backend Master | 3.4.5 Deploy - Docker Principal
Kyunghun Jeon
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
David Lee
 
Docker로 서버 개발 편하게 하기
Dronix
 
[오픈소스컨설팅]Docker on Kubernetes v1
Ji-Woong Choi
 
Kubernetes on Premise
Chan Shik Lim
 
K8s in action02
Sunggon Song
 
Docker Container
Seung-Hoon Baek
 
Open infradays 2019_msa_k8s
Hyoungjun Kim
 
OpenShift 4버전의 변경사항 및 OPENMARU APM의 CoreOS, CRI-O 모니터링 기능
Opennaru, inc.
 
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
Eunhyang Kim
 
[AWSKRUG 컨테이너 소모임] Rancher 기본 입문
Hyunmin Kim
 
Docker.소개.30 m
Wonchang Song
 
Ad

More from NAVER Engineering (20)

PDF
React vac pattern
NAVER Engineering
 
PDF
디자인 시스템에 직방 ZUIX
NAVER Engineering
 
PDF
진화하는 디자인 시스템(걸음마 편)
NAVER Engineering
 
PDF
서비스 운영을 위한 디자인시스템 프로젝트
NAVER Engineering
 
PDF
BPL(Banksalad Product Language) 무야호
NAVER Engineering
 
PDF
이번 생에 디자인 시스템은 처음이라
NAVER Engineering
 
PDF
날고 있는 여러 비행기 넘나 들며 정비하기
NAVER Engineering
 
PDF
쏘카프레임 구축 배경과 과정
NAVER Engineering
 
PDF
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
NAVER Engineering
 
PDF
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
NAVER Engineering
 
PDF
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
NAVER Engineering
 
PDF
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
NAVER Engineering
 
PDF
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
NAVER Engineering
 
PDF
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
NAVER Engineering
 
PDF
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
NAVER Engineering
 
PDF
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
NAVER Engineering
 
PDF
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
NAVER Engineering
 
PDF
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
NAVER Engineering
 
PDF
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
NAVER Engineering
 
PDF
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
NAVER Engineering
 
React vac pattern
NAVER Engineering
 
디자인 시스템에 직방 ZUIX
NAVER Engineering
 
진화하는 디자인 시스템(걸음마 편)
NAVER Engineering
 
서비스 운영을 위한 디자인시스템 프로젝트
NAVER Engineering
 
BPL(Banksalad Product Language) 무야호
NAVER Engineering
 
이번 생에 디자인 시스템은 처음이라
NAVER Engineering
 
날고 있는 여러 비행기 넘나 들며 정비하기
NAVER Engineering
 
쏘카프레임 구축 배경과 과정
NAVER Engineering
 
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
NAVER Engineering
 
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
NAVER Engineering
 
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
NAVER Engineering
 
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
NAVER Engineering
 
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
NAVER Engineering
 
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
NAVER Engineering
 
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
NAVER Engineering
 
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
NAVER Engineering
 
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
NAVER Engineering
 
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
NAVER Engineering
 
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
NAVER Engineering
 
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
NAVER Engineering
 
Ad

[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경