[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)Hyojun Jeon
NDC18에서 발표하였습니다. 현재 보고 계신 슬라이드는 2부 입니다.(총 2부)
- 1부 링크: https://goo.gl/3v4DAa
- 2부 링크: https://goo.gl/wpoZpY
(SlideShare에 슬라이드 300장 제한으로 2부로 나누어 올렸습니다. 불편하시더라도 양해 부탁드립니다.)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)Hyojun Jeon
NDC18에서 발표하였습니다. 현재 보고 계신 슬라이드는 2부 입니다.(총 2부)
- 1부 링크: https://goo.gl/3v4DAa
- 2부 링크: https://goo.gl/wpoZpY
(SlideShare에 슬라이드 300장 제한으로 2부로 나누어 올렸습니다. 불편하시더라도 양해 부탁드립니다.)
다양한 하둡에코 소프트웨어 성능을 검증하려는 목적으로 성능 테스트 환경을 구성해보았습니다. ELK, JMeter를 활용해 구성했고 Kafka에 적용해 보았습니다.
프로젝트에서 요구되는 성능요건을 고려해 다양한 옵션을 조정해 시뮬레이션 해볼수 있습니다.
처음 적용한 뒤 2년 정도가 지났지만, kafka 만이 아니다 다른 Hadoop eco 및 Custom Solution에도 유용하게 활용 가능하겠습니다.
드랍박스, nDrive 등과 같은 클라우드 스토리지 서비스들은 데이터를 어떻게 저장하는지에 대한 이론적 내용과 실제 구현 내용을 살펴봅니다. 이 발표에서는 OpenStack 의 swift라는 Object Storage 를 이용하여 이론이 어떻게 구현되어있는지 알아봅니다.
Understanding of Apache kafka metrics for monitoring SANG WON PARK
2019 kafka conference seould에서 발표한 "Apache Kafka 모니터링을 위한 Metrics 이해" 슬라이드 자료
기존 2018년 자료에서 모니터링 관점에서 중요한 metrcis를 중심으로 정리하였고, 2019년 기준으로 추가/변경된 metrics를 반영하였다.
주용 내용은
- 업무에 최적화된 apache kafka 모니터링을 하려면?
- 어떤 정보를 모니터링 해야 할까?
- 적시성 관점의 모니터링 지표 (TotalTimeMs에 대한 세부 구조 이해)
- 안정성 관점의 모니터링 지표 (데이터 유실이 없이 중단없는 서비스)
- 언제 apache kafka 클러스터를 확장해야 할까? (어떤 지표를 봐야 할까?)
위 모든 지표는 producer/broker/consumer 3가지 측면에서 검토하였다.
컨퍼런스 영상 링크 : https://www.youtube.com/watch?v=p2RGsTOCHAg
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안SANG WON PARK
Apache Kafak의 빅데이터 아키텍처에서 역할이 점차 커지고, 중요한 비중을 차지하게 되면서, 성능에 대한 고민도 늘어나고 있다.
다양한 프로젝트를 진행하면서 Apache Kafka를 모니터링 하기 위해 필요한 Metrics들을 이해하고, 이를 최적화 하기 위한 Configruation 설정을 정리해 보았다.
[Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안]
Apache Kafka 성능 모니터링에 필요한 metrics에 대해 이해하고, 4가지 관점(처리량, 지연, Durability, 가용성)에서 성능을 최적화 하는 방안을 정리함. Kafka를 구성하는 3개 모듈(Producer, Broker, Consumer)별로 성능 최적화를 위한 …
[Apache Kafka 모니터링을 위한 Metrics 이해]
Apache Kafka의 상태를 모니터링 하기 위해서는 4개(System(OS), Producer, Broker, Consumer)에서 발생하는 metrics들을 살펴봐야 한다.
이번 글에서는 JVM에서 제공하는 JMX metrics를 중심으로 producer/broker/consumer의 지표를 정리하였다.
모든 지표를 정리하진 않았고, 내 관점에서 유의미한 지표들을 중심으로 이해한 내용임
[Apache Kafka 성능 Configuration 최적화]
성능목표를 4개로 구분(Throughtput, Latency, Durability, Avalibility)하고, 각 목표에 따라 어떤 Kafka configuration의 조정을 어떻게 해야하는지 정리하였다.
튜닝한 파라미터를 적용한 후, 성능테스트를 수행하면서 추출된 Metrics를 모니터링하여 현재 업무에 최적화 되도록 최적화를 수행하는 것이 필요하다.
본 세션에서는 Amazon의 관리형 데이터베이스 서비스(RDS) 중 기존 상용데이터베이스의 5배 성능 및 1/10 가격으로도 확장성을 보장하는 Aurora에 대한 소개 및 사용법 그리고 기존의 DB에서의 마이그레이션 방법에 대해 소개해드립니다. 10월 리인벤트를 통해 동경 리전에 Aurora를 사용가능하게 되었습니다.
AWS KRUG 강남비기너모임의 발표자료 입니다. AWS 람다를 사용해서 만든 토이프로젝트 이야기 입니다. 비기너가 하나의 프로젝트를 완성시키기 위해서 마음대로 AWS의 서비스들을 사용하면서 겪은 경험담이예요. 람다와 함께 SNS, DynamoDB, API-Gateway, ElastiCache등을 함께 사용했습니다.
다양한 하둡에코 소프트웨어 성능을 검증하려는 목적으로 성능 테스트 환경을 구성해보았습니다. ELK, JMeter를 활용해 구성했고 Kafka에 적용해 보았습니다.
프로젝트에서 요구되는 성능요건을 고려해 다양한 옵션을 조정해 시뮬레이션 해볼수 있습니다.
처음 적용한 뒤 2년 정도가 지났지만, kafka 만이 아니다 다른 Hadoop eco 및 Custom Solution에도 유용하게 활용 가능하겠습니다.
드랍박스, nDrive 등과 같은 클라우드 스토리지 서비스들은 데이터를 어떻게 저장하는지에 대한 이론적 내용과 실제 구현 내용을 살펴봅니다. 이 발표에서는 OpenStack 의 swift라는 Object Storage 를 이용하여 이론이 어떻게 구현되어있는지 알아봅니다.
Understanding of Apache kafka metrics for monitoring SANG WON PARK
2019 kafka conference seould에서 발표한 "Apache Kafka 모니터링을 위한 Metrics 이해" 슬라이드 자료
기존 2018년 자료에서 모니터링 관점에서 중요한 metrcis를 중심으로 정리하였고, 2019년 기준으로 추가/변경된 metrics를 반영하였다.
주용 내용은
- 업무에 최적화된 apache kafka 모니터링을 하려면?
- 어떤 정보를 모니터링 해야 할까?
- 적시성 관점의 모니터링 지표 (TotalTimeMs에 대한 세부 구조 이해)
- 안정성 관점의 모니터링 지표 (데이터 유실이 없이 중단없는 서비스)
- 언제 apache kafka 클러스터를 확장해야 할까? (어떤 지표를 봐야 할까?)
위 모든 지표는 producer/broker/consumer 3가지 측면에서 검토하였다.
컨퍼런스 영상 링크 : https://www.youtube.com/watch?v=p2RGsTOCHAg
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안SANG WON PARK
Apache Kafak의 빅데이터 아키텍처에서 역할이 점차 커지고, 중요한 비중을 차지하게 되면서, 성능에 대한 고민도 늘어나고 있다.
다양한 프로젝트를 진행하면서 Apache Kafka를 모니터링 하기 위해 필요한 Metrics들을 이해하고, 이를 최적화 하기 위한 Configruation 설정을 정리해 보았다.
[Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안]
Apache Kafka 성능 모니터링에 필요한 metrics에 대해 이해하고, 4가지 관점(처리량, 지연, Durability, 가용성)에서 성능을 최적화 하는 방안을 정리함. Kafka를 구성하는 3개 모듈(Producer, Broker, Consumer)별로 성능 최적화를 위한 …
[Apache Kafka 모니터링을 위한 Metrics 이해]
Apache Kafka의 상태를 모니터링 하기 위해서는 4개(System(OS), Producer, Broker, Consumer)에서 발생하는 metrics들을 살펴봐야 한다.
이번 글에서는 JVM에서 제공하는 JMX metrics를 중심으로 producer/broker/consumer의 지표를 정리하였다.
모든 지표를 정리하진 않았고, 내 관점에서 유의미한 지표들을 중심으로 이해한 내용임
[Apache Kafka 성능 Configuration 최적화]
성능목표를 4개로 구분(Throughtput, Latency, Durability, Avalibility)하고, 각 목표에 따라 어떤 Kafka configuration의 조정을 어떻게 해야하는지 정리하였다.
튜닝한 파라미터를 적용한 후, 성능테스트를 수행하면서 추출된 Metrics를 모니터링하여 현재 업무에 최적화 되도록 최적화를 수행하는 것이 필요하다.
본 세션에서는 Amazon의 관리형 데이터베이스 서비스(RDS) 중 기존 상용데이터베이스의 5배 성능 및 1/10 가격으로도 확장성을 보장하는 Aurora에 대한 소개 및 사용법 그리고 기존의 DB에서의 마이그레이션 방법에 대해 소개해드립니다. 10월 리인벤트를 통해 동경 리전에 Aurora를 사용가능하게 되었습니다.
AWS KRUG 강남비기너모임의 발표자료 입니다. AWS 람다를 사용해서 만든 토이프로젝트 이야기 입니다. 비기너가 하나의 프로젝트를 완성시키기 위해서 마음대로 AWS의 서비스들을 사용하면서 겪은 경험담이예요. 람다와 함께 SNS, DynamoDB, API-Gateway, ElastiCache등을 함께 사용했습니다.
RabbitMQ/ActiveMQ 와 같은 비동기 메시징 미들웨어를 이용하여 다량의 서버를 orchestration(command & control) 할 수 있는 mcollective에 대한 한글 ppt 자료입니다. 상세한 내용은 http://wiki.tunelinux.pe.kr/x/LQAy 를 참고하시면 됩니다.
오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
11. Actor
• From a 1973 paper, Written by Carl Hewitt
• Scala, Erlang, Elixir etc.
• Encapsulate state and behavior
• Implement Message-Passing Concurrency
12. Actor Model of Concurrency
• 아무것도 공유하지 않는다
- 싱크를 맞출 필요가 없다
• Isolated lightweight event-based processes
- ~6.5m on 4GB RAM
• 메시지를 통해서 서로 통신
- Asynchronous and Non-Blocking
- 메시지는 immutable
• 각 액터는 메시지를 수신하기 위한 메일박스를 가짐(Message
queue)
• Supervision을 통해 failure를 관리
14. Akka
• Lightbend 사에서 만든 toolkit
- 액터 프로그래밍 모델 지원
- Concurrent -> Actor
- Distributed -> Remoting
- Fault tolerant -> Supervision
15. Akka Actor
• Lightweight object
- ~300 bytes / instance
• Keeps internal state
• Asynchronous / Non-blocking
• Meesage는 mailbox에 보관
Event-driven thread
Actor
Mailbox 1
Behavior
State
SupervisorStrategy
Children
2 3ActorRefTransport
16. Akka Actor
• Receives a message
- Create new Actors
- Sends messages to other actors
- handle the next message
Event-driven thread
Actor
Mailbox 1
Behavior
State
SupervisorStrategy
Children
2 3ActorRefTransport
18. Akka actor system
• Akka application의 최소 단위
• 스케줄링, 로깅, 설정을 공유 관리
• top-level 액터를 생성
- 대부분 Supervisor actor가 top-level actor
• 모든 Actor는 ActorSystem 내부에서 동작을 수행
• Actor를 생성하면 Actor 자체를 반환하지 않고 ActorRef를 반환해서 사용
21. Actor Instance
Event-driven thread
Actor2
Mailbox 1
Behavior
State
SupervisorStrategy
Children
2 3ActorRefTransport
Event-driven thread
Actor1
Mailbox 1
Behavior
State
SupervisorStrategy
Children
Handle message here
24. Actor Operations
• Send
- Fire and Forget
• Asynchronous
• No expected reply
• tell() or !
- Send and Receive
• Asynchronous
• Expects reply(Future)
• ask() or ?
29. Actor Operations
• Supervise
- Actor가 실패했을 때 해야할 일을 결정
- Supervisor는 특별한 메시지를 통해 어떤 액터가 왜 중단됐는지에 대한 통보를 받음
- Supervisor strategy를 통해 발생한 에러를 어떻게 처리할지 정의할 수 있음
• OneForOneStrategy : 중단된 자식 액터만 처리
• AllForOneStrategy : 자식 액터 중 하나라도 중단되면 같게 처리
• 직접 정의 가능
35. Dispatcher
• Control execution flow
• based on Java Executor framework
- ThreadPoolExecutor
• 미리 Pool 장에 여러개의 쓰레드를 생성해 두고 사용
- ForkJoinPoolExecutor
• Fork를 통해 업무를 분담, Join을 통해 업무를 취합
• 기본적으로 ThreadPool과 비슷하나 Thread가 가진 자신의 큐에 잡이 없으면 다른 쓰레드
로 부터 잡을 훔쳐올 수 있음
• 최대한 노는 쓰레드가 없도록 하는 알고리즘
36. Dispatcher
• Types of dispatchers
- Dispatcher
• 기본 디스패처
• 액터를 스레드풀에 연결
• 기본적으로 forkjoin-executor를 사용
• 스레드 풀 크기가 고정
- PinnedDispatcher
• 액터를 고유한 쓰레드 하나에 연결
• 스레드가 액터 사이에 공유되지 않음
- BalancingDispatcher
• Busy 한 액터에게서 Idle 사앹의 액터에게 메시지를 재배치
- CallingThreadDispatcher
• 현재 스레드를 사용해 액터의 메시지를 처리
• 테스트할 때만 사용
• 단위 테스트에서 액터를 생성하기 위해 TestActorRef를 사용할 때만 사용하는 디스패처
40. Mailbox
• Types of mailboxes
- Blocking queue : Queue가 가득 차있을 때 삽입, 비어있을 때 추출을 막아주어
thread-safe를 보장
- Bounded queue : Queue 사이즈가 고정, 특정 사이즈보다 더 많은 Element를 삽입
불가
Types Implementation Blocking Bounded
Unbounded
mailbox
java.util.concurrent.ConcurrentLinkedQueue No No
Bounded
mailbox
java.util.concurrent.LinkedBlockingQueue Yes Yes
Unbounded
priority mailbox
java.util.concurrent.PriorityBlockingQueue Yes No
Bounded priority
mailbox
java.util.concurrent.PriorityBlockingQueue
wrapped in akka.util.BoundedBlockingQueue
Yes Yes
41. Routers
• 메시지를 어디로 보낼지 결정하는 기능
• 액터의 한 종류
• 라우터로부터 메시지를 받는 액터들을 Routee라고 함
42. Router
• Types of routers
- RoundRobin Router
• 첫번째 도착한 메시지를 첫번째 라우티에 보냄
- Random Router
• 받은 메시지를 임의의 라우터로 전달
- SmallestMailbox Router
• 라우티의 mailbox를 검사해서 mailbox에 가장 메시지가 작은 라우티 선택
- Broadcast Router
• 받은 메시지를 모든 라우티에 전달
- ScatterGatherFirstCompleted Router
메시지를 모든 라우티에 전달하고 최초로 돌아오는 응답을 원래의 sender 객체에 돌려
줌
- ConsistentHashing Router
• 메시지에 대한 consistent hash값을 가지고 라우티를 선택
• 여러 다른 메시지가 같은 라우티에 전달되어야 하지만 어떤 라우티가 어떤 메시지를 처리하는지 중요
하지 않을 때 사용
43. Approaches to scaling
• 예제 : 업무용 채팅 어플리케이션
목표 전통적인 접근방법 Akka의 접근방법
Scalability
스레드, 데이터베이스로 변경할 수 있
는 상태 공유, 웹 서비스 RPC 호출
메시지를 주고 받고 공유하는 상태가
없음. 변경할 수 없는 이벤트 기록
상호 작용 현재 정보를 polling Event-driven: 이벤트 발생 시 push
네트워크 확장 동기 RPC, Blocking I/O 비동기 RPC, Non-blocking I/O
실패 처리 모든 예외처리 필요. 실패히 작동 문제
문제 발생 시 해당 부분만 중단. 실패한
부분을 격리 시키고 나머지 실행
45. Appendix
• Reactive manifesto
- Non-blocking I/O
• Blocking I/O를 사용하면 병렬성 기회가 줄어든다
- 비동기 처리
• 동기 처리는 병렬성 기회를 줄인다
- 이벤트 기반 처리
• Polling은 자원을 적게 쓸 기회를 줄인다
- 오류를 격리(회복성)
• 어떤 노드가 다른 모든 노드를 중단시킬 가능성이 있으면 자원 낭비
46. References
• 무어의 법칙, https://ko.wikipedia.org/wiki/%EB%AC%B4%EC%96%B4%EC%9D%98_%EB%B2%95%EC%B9%99
• Introduction to akka, https://www.slideshare.net/RoyRusso1/introduction-to-akka-atlanta-java-users-group
• Introduction to Concurrent programming with Akka Actors, https://www.slideshare.net/datamantra/introduction-to-
concurrent-programming-with-akka-actors-73684310
• Dispatcher and routers, https://www.packtpub.com/books/content/dispatchers-and-routers
• Raymond Roestenburg, Rob Bakker, and Rob Williams, 2016, Akka in Action