데이터에 기반한 사용자 행위 분석 - 어떤 데이터를 수집해야할까?
·
project/wargame
공격적인지 등의 플레이 스타일이나 성향 분석도 재밌을 거 같고, 인게임 데이터를 수집해서 사용자의 행위를 분석하면서 AFK나 탈주같은 트롤 행위를 검출하면 좋을 것같다. 추후 수집된 데이터들을 기반으로 다시 고민해보겠다. 일단 수집이 먼저다.  데이터 파이프라인(Data Pipeline) 구축e커머스 서비스들로 예시를 들자면, 구매나 배송같은 트랜잭션 작업 이외에 장바구니에 담거나 다시 꺼내고 쿠폰을 적용하는 모든 사용자 액션을 로그 데이터로 수집하고자 한다. 이런 사용자 행위를 수집하고 분석하는 데이터 파이프라인을 구축하는 것을 목표로 한다. 기존에 이미 사용하고 있던 Kafka를 통해서 데이터를 스트리밍할 생각이다. Case 1. Kafka Consumer가 이벤트를 받아서 구축한 ELK에서 분석Ca..
MSA? 이길 수 없다면 합류해라 (feat. Kafka IPC 트러블슈팅)
·
project/wargame
당근마켓도 100만 MAU 뜨고 나서야 MSA를 도입했다는거 보면, 사실 그정도 규모 이하는 모놀리식으로 충분하다는 소리다.​도대체 왜 이렇게 MSA에 목메이게 되었는가..​이길 수 없다면 합류해라​나도 MSA하겠다​​이거말고 진짜 MSA를 결심한 이유원래 C++로 이뤄진 게임 서버와 통신하기 위해 Kafka를 사용했었다.   매칭 결과나 전적 결과를 저장하기 위해서라도 전달 과정에서 최소 한번은 디스크에 기록되어야 했다.​1. 매치메이킹의 결과를 받아서 게임 서버에 방을 생성2. 게임이 끝나면 그 결과를 다시 웹서버로 전달 대충 목적인데 닭 잡는데 소 칼 쓰는 느낌이다. 그래서 kafka를 좀 더 효율적으로 쓰기 위해서 고도화를 고민해봤다. ​일단 Redis를 이용하던 매치메이킹 기능이 스케줄러로 동작..
Kafka는 고가용성을 어떻게 유지하는지 알아보자
·
kafka
수많은 Topic의 설정들.. 성능과 가용성에서 엄청난 차이를 만드는 카프카 엔지니어들의 영역이다.​어줍잖게 카프카쓸거면 RabbitMQ로 구현하라는 말은 엔지니어라는 전문 인력이 필요할만큼 어렵고 그 갭이 심하다는 소리이다.​너무 내 식대로 풀어서 메모했던 내용을 토대로 작성한 게시글이라 비난없이 귀엽게 봐주면 된다.​​kafka cluster의 일부가 장애 상황에 빠지더라도 전체 시스템에 영향을 주지 않고 계속 작동할 수 있도록 해주는 Partition, RF, ISR 에 대해 알아보자​​Partition topic은 1개 이상의 파티션으로 이루어진다.​하나의 topic에 포함된 메시지들을 물리적으로 분리해서 저장하는 저장소​하나의 메세지가 하나의 파티션에 들어가는 형태 (Not Sharding, P..
Kubernetes 운영과 모니터링 및 오류 해결
·
project/resistance
resistance는 membership, dedicated, business, logging 총 4개의 마이크로 서비스로 구성되는 MSA 서비스이다.​ 아직 모니터링은 설치도 안했는데 배포하니까 총 Pod 64개가 나왔었다.​ 흠 4일정도 내내 틀어두니까 22$ 나왔다​NAT Gateway의 Data process보다 시간별 비용이 더 나온 것으로 보아 성능적 이슈는 안보였다. 근데도 오류 해결할때는 노드 성능탓만 했다ㅎㅎ​대략 게시글 7000개의 dummy 데이터를 넣어서 진행해봤는데, 무의미하게 데이터양만 늘린거 같다.​백엔드에서 동시 다발적으로 트래픽 과부하에 걸릴 정도의 병목에 버티느냐가 관건인거 같다.​​운영 모니터링 - Prometheus for k8sHelm repo를 설치해서 Promet..
웹서버 마이그레이션, MSA 설계하기
·
project/resistance
기존의 Flask로 간단하게 구현한 프로토타입 백엔드는 Http 통신으로 계정과 게임 데이터를 불러오거나, 환율 혹은 공지사항, 이벤트 등의 실시간 변동 사항을 적용하는 시스템을 구현했었다.그러나 점점 볼륨이 커지니까 관리하기가 어려웠고, 공부중인 기술과 아키텍처의 경험도 얻을 겸 MSA로 마이그레이션을 시도했다. k8s로 인기를 얻게된 MSA는 굉장히 어렵고 복잡한 구조로 이해하기 위한 제반 지식이 필요하지만, 나의 경험을 녹아내기 위해 필요한 개념들만 간략하게 소개하면서 진행하겠다.​​MSA(Mircro Service Architecture)란?https://kr.tmaxsoft.com/info/storyTView.do?seq=345작고, 독립적으로 배포가 가능한 각각의 기능을 수행하는 서비스(mir..
Kafka가 대용량 트래픽에 뛰어난 성능을 보이는 이유
·
kafka
Kafka가 메시징 애플리케이션을 넘어서 이벤트 스트리밍 플랫폼으로 군림할 수 있었던 이유가 뭘까? 그야말로 신강을 넘어 중원 무림을 점령해버린 천마.. 통상적인 인식으로, Apache Kafka에 따라오는 키워드는 확장성, 고성능과 높은 처리량이다.  분산 메시징 시스템으로 처리량이 높은건 건 알겠는데, Redis와 다르게 Kafka는 데이터를 Broker의 disk에 저장한다.​ disk I/O 비용이 상당히 큰 출혈인데, 얜 도대체 왜 빠른거지????????????? 왜빠른데요?왜Kafka는신이죠?왜다들이거에목메는거죠?왜성능이좋은건데요?전문엔지니어가필요한데도왜다들공부하는건데요??? ​순차적 I/O(Sequential I/O)disk 접근은 어떻게 사용하는지에 따라 느릴수도 있고 빠를 수도 있다.순차..
동물원을 탈출한 Kafka를 잡아왔습니다
·
kafka
https://downfa11.tistory.com/32 동물원을 탈출한 Kafka를 찾습니다부제 : Kafka에서 이제 Zookeeper가 필요 없어졌다고...???​네?????/​​Apache Kafka 2.8.0 출시 이후로 Zookeeper에 대한 의존성이 점차 제거되고 있다.​다만 3.3.1 릴리즈부터 시작해서 4.0 부터 Zookeeper가 제downfa11.tistory.com  이전 '동물원을 탈출한 Kafka를 찾습니다' 게시글에서 이어지는 글​​​왜 Apache Kafka일까?높은 처리량순차 접근 (Sequential I/O)디스크에 연속적으로 데이터를 쓰고 읽는 방식write : 랜덤 접근하는 기존 방식과 다르게, Kafka는 디스크에 시간 순서대로(순차적) 데이터를 기록read : ..
토이프로젝트 - 메시지 송수신간의 Kafka 트랜잭션 처리 범위 실험
·
kafka
복잡한 비즈니스 로직을 수행하고 많은 이벤트를 발행하는 서비스에서 허울좋게도 항상 트랜잭션이 성공한 후에 이벤트가 발행되진 않는다.​Spring에서 제공하는 transaction의 begin()과 end()의 범위와 kafka 트랜잭션의 범위를 관리해야한다.​​Spring Kafka에서 트랜잭션 처리중요한건, 트랜잭션의 관리이다. 별표 25개​​  프로젝트 githubhttps://github.com/downfa11/kafka-querydsl GitHub - downfa11/kafka-concurrency: kafka 트랜잭션 관리와 Redisson 분산 락 처리kafka 트랜잭션 관리와 Redisson 분산 락 처리. Contribute to downfa11/kafka-concurrency develo..
토이프로젝트 - Apache Kafka 성능 비교
·
kafka
​Apeche Kafka와 queryDSL 실습을 통해서 좀 더 손에 익도록 연습하기 위해 준비한 공부용 프로젝트 ​https://github.com/downfa11/kafka-concurrency GitHub - downfa11/kafka-concurrency: kafka 트랜잭션 관리와 Redisson 분산 락 처리kafka 트랜잭션 관리와 Redisson 분산 락 처리. Contribute to downfa11/kafka-concurrency development by creating an account on GitHub.github.com  순전히 Kafka 사용을 위해 준비한 프로젝트로 전혀 비즈니스용이 아님을 알린다docker-compose로 Zookeeper, Kafka, kafka-ui, ..
우당탕탕 C++로 Apache Kafka 통신하기 (rdkafka, modern-cpp-kafka)
·
kafka
librdkafka 라이브러리를 통해서 Windows 환경에서 C++로 Apache Kafka를 사용하고자 했다.백엔드로 구축한 로비 서버와 dedicated 서버간의 통신하기 위한 메세징 큐로 뛰어난 성능의 이벤트 브로커인 Kafka를 채택했었다.​IO Completion Port로 윈도우 환경에서 비동기, Non-Blocking IO 통신을 구축한 게임 서버와 통신해야할 로비 서버도 역시 블로킹 동작을 막기 위해서 Spring Webflux로 Netty 기반의 비동기 Non-Blocking IO를 구현했다.​서버간의 IPC 역시 블로킹 작업이 이뤄지면 오히려 일반적인 구조의 서버보다 느려지기 때문에 비동기로 이뤄져야한다!!순전히 흥미본위로 시작한 기술 프로젝트에 가깝지만, 너무 어려워도 재밌다.​​m..
kubernetes 환경에서 Apache Kafka cluster를 구성해보자 (Operator 패턴)
·
kubernetes
Kubernetes 환경에서 Apache Kafka cluster 구성하기​생각해보니 정작 Kafka에 대한 소개를 한 적 없이 그동안 블로그에 썼다는 언급만 계속 해왔다.조만간 자세한 내용을 정리해서 올리겠음​​​​Apache Kafka on Kubernetes - strimzi OperatorKafka를 Strimzi operator를 사용해서 운영하는 방법을 찾아서, Helm으로 Apache kafka를 구성해봤다​https://strimzi.io/​ 왜 Strimzi은 Operator 패턴으로 Kafka를 배포하는가?Operator 패턴이 Kafka Cluster를 배포하기 편리하게 구성Kafka의 가용성 확보에 필요한 Zookeeper 또한 Operator가 관리해준다는 편리함Kafka Brid..