Axon와 Kafka는 어떻게 다른가?
·
backend
작업하는 프로젝트에서 CQRS 패턴을 이용하고자 EDA를 고민하던 차에, Axon Server를 두지 않고 기존에 운용하던 Kafka를 통해 이벤트를 전달하도록 하기 위해 axon-kafka를 공부했다. ​Axon Server는 메시지 브로커로 CQRS 패턴이나 이벤트 소싱 기반 아키텍처 구현을 지원하는 플랫폼이다. 얼핏 보면 Kafka와 비슷한 역할로 보이는데, 이벤트 소싱(Event Sourcing)을 중심으로 알아보자.​Event-Driven Architecture이벤트 생성 및 처리를 중심으로 애플리케이션 구축을 지지한다. 이는 주로 실시간, 분산 및 확장성에서 반응성이 있어야 하는 최신 서비스에 따라 주도되어 왔다.​ Event SourcingDDD(Domain-Driven Design)에서 시..
토이프로젝트 - IOCP 서버와 유니티 클라이언트 구현(winsock2, cpp)
·
windows
네트워크 수업 자유 주제 과제로 IOCP 서버에 유니티 연동해서 클라이언트 구현함.아무래도 과제용이니까.. 대부분의 기능을 쳐냈음그래서 Accept 도 동기로 처리하고.. 패킷 처리도 엉성하고.. ​Unity3d 와 연동하는 자료는 찾아도 안나오니 공부하는데 참고만 하길 바람니당 ​​유니티 클라이언트에서는 해당 dummy들의 좌표 이동을 시각화해서 볼 수 있고 채팅 가능함server/client 디렉토리의 client.cpp : dummy를 N(defined)개 서버에 접속시키고 매 초당 무작위로 이동 (x,y : -1,1)유니티 클라이언트에서 시각화할때 유의미한 결과를 보여주기 위해서 제공한 기능/client 디렉토리는 unity project : 그냥 유니티의 tcpClient로 접속해서 cpp와 c..
IOCP(IO Completion Port) 쉽게 이해하기
·
windows
IOCP(IO Completion Port) 란?Windows 운영체제에서 제공하는 비동기 I/O 처리 모델게임 서버에서 사용해서 착각하는데, 소켓 네트워크 기술이 아니라 이벤트 기반 I/O 처리 방법론이다.​Linux는 소켓을 파일 디스크립터로 동일시하는 반면, 윈도우는 별개로 구분한다.​IOCP = Overlapped IO + ThreadPool + Completion Queue​​중첩 입출력(Overlapped I/O)비동기 I/O 작업을 가능하게 하는 Windows 기술I/O처리 요청을 스레드가 디바이스 드라이버에 위임하고 I/O작업 종료까지 해당 스레드는 다른 작업을 수행device driver가 IO 작업을 처리하고, 완료되면 이벤트 객체를 통해 전달IO 요청한 쓰레드가 이벤트를 확인하고 결과..
토이프로젝트 - winsock으로 구현한 프록시 서버(winsock2, cpp)
·
windows
학교 과제로 했던거다.   webserver.cpp와 동일한 경로에 main.html 파일이 있어야한다. main.html의 내용은 다음과 같다.​각 서버의 IP 주소는 sockAddr.sin_addr.s_addr = INADDR_ANY; 를 통해서 어떤 네트워크 인터페이스에도 바인딩하지 않음으로서 현재 사용 가능한 모든 네트워크 인터페이스에서 들어오는 연결을 수락한다. 우리는 localhost(127.0.0.1)로 접속할거임 웹서버의 포트(Port) : 8080프록시 서버의 포트(Port) : 80​ 1. 웹서버를 구동한 뒤, 원하는 브라우저에 들어가서 https://localhost:8080/main.html 으로 접속하면 성공적으로 main.html을 표시​ 2. 사용자는 포트(Port) 80번의 ..
IOCP GetQueuedCompletionStatus, CreateloCompletionPort 함수의 변경점
·
windows
어쩐지 공부하던거랑 다르더라....자꾸 오류뜨길래 무시했는데 알고보니 최신 SDK에서 함수들의 인자 타입이 변경되었다. 최신... 이라 해봤자 한참 옛날이지만ㅜ​  GetQueuedCompletionStatus 같은 경우에 LPDWORD 인자를 PULONG_PTR로 변환해야함  그외에도 CreateloCompletionPort, GetQueuedCompletionStatus의 새 버전인 GetQueuedCompletionStatusEx도 있다.​난 왜 이제 알았는가   https://learn.microsoft.com/ko-kr/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatus GetQueuedCompletionStatus 함수(ioapi..
게임서버 매치메이킹 구현과 기술 세미나 발표
·
windows
작년 초 발표한 내용대략 이런 주제로 연합 동아리 기술 세미나, 테크톡에 참가했음 근데 발표시간 10분 제한이라.. 가볍게 듣고 넘어갈 수 있는 '매치메이킹'을 주제로 발표함​​​어떤 사용자들끼리 매칭시켜줘야할까?되도록 비슷한 실력의 유저를 짝지어줘야하는데, 짝지어주는건 고사하고 도대체 어떻게 사용자들의 실력을 측정함..?? 이런 문제는 컴퓨터 발명 이전부터 계속되어 왔다. 체스나 여타 보드게임 대회 등에서 볼 수 있는 방법으로 사용자들의 실력을 수치화해서 비교하는 방법이 있다.​실력점수(MatchMakingRating) : 초기값은 모두 동일한 시작 점수로 시작해서 이기면 점수를 따고, 지면 점수를 잃는 과정속에서 MMR을 업데이트하면서 실력에 맞는 점수대로 수렴하는 원리로 승률을 예측한다.​​Elo ..
토이프로젝트 - 트랜잭션 관리를 통한 베타락(Exclusive Lock) 구현
·
backend
트랜잭션(transaction)의 관리격리성(Isolation) : 일련의 트랜잭션을 작업 중에는 다른 트랜잭션의 연산 작업이 끼어들지 못하게 격리시킨다.동시에 공유 리소스에 접근시 독립성을 유지하기 위해 대기한다.​​트랜잭션의 isolation level 상승@Transactional(isolation= isolation.SERIALIZABLE)트랜잭션 내에서 선택(select)된 리소스는 공유 잠금(write제한)된다. 성능적으로 동시처리 성능이 가장 나지만 단순하고 가장 엄격한 관리 수준​SERIALIZABLE 만 해둔다면 쓰기 작업은 안되겠지만 읽기 작업이 동시에 가능하기에 비즈니스 로직에서는 잘 고려해야한다.​​트랜잭션 격리 수준의 종류repatable-Read(default) : 조회하는 데이..
토이프로젝트 - Redis를 이용한 분산 락(Distributed Lock)
·
backend
Database Lock은 Lock 획득을 위해 대기하는 connection을 증가시켜서 부하를 준다.​Java의 synchronized나 ReentrantLock을 사용하여 애플리케이션 수준에서의 동시성 제어도 가능하겠지만, 우리는 트랜잭션 관리나 분산 락 구현을 통해 해결할 것이다.​​데이터베이스의 Lock 전략1. 낙관적 잠금 : 충돌이 감지되면 그때 처리하자!JPA의 @Version 어노테이션을 사용하여 엔티티의 버전을 관리하고, 업데이트 시 버전을 체크하여 충돌을 방지할 수 있다충돌 안나면 처리 성능이 좋지만, 충돌이 빈번한 경우 오히려 비용이 크다.다른 트랜잭션의 접근을 제어하지 않기에 동시성이 높지만 충돌을 방지하지 못한다.충돌시 롤백 처리를 구현해야한다Table의 @Version 이나 Ti..
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
부제 : Kafka에서 이제 Zookeeper가 필요 없어졌다고...???​네?????/​​Apache Kafka 2.8.0 출시 이후로 Zookeeper에 대한 의존성이 점차 제거되고 있다.​다만 3.3.1 릴리즈부터 시작해서 4.0 부터 Zookeeper가 제거될 예정이라고 한다.​올해 안에 완성된다는데 4.0 출시까지 얼마 남지 않았다.​곧 Kafka 내부에서 메타데이터를 저장하고 관리한단다.젠장 지금 릴리즈 3.7까지 나왔고 난 3.3 쓰고 있는데 몰랐다​​Zookeeper-less Kafkazookeeper와 kafka라는 두 개의 분산 시스템을 관리하니 더 힘들고 작업을 중복해서 수행하게 된다.​https:/ /cwiki.apache.org/confluence/display/KAFKA/KIP-..
토이프로젝트 - 메시지 송수신간의 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..