2. About Us
아프리카TV(2012~)- 실시간 대용량 데이터처리시스템 개
발을 위한 데이터수집 / 데이터 마이닝 / 대용량 메시징 시스
템 설계 및 개발업무를 담당
플러스기술(2004~) - 대용량의 네트워크 트래픽 수집 및 분
석/분류 시스템 개발
시앤시인스트루먼(1999~) – LAN/WLAN 프로토콜 분석 시
스템 개발
goodvc@afreeca.com or goodvc78@gmail.com
11. 1.
2.
3.
4.
5.
투표
데이터를 저장하고
투표를 집계하고
경품 당첨자인지 확인하고
기타 내역을 분석해서
출력할 데이터를 전달합니다.
데이터
수집
http://collector.afreecatv.com/push_api.php?
ns=vote.rawdata
& id=1
& subject=vote
& vote=1
& ip=127.0.0.1
& ua=ie23
데이터
처리
서비스
제공
Long-polling으로
데이터 즉시 반영합니다.
31. 다양한 구간에서 데이터 수집
WebServer
L4
Traffic
Mirroring
DBMS
MySQL-UDF
Network
Packet
서데
비이
스터
영유
향실
가
능
Ⅹ
서서데
비비이
스스터
변영유
경향실
가추
능출
Exestreamer
(tail )
Collector
API
∙
∙
UDP
∙Raw Packet
∙
∙
Ⅹ
∙
Ⅹ
데
이
터
위
변
조
PcapStreamer
변경된
내역
Exestreamer
(tail )
Collector
API
Accesslog
Collector-Tier
JDBC
32. 다양한 구간에서 데이터 수집
WebServer
L4
Traffic
Mirroring
DBMS
MySQL-UDF
Network
Packet
Accesslog
변경된
내역
다양한 방식을 통해
적절한 방법 선택
Exestreamer
(tail )
UDP
서데
비이
스터
영유
향실
가
능
Ⅹ
서서데
비비이
스스터
변영유
경향실
가추
능출
Collector
API
∙
∙
데
이
터
위
변
조
PcapStreamer
∙Raw Packet
∙
∙
Ⅹ
∙
Ⅹ
Collector
API
Collector-Tier
Exestreamer
(tail )
JDBC
35. 네트워크 패킷 수집 방식(Pcapstreamer)
서비스 영향Ⅹ
Agent설치 Ⅹ
서비스 변경 Ⅹ
Afreeca
WebServers
pcapstreamer
#1
…
L4
Packet
Mirroring
인터넷
Client-PC
pcapstreamer
#N
데이터 유실가능
Raw Packet
미러 환경구성
Libpcap, winpcap
37. AfreecaTV에서 이렇게 수집해요
DB데이터
서비스 API
대량 전송
네트워크 패킷수집
• MySQL-UDF : 방송시작, 종료 등
• Collector-API : 별풍선, 추천, 로그인 등
• UDP-socket : 방송시청 시작/종료, 채팅 등
• PcapStreamer : 검색어 관련 등
39. Message Queue Architecture 적용
Source=https://confluence.pegasus.isi.edu/display/stampede/Message+Queue+Architecture
40. “닮은꼴 설문조사” Message Queue 적용
투표
vote.rawdata
실시간
처리
vote.rt.log
5초 Term
처리
vote.rt.match
vote.term.5sec
vote.rt.rank
결과
출력
HDFS저장
41. “닮은꼴 설문조사” Message Queue 적용
투표
vote.rawdata
실시간
처리
vote.rt.log
5초 Term
처리
vote.rt.match
vote.term.5sec
vote.rt.rank
결과
출력
HDFS저장
vote.term.1hour
1시간
Term 처리
42. Message Queue 선택
1.
2.
3.
4.
5.
Queue / Topic 지원
Dynamic한 데이터 파이프의 추가/변경/삭제
다양한 client language지원(c/c++, java, php)
Broker 클러스터 지원 (complete graph network topology)
중단 없는 클러스터 확장
43. ActiveMQ에 대하여 좀더 알아 봅시다.
다양한
Client language
& Protocol 지원
Java 기반
2013.10.21
5.9.0 released Multicast방식 cluster topology 지원
ActiveMQ vs RabbitMQ 성능 비교
12,000
10,000
Producer
1대
8,000
Broker
1대
ActiveMQ
6,000
전송 시간(초)
RabbitMQ
4,000
전송 시간(초)
2,000
110
1k
10k
100k
1M
설정값(기본): queue방식,
durable=false,
theard=1,
transacted=false,
ack-mode=auto
Consumer
1대
54. ActiveMQ 이슈
1. Consumer, Producer connection은 분리(stomp)
2. jvm maxium heap size에 따른 최대 pending
queue size.
JVM Memory 설정
최대 queue 적재량
메시지 사이즈
2G
210만 건
80bytes
4G
450만 건
80bytes
16G
11,20만 건
80bytes
66. Workflow Lib( C/C++, JAVA, PHP)
Workflow 라이브러리가 지원하는 method
open()
ZK, AMQ 연결
run()
close()
Message Listener등록
Watch 등록
onMessage(msg)
send()
Producer 등록
AMQ로 메시지 전송
AMQ, ZK 연결해제
67. Workflow 구현 샘플 코드
void main(String[] args) throws Exception
{
_wf = new PartitionWorkflow();
HashMap<String, Object> config = new HashMap<String, Object>();
config.put(Workflow.ARGS_ZOOKEEPER_URI,“host1:2181,host2:2181,host3:2181" );
config.put(Workflow.ARGS_WORKFLOW_NAME,"_Demo_Vote" );
config.put(Resource.AMQ_SOURCE_LISTENER, new PartitionListener());
config.put(Workflow.ARGS_PARTITION_NAME, "AfGameCenter" );
_wf.open(config);
_wf.run();
waitForKeyPress();
_wf.close();
}
class PartitionListener implements CollectorListener{
@Override
synchronized public void onMessage(CollectorMessage message) throws Exception {
processRTLog(message.body);
proectRTRank(message.body)
processRTFilter(message.body );
send(“hello”);
}
}
70. Connection-pooling & bulk-insert 로 활용
: mysql_insert, redis_pipe, hdfs_appender
INSERT INTO `log_tb`
INSERT INTO
VALUES (‘log1‘)`log_tb`
INSERT INTO
VALUES (‘log1‘)`log_tb`
VALUES (‘log1‘)
Mysql_insert
INSERT INTO `log_tb`
VALUES (‘log1‘, ‘log2’, log3)
방송시청 로그
Uid/bjid/시청시간
hset( foo,bar3,2)
hset( foo,bar2,3)
VALUES (‘log1‘)
VALUES (‘log1‘)
hset( foo,bar13,4)
Redis_pipe
Hmset( foo, bar1,1,bar,2,bar3)
방송시청 로그
Uid/bjid/시청시간
Update 구문은 사용할 수 없음(sequence보장안됨)
71. BJ 추천 하기( item based similarity )
방송 시청
퇴장
방송 시청
진입
DW.stream.AF.CIN
DW.stream.AF.COUT
combiner
DW.stream.AF.VIEW
HDFS
Append
방송시청 로그
Uid/bjid/시청시간
BJ-Clustering
MR
BJ-Similarity 측정
MR
결과 저장
(Redis)
73. 대용량 메시지 플랫폼
: 모바일 Push & 메시지 읽기/저장
Message.one
classifier
Msg
classifier
Sender
Push.gcm
classifier
GCM
classifier
Push
Message.request
메시지 전송
요청 API
classifier
classifier
classifier
Message.group
메시지 읽기
API
classifier
Msg
classifier
Sender
REDISREDISREDISStorage
Storage
Storage
Push.apns
DeviceToken
DB 동기화
classifier
APNS
classifier
Push
74. 결론
- 데이터 수집은 서비스에 맞는 적절한 방식을 선택
- MQ기반의 데이터 처리 시스템 괜찮다.
- Messaging Layer의 선택과 튜닝은 중요하며,
Messaging Layer를 plugin 지원하는 것 고려