플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료

4,463
-1

Published on

Published in: Technology
2 Comments
47 Likes
Statistics
Notes
No Downloads
Views
Total Views
4,463
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
2
Likes
47
Embeds 0
No embeds

No notes for slide

플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료

  1. 1. Workflow 기반 실시간 스트리밍 데이터 수집/분석 플랫폼 최규민 2013.11.6
  2. 2. About Us 아프리카TV(2012~)- 실시간 대용량 데이터처리시스템 개 발을 위한 데이터수집 / 데이터 마이닝 / 대용량 메시징 시스 템 설계 및 개발업무를 담당 플러스기술(2004~) - 대용량의 네트워크 트래픽 수집 및 분 석/분류 시스템 개발 시앤시인스트루먼(1999~) – LAN/WLAN 프로토콜 분석 시 스템 개발 goodvc@afreeca.com or goodvc78@gmail.com
  3. 3. Word Cloud
  4. 4. 발표의 순서 10% 20% 구현 기술 소개 70%
  5. 5. Workflow 기반 실시간 스트리밍 데이터 수집/분석 이란?
  6. 6. 설문조사를 하겠습니다. 1. 각자 스마트 꺼내 주세요. 2. 아래 접속해 주세요 왜 해야 하는지 모르시겠다구요? http://p2013.afreeca.com
  7. 7. 5. 경품이 있습니다. 최고급 모자 http://p2013.afreeca.com
  8. 8. 4명에게 드립니다. 각 투표자 별로 당첨자가 있습니다. http://p2013.afreeca.com
  9. 9. 투표를 시작해 주세요 http://p2013.afreeca.com
  10. 10. 어떻게 구현 되었을까요?
  11. 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으로 데이터 즉시 반영합니다.
  12. 12. 사용자가 적으면?
  13. 13. 사용자가 많으면? 대량의 데이터 수집 / 실시간 데이터 처리 / 분산 환경
  14. 14. 수집 FaceBook Twitter 전달 적재 배치 실시간 source: http://citizentekk.com/2013/10/09/facebook-vs-twitter-real-time-analytics
  15. 15. 아프리카TV는 왜?
  16. 16. 우선 데이터가 많아서 필요합니다. 방송생성 : 10만건/일 방문자수: 300만/일 방송 시청(입장/퇴장) : 4000만/일 유저 활동(좋아요,아이템,즐겨찾기 등) : ?? / day 방송 채팅 : 아주 많아요~~~
  17. 17. 실시간 방송 랭킹 실시간 모바일 Push Live 방송 추천 방송할 때 할 일도 많아요 방송 완료 후 아카이브 방송 상세 분석
  18. 18. 이런 일을 할려면?? 안정성 Failover coordinator 확장성 Scale-out Load-balancing 범용성 Workflow 기반 데이터 처리 c/c++,java,php client language
  19. 19. 1차 시스템 설계 : 알고 있는 시스템으로 조합해 보자
  20. 20. 1차 개발 시스템 구성도 처리 결과, 에러 HOST3 HOST1 Flow-Agentⓕ job1 Collectorⓕ B MQ Collector c3 Namespace ‘B’ 요청 MQ-Broker는 Routing 방식으로 설정 job2 RMQ-Sink HOST5 클러스터링 c2 MQ Sink exec API 지원데몬 : Access-log를 통한 수집 FO : 지원 LB : 미지원 Failover 시 메시지 Loss 발생 (초당 100건 전송시 3건 정도) Collector HOST2 FO : 미지원 (reconnect로 구현) LB : 미지원 Collectorⓕ af3 A FO : 미지원 (reconnect로구현) LB : 미지원 메시지 HOST4 Flow-Agentⓕ Namespace ‘A’ 요청 exec c1 HOST6 Job ⓕ MQ API 지원데몬? Collectorⓕ Collector af1 Sink Scribe network ap1 Scribe Log-Agent : mysql pcap MQ-Broker
  21. 21. 2차 개발 설계 중복제거 : Flume ≒ scribe ≒ MQ 그래서 MQ
  22. 22. 음 조끔 심플해 졌네~~ 처리 결과, 에러 host1 Namespace ‘A’ 요청 exec MQ-sink nework A job1 메시지 Svlxextr3 host2 Log-Agent MQ-sink exec af3 FO : 미지원 (reconnect로구현) LB : 미지원 클러스터링 Namespace ‘B’ 요청 job2 Svlxextr4 B FO : 미지원(reconnect로구현) LB : 미지원 RMQ-Sink Log-Agent : mysql pcap ap1 host3 MQ-Broker `
  23. 23. 3차 개발 설계 Failover/LB는 어떻게? 기존 서비스 = L4/DNS 신규 개발 부분 = zookeeper+workflow-lib
  24. 24. L4/DNS + Zookeeper/Workflow-Lib Agent-Tier Collect-Tier 서비스 적용 Workflow-Tier ActiveMQ-Cluster (Collector-API) Workflow-Lib (c/c++, java, php) NGINX / UDP 서비스 적용 (UDP-socket) MySQL-UDF NGINX / UDP (Trigger 등록) File-append AMQ Connector Broker Failover L4 Failover, LB (collector-Tier) Broker ExeStreamer (tail-f등) PcapStreamer MQB Z Coordinator연동 NGINX / UDP Broker Status-Update (Network packet) Observer Observer Coordinator : zookeeper (Failover, Datapipeline, Sharding) Observer
  25. 25. 실제 개발해보니
  26. 26. 큰그림 Agent-Tier Agent-Tier Agent-Tier ①전송 Collect-Tier Que1 ③수신 ②전달 ④전송 ⑤전달 ⑥수신 ZK 등록 Que2 ZK 등록 Zookeeper Workflow1 In: que1 Out:que2 Workflow2 In: que2 Out:-
  27. 27. 데이터 수집 [Agent-Tier] 데이터 전달 [Collect-Tier] 데이터 처리 [WorkflowTier] 좀더 상세히 알아 봅시다.
  28. 28. 데이터 수집 [Agent-Tier] 데이터 [Collec
  29. 29. 추가 개발? 연동 방식 ? 데이터 포멧? 데이터 수집 [Agent-Tier] 환경이 틀림? 개발 기간? 서비스 영향?
  30. 30. 저희의 선택은 데이터에 맞추어 수집 방식을 선택하자
  31. 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. 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
  33. 33. Collector-API 지금까지 해 온대로 만드시면 됩니다.
  34. 34. UDP-Socket 방식 100% 수신Ⅹ 서비스 영향Ⅹ 데이터 재조합 연결 비용 ↓ 시리얼라이제이션 성능↑ MTU=1500
  35. 35. 네트워크 패킷 수집 방식(Pcapstreamer) 서비스 영향Ⅹ Agent설치 Ⅹ 서비스 변경 Ⅹ Afreeca WebServers pcapstreamer #1 … L4 Packet Mirroring 인터넷 Client-PC pcapstreamer #N 데이터 유실가능 Raw Packet 미러 환경구성 Libpcap, winpcap
  36. 36. MySQL UDF(FileWritter) Agent설치 Ⅹ 서비스 변경 Ⅹ DB Rep. Table 의존성 DB [Trigger등록] Collector File-append 변경내역 file tail Exestreamer AMQ
  37. 37. AfreecaTV에서 이렇게 수집해요 DB데이터 서비스 API 대량 전송 네트워크 패킷수집 • MySQL-UDF : 방송시작, 종료 등 • Collector-API : 별풍선, 추천, 로그인 등 • UDP-socket : 방송시청 시작/종료, 채팅 등 • PcapStreamer : 검색어 관련 등
  38. 38. 수집 -Tier] 데이터 전달 [Collect-Tier] 데이터 [Workflo
  39. 39. Message Queue Architecture 적용 Source=https://confluence.pegasus.isi.edu/display/stampede/Message+Queue+Architecture
  40. 40. “닮은꼴 설문조사” Message Queue 적용 투표 vote.rawdata 실시간 처리 vote.rt.log 5초 Term 처리 vote.rt.match vote.term.5sec vote.rt.rank 결과 출력 HDFS저장
  41. 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. 42. Message Queue 선택 1. 2. 3. 4. 5. Queue / Topic 지원 Dynamic한 데이터 파이프의 추가/변경/삭제 다양한 client language지원(c/c++, java, php) Broker 클러스터 지원 (complete graph network topology) 중단 없는 클러스터 확장
  43. 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대
  44. 44. ActiveMQ가 최선입니까? Message Routi
  45. 45. ActiveMQ의 Message Routing 방식 Broker Cluster B1 C1 P1 B2 B3 Sending Queue C2 Prefatch Queue Pending Queue 메시지의 수신과 처리를 비동기로 처리함
  46. 46. ActiveMQ의 Message Routing Broker Cluster B1 C1 P1 B2 B3 Sending Queue C2 Prefatch Queue Pending Queue
  47. 47. ActiveMQ의 Message Routing. Broker Cluster B1 C1 P1 B2 B3 Sending Queue C2 Prefatch Queue Pending Queue
  48. 48. ActiveMQ의 Message Routing. Broker Cluster B1 C1 P1 B2 B3 Sending Queue C2 Prefatch Queue Pending Queue
  49. 49. ActiveMQ의 Message Routing. Broker Cluster B1 C1 P1 B2 B3 Sending Queue C2 Prefatch Queue Pending Queue 이런 큐는 미 처리된 메시지로 인해 발생하는 Wait-Time 을 줄이기 위함 (pending queue=2.5*prefatch)
  50. 50. ActiveMQ의 Message Routing. Broker Cluster B1 C1 P1 B2 B3 Sending Queue C2 Prefatch Queue Pending Queue 예외로 메시지 당 처리시간이 긴 경우는 prefatch size=0
  51. 51. ActiveMQ의 Message Routing. Broker Cluster B1 C1 P1 B2 B3 Sending Queue C2 Prefatch Queue Pending Queue 예외로 메시지 당 처리시간이 긴 경우는 prefatch size=0
  52. 52. Slow consumer C1 fast P1 slow C2 Pending queue 적재량이 늘어남 Slow consumer발생 시 : 16k/sec  7k/sec
  53. 53. Pending Queue Size Monitoring P1 C1
  54. 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
  55. 55. ActiveMQ cluster topology B1 B2 B3 B3 B4 B2 B4 B5 MESH B7 B8 B6 B1 B7 B9 RING B6 B1 B3 B4 B2 B5 B3 B6 TREE B7 B5 B8 B2 B10 B9 B4 Graph B7 B5
  56. 56. ActiveMQ cluster topology : multicast를 이용한 complete graph 방식 B1 P1 C1 B5 B2 P2 C2 B3 P3 B4 C3
  57. 57. 일반적인 메시지 전달 B1 P1 idle P2 B3 normal B4 C3
  58. 58. P2의 데이터가 일시적으로 급증하면? B1 P1 idle P2 B3 busy B4 C3
  59. 59. P2의 데이터가 일시적으로 급증하면? 장애 B1 P1 P2 B3 B4 C3
  60. 60. P2의 데이터가 일시적으로 급증하면? 장애 B1 P1 P2 B3 장애 B4 장애 C3
  61. 61. 그래서 Cluster topology를 재구성 했습니다. 라우팅을 최소화, 명료화 하도록
  62. 62. ActiveMQ cluster topology : zookeeper 기반 cluster topology를 직집 구성 파티션 P1 B1 B2 P2 B1 B2 P3 B1 B2 C1 C2
  63. 63. 채팅과 같은 아주 큰 대용량은 직접전송을 채택 파티션 P1 B1 B2 UDP Thrift ZeroMQ 프로토콜 버퍼 C1
  64. 64. ActiveMQ가 최선입니까? Not Bad.. but, 향후 Messaging/Broker Layer를 추상화하여 좀더 심플한 Producer-Consumer 모델을 적용.
  65. 65. 전달 -Tier] 데이터 처리 [Workflow-Tier]
  66. 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. 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”); } }
  68. 68. Workflow 구현 사례
  69. 69. 아프리카TV 검색어 분석 workflow 검색어 수집 afreeca.search.raw 배치 동기화 formatter formatter formatter Afreeca.alarm afreeca.search.formatted Search Search Search Rank Rank Rank Related Search HDFS Appender
  70. 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. 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)
  72. 72. BJ 추천 하기( item based similarity )
  73. 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. 74. 결론 - 데이터 수집은 서비스에 맞는 적절한 방식을 선택 - MQ기반의 데이터 처리 시스템 괜찮다. - Messaging Layer의 선택과 튜닝은 중요하며, Messaging Layer를 plugin 지원하는 것 고려
  75. 75. Q&A goodvc@afreeca.com or goodvc78@gmail.com

×