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

PDF
Deep dive to PostgreSQL Indexes
PDF
파이썬 생존 안내서 (자막)
PDF
Amazon Aurora - Auroraの止まらない進化とその中身
PPTX
Deep dive into React Portals
PDF
AWS Black Belt Online Seminar Elastic Load Balancing
PDF
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
PDF
LISA2019 Linux Systems Performance
PDF
AWSでDockerを扱うためのベストプラクティス
Deep dive to PostgreSQL Indexes
파이썬 생존 안내서 (자막)
Amazon Aurora - Auroraの止まらない進化とその中身
Deep dive into React Portals
AWS Black Belt Online Seminar Elastic Load Balancing
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
LISA2019 Linux Systems Performance
AWSでDockerを扱うためのベストプラクティス

What's hot (20)

PDF
Introduction to Git and GitHub
PDF
20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기
PDF
Linux cgroups and namespaces
PDF
AWS Black Belt Techシリーズ AWS Direct Connect
PDF
Best Practices for Running PostgreSQL on AWS
DOCX
Linux admin interview questions
PDF
GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境
PDF
AWSからのメール送信
PDF
20191125 Container Security
PPTX
Awsをオンプレドメコンに連携させる
PDF
Introduction to Docker storage, volume and image
PDF
AWSとOCIを比べてみた
PPTX
Azure API Management 俺的マニュアル
PDF
Advanced Terraform
KEY
Introduction To Git
PDF
RHEL7/CentOS7 NetworkManager徹底入門
PDF
AWSのログ管理ベストプラクティス
PDF
AWS Black Belt Techシリーズ AWS Directory Service
PPTX
Introduction to CNI (Container Network Interface)
PDF
V sphere 7 update 3 へのアップグレードについて
Introduction to Git and GitHub
20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기
Linux cgroups and namespaces
AWS Black Belt Techシリーズ AWS Direct Connect
Best Practices for Running PostgreSQL on AWS
Linux admin interview questions
GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境
AWSからのメール送信
20191125 Container Security
Awsをオンプレドメコンに連携させる
Introduction to Docker storage, volume and image
AWSとOCIを比べてみた
Azure API Management 俺的マニュアル
Advanced Terraform
Introduction To Git
RHEL7/CentOS7 NetworkManager徹底入門
AWSのログ管理ベストプラクティス
AWS Black Belt Techシリーズ AWS Directory Service
Introduction to CNI (Container Network Interface)
V sphere 7 update 3 へのアップグレードについて
Ad

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

PDF
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
PPTX
Docker osc 0508
PDF
[오픈소스컨설팅] ARM & OpenStack Community
PDF
[1A6]Docker로 보는 서버 운영의 미래
PDF
Node.js 20버전에 변경된 점들.pdf
PDF
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
PPTX
빠르게훓어보는 Node.js와 Vert.x
PPTX
Docker & Kubernetes 기초 - 최용호
PPTX
An overview of kubernetes & (very) simple live demo
PDF
SOSCON 2017 - Backend.AI
PDF
[17.01.19] docker introduction (Korean Version)
PPTX
[TeamStudy-022] Docker
PDF
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
PDF
2020년 10월 24일 개발자 이야기
PDF
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
PDF
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
PPTX
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
PDF
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
PDF
Kubernetes on Premise
PDF
[Partner TechShift 2017] 클라우드 시대 기존 Legacy에서 벗어나는 방법
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
Docker osc 0508
[오픈소스컨설팅] ARM & OpenStack Community
[1A6]Docker로 보는 서버 운영의 미래
Node.js 20버전에 변경된 점들.pdf
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
빠르게훓어보는 Node.js와 Vert.x
Docker & Kubernetes 기초 - 최용호
An overview of kubernetes & (very) simple live demo
SOSCON 2017 - Backend.AI
[17.01.19] docker introduction (Korean Version)
[TeamStudy-022] Docker
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
2020년 10월 24일 개발자 이야기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
Kubernetes on Premise
[Partner TechShift 2017] 클라우드 시대 기존 Legacy에서 벗어나는 방법
Ad

More from NAVER Engineering (20)

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

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