SlideShare a Scribd company logo
Blizzard Entertainment
전이삭
- 해시, 불변데이터, 확률적 자료구조
게임 서비스 플랫폼을 지탱하는 알고리즘
“억! 소리나는”
주의사항
• 본 발표에서 다루는 모든 내용들, 생각, 의견, 관점은 어디까지나
개인적인 견해이며 제가 일하고 있는 회사의 공식적인 입장과는 아무런
관련이 없습니다.
• 특정 제품, 기술, 회사, 개인에 대한 언급 역시 회사의 입장이 아닌
개인적인 견해일 뿐 제가 일하고 있는 회사의 업무와는 무관합니다.
Disclaimer
• Views, thoughts and opinions expressed in this presentation is my own and are not
endorsed by my employer.
• Mention of any products/technologies/companies/individuals/etc. does not equals an
endorsement.
게임 서비스 플랫폼
• 게임 클라이언트 배포
• 게임 서버 플랫폼
• 인증 / 결제 / 보안
• 서비스 상태 모니터링 및 실시간 관제
• 서비스 관련 데이터 수집 및 분석/예측/경고
• 소셜 네트워킹 서비스
• 기계학습 활용 서비스
오늘 살펴볼 내용들
• Hash function / Immutable Data / Content Addressable Storage
• Bloom Filter
• Monoid
• Introduction to Probabilistic Data Structure
 HyperLogLog
 MinHash
 Locality Sensitive Hash
Basic Concepts
• Hash function
• Immutable Data
• Content Addressable Storage
Hash function 해시 함수
• 데이터 축약
• Unbounded data -> Bounded data
• 비가역성 - Irreversible
• Collision
 균일한 결과값 분포 - Uniform distribution
 눈사태 효과 - Avalanche effect
Immutable Data 불변 데이터
• 한번 생성된 데이터의 내용은 소멸 될 때 까지 불변
• 같은 이름의 데이터는 내용도 같다는 것을 보장
• 쉬운 복제 / 쉬운 비교 / 쉬운 캐싱
• 쉬운 분산처리
https://lh3.googleusercontent.com/pysputXX7S0-
bAHmNfWIzP988Sju3vBzcBHHWDY-
gSfXiAcY7V_rNUVYNkYl5srWvZ0MHYalieNgeSTc1f
MobbBev_uT-YIBLGS_lpUj-6Xe58N-
p_8LyXqEpcziPoRbgvf5ySLPFEuP7o6aZcZKJ7EWuJ
8j_zKPscaqG5zzgWHndZlFH89SurmNZpcRvcw1jny
oxdY5xZio0vjrc0BpDHQVANKolrygOc5xNqHlvZvLd
pjFotibNY1d3lA3uTUcZExxgTQ12HbTdKiROrnZmjai
LHt8mc5lY7DU_pDsqOGk4OIi_HHMaK-
Afdnlilcld97az0weDNDQRWCOdPFsOtP-
Zzt0gll3LbFelRbZgNhtyBdhVAbytpCWDJYAQHWH3
puW1Qbp02nXyZP3GLO4s_So07BlZ-o-S4bjiRsz-
Wo7bEMRJNdEl6ePj8jN03BPGFjxlTKituJR_SzrsOgTi
_wffa1B18cj09UEMtMLHQ_shNEzGYLr6puBHZ7708
Fyd6U87QGpA7LdGCVRDzoyuezgJg4unxqGEmTPIv
R8PYzgSWYrHYkqjSWJH9DVbL0Ac9rxNwRfUvowWj
lFHnuKdQE552vSNazJuXwGh753=w386-h217-no
Google Photos
Content Addressable Storage
• 컨텐츠의 checksum / hash value를 id / key로 사용
• 주로 Immutable data를 사용
• 데이터의 위치가 아닌 컨텐츠를 쿼리 가능한 key로 구분
• Hierarchy 또는 catalog는 별도의 자료구조로 표현
• 내부적으로만 사용
• location of the actual data is unknown to users
• Flexible, durable, and distributable
초 대용량 분산 스토리지
NoSQL
SQL 절대 아님 Filter 절대 아님
어떻게 빠르게 저장할 것인가?
• 메모리는 빠르고 비싸다.
• 디스크는 느리고 싸다.
• I/O는 많이 비싸다.
• 순차적 쓰기는 그래도 꽤
빠르다.
• 읽기/쓰기가 동시에 일어나면
상당히 많이 느리다.
Bloom Filter
A Bloom filter is a space-efficient probabilistic data structure, conceived by
Burton Howard Bloom in 1970, that is used to test whether an element is a
member of a set. False positive matches are possible, but false negatives are not –
in other words, a query returns either "possibly in set" or "definitely not in set".
Elements can be added to the set, but not removed (though this can be addressed
with a "counting" filter); the more elements that are added to the set, the larger the
probability of false positives. - https://en.wikipedia.org/wiki/Bloom_filter
Bloom Filter
• space-efficient probabilistic data structure
• False positive matches are possible, but false negatives are not
• possibly in set / definitely not in set
• How?
0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00
0 0 0 00 1 0 0 00 1 0 0 00 0 1 0 00
Welcome
0 1 0 00 1 0 0 01 1 1 0 00 0 1 0 00
Welcome NDC
0 1 1 00 1 0 0 11 1 1 0 00 0 1 0 00
Welcome NDC 2018
0 1 1 00 1 0 0 11 1 1 0 00 0 1 0 00
Welcome NDC 2018
2019 Definitely not there
0 1 1 00 1 0 0 11 1 1 0 00 0 1 0 00
Welcome NDC 2018
Hello Maybe there
0 1 1 00 1 0 0 11 1 1 0 00 0 1 0 00
Welcome NDC 2018
0 1 1 00 1 1 0 11 1 1 0 10 0 1 0 00
Welcome NDC 2018 Nexon
0 1 1 00 1 1 0 11 1 1 1 11 0 1 0 10
Welcome NDC 2018 Nexon Developer
0 1 1 00 1 1 0 11 1 1 1 11 0 1 0 10
Welcome NDC 2018 Nexon Developer
Conference Maybe there
Bloom Filter
• 추가 또는 검색만 가능 +
• 검색 결과 - 없다면 진짜로 없다 - 𝑂(𝑘)
• 추가 동작, 검색 동작, time/space complexity 모두: 𝑂(𝑘)
• 튜닝가능
 해시 함수의 수, 해시 테이블 크기를 조정해서 FP의 확률을 조절
 메모리 사용량과 I/O 접근의 비율을 조절할 수 있음
• 활용: 화이트/블랙 리스트, 웹 캐시, 분산DB 등
• 확률적 자료구조
• 유사한 알고리즘: Count-Min Sketch *
Distributed System & Monoid
… 4 3
10
2 1
… 10 8
24
4 2
… 7 5
16
3 1
34
50
Sum Aggregation
• 이항연산 - 𝑀⊗𝑀
• 결합법칙 - 𝑎 ∙ 𝑏 ∙ 𝑐 = (𝑎 ∙ 𝑏) ∙ 𝑐
• 항등원의 존재 - 𝑖 ∙ 𝑎 = 𝑎 ∙ 𝑖 = 𝑎
• 이항연산 - 𝑀⊗𝑀
• 결합법칙 - 𝑎 ∙ 𝑏 ∙ 𝑐 = (𝑎 ∙ 𝑏) ∙ 𝑐
• 항등원의 존재 - 𝑖 ∙ 𝑎 = 𝑎 ∙ 𝑖 = 𝑎
• 교환법칙 - 𝑎 ∙ 𝑏 = 𝑏 ∙ 𝑎
Commutative
… 2 3
4
1
… 4 8
10
2
… 1
7
3 5
10
10
4
10
7
Max Aggregation
… x z
?
q a
… z d
?
b x
… f q
?
c d
?
aqzx
xbdz
dcqf
Counting Unique Visitors
• 카운팅 테이블의 사이즈가 크다
• 공유 데이터가 필요하므로 분산처리가 어려움
분산 노드의 UV 합산
어려운 문제 – 발상의 전환!
정확도를 2%만 희생하면 어떨까?
지난달 UV가 3,141,592,653 이었습니다.지난달 UV가 31억4천만 (+/- 2%) 이었습니다.
Probabilistic
Data
Structure
https://highlyscalable.wordpress.com/2012/05/01/probabilistic-structures-web-analytics-data-mining/
이상적으로 균일하게 분포된 해시 함수
0 1
𝑒 = min ℎ = 0.102
1
𝑒
= 9.8039 − 1 = 8.8 ≈ 9
𝑒
추정 정확도를 높이는 방법
• 메모리를 더 사용하면 정확도 증가
• 해시 함수 추가하면 정확도가 증가
• 그러나, 좋은 해시 함수를 만들기는 쉽지 않음
• 더 많은 계산 필요
• 메모리 효율적인 Cardinality 추정 방법 필요
HyperLogLog – Cornerstone of big data infrastructure
Philippe Flajolet (1948 – 2011)
• Bit-pattern Observable
• Stochastic Averaging
• Harmonic Mean
• Small / Large correction
Hash = (Pseudo) Random Bits Generator
Bit-pattern Observable!!!
매우 희귀한 것을 보게 될 확률은?
𝑃 … 1 = 2−1
2개 중에 하나
𝑃 … 10 = 2−2
4개 중에 하나
𝑃 … 100 = 2−3
8개 중에 하나
𝑃 … 1000 = 2−4
16개 중에 하나
𝑃 … 10000 = 2−5
32개 중에 하나
…
𝑃(… 10 𝑛−1
) = 2−𝑛
2 𝑛
개 중에 하나
The most significant 1bit
is an estimation of the
cardinality!
Stochastic Averaging
• 입력값들을 bit-pattern에 따라서 𝑚 개의 register로 분류하자
• 𝑏 bits, 𝑚 registers : 𝑚 = 2 𝑏
• Averaging random variable
00011101 01010001 10101101 10111111
00101100 00111100 00000100 11110001
10000110 10100110 11111111 00000011
11011001 00100000 11010000 10110001
00100011 00100011 10011100 01101100
01001001 10111000 10100000 10010111
10101010 00101110 01110011 10000010
00000000 11010010 00110100 01101100
10100000 10111100 10011110 10010101
00001001 01011111 01111100 11101110
00011101 01010001 10101101 10111111 Y
00101100 00111100 00000100 11110001 G
10000110 10100110 11111111 00000011 Y
11011001 00100000 11010000 10110001 G
00100011 00100011 10011100 01101100 R
01001001 10111000 10100000 10010111 Y
10101010 00101110 01110011 10000010 B
00000000 11010010 00110100 01101100 R
10100000 10111100 10011110 10010101 G
00001001 01011111 01111100 11101110 B
00011101 01010001 10101101 10111111 Y
00101100 00111100 00000100 11110001 G
10000110 10100110 11111111 00000011 Y
11011001 00100000 11010000 10110001 G
00100011 00100011 10011100 01101100 R
01001001 10111000 10100000 10010111 Y
10101010 00101110 01110011 10000010 B
00000000 11010010 00110100 01101100 R
10100000 10111100 10011110 10010101 G
00001001 01011111 01111100 11101110 B
00011101 01010001 10101101 10111111 Y
00101100 00111100 00000100 11110001 G
10000110 10100110 11111111 00000011 Y
11011001 00100000 11010000 10110001 G
00100011 00100011 10011100 01101100 R
01001001 10111000 10100000 10010111 Y
10101010 00101110 01110011 10000010 B
00000000 11010010 00110100 01101100 R
10100000 10111100 10011110 10010101 G
00001001 01011111 01111100 11101110 B
00011101 01010001 10101101 10111111 Y
00101100 00111100 00000100 11110001 G
10000110 10100110 11111111 00000011 Y
11011001 00100000 11010000 10110001 G
00100011 00100011 10011100 01101100 R
01001001 10111000 10100000 10010111 Y
10101010 00101110 01110011 10000010 B
00000000 11010010 00110100 01101100 R
10100000 10111100 10011110 10010101 G
00001001 01011111 01111100 11101110 B
4 Registers
1 3 6 7
2 8 64 128
Harmonic Mean
𝐷𝑉𝐻𝐿𝐿 = 𝑐𝑚2
𝑗=1
𝑚
2−𝑅 𝑗
−1
𝐻 =
𝑛
1
𝑥1
+
1
𝑥2
+ ⋯ +
1
𝑥 𝑛
𝐺 = 𝑛
𝑎1 ∙ 𝑎2 ⋯ 𝑎 𝑛
𝐴 =
𝑎1 + 𝑎2 ⋯ + 𝑎 𝑛
𝑛
HyperLogLog
• 추정 정확도 - 10억 UV 2% 오차 추정 ~1.5kb
• More registers, more accurate estimation
• Pre-range-correction error :
1.04
𝑚
• Small / Large range corrections
• Max aggregation is a Commutative Monoid!!!
여러분 좋아하시는…
PFADD / PFCOUNT / PFMERGE
stream-lib / Java-HLL
In honor of Philippe Flajolet
Social
Network
Service
“네트는 광대해.”
Recommender System
• Content-based filtering
• Collaborative filtering
• Model-based
• Neighborhood-based
‘Birds of a feather flock together’
해결할 문제들
• 커다란 집합 (매우 큰 Cardinality의 Set) 간의 유사도를
어떻게 효율적으로 비교할 것인가?
• 집합들의 집합 중에서 도대체 무엇과 무엇을 비교할 것인가?
• 어떻게 수 억의 사용자들 중에서 Nearest neighbors를
효과적으로 찾을 것인가?
• 유사한 집합들 끼리 모으기 위한 효과적인 Clustering 방법은?
Locality Sensitive Hashing - LSH
• 데이터 축약
• Unbounded data -> Bounded data
• Collision
• 비가역성 - Irreversible
• 균일한 결과값 분포 - Uniform distribution
• 눈사태효과 - Avalanche effect
• Maximize the probability of a “collision” for similar items
Jaccard Similarity
𝐽 𝐴, 𝐵 =
𝐴 ∩ 𝐵
𝐴 ∪ 𝐵
=
𝐴 ∩ 𝐵
𝐴 + 𝐵 − 𝐴 ∩ 𝐵
𝐴, 𝐵 = ∅ → 𝐽 𝐴, 𝐵 = 1
0 ≤ 𝐽(𝐴, 𝐵) ≤ 1
?
해시 함수 Hash function
• 데이터 축약
• Unbounded data -> Bounded data
• Collision
• 비가역성 - Irreversible
• 균일한 결과값 분포 - Uniform distribution
• 눈사태효과 - Avalanche effect
• Hashing is permutation of all elements of a set
MinHash
𝑃𝑟 𝐻𝑚𝑖𝑛 𝐴 = 𝐻𝑚𝑖𝑛(𝐵) = 𝐽(𝐴, 𝐵)
• n개의 서로 다른 해시 함수 사용
• 최소 해시 값들을 모아서 Set의 Signature로 사용
• Signature가 유사할 수록 유사할 가능성이 높은 집합 쌍
• Min aggregation 연산은 Commutative Monoid!
Locality Sensitive Hashing - LSH
• 데이터 축약
• Collision
• 비가역성 - Irreversible
• 균일한 결과값 분포 - Uniform distribution
• 눈사태효과 - Avalanche effect
• Maximize the probability of a “collision” for similar items
• MinHash forms a LSH for Jaccard similarity
Applications of LSH
• Google 뉴스 추천 서비스
https://www2007.org/papers/paper570.pdf
• 친구 추천 서비스, 상품 추천 서비스
• 지문인식, 안면인식, 음성인식
• More on...
요약
• 대규모 분산 시스템 개발의 기본 초식: Immutable Data, CAS, Monoid
 Monoid / Commutative Monoid is awesome!
• 확률적 자료 구조 Probabilistic Data Structure
 확률적 원소 존재검사: Bloom filter
 빅데이터 플랫폼의 초석: HyperLogLog
 정확도를 조금만 희생하면 불가능한 것도 할 수 있다.
• 해시 함수의 확률적 활용
 분산처리가 유용한 LSH e.g. Jaccard similarity + MinHash
 해시 함수 설계에 따라 값 비싼 작업을 간단히 분산처리 할 수 있다. LSH
마치면서
• 해결하려는 문제의 규모와 복잡도가 커지면
어느 시점에는 전혀 다른 접근이 필요하다.
• 불가능한 것을 가능하게 하려면 발상의 전환이 필요하다.
• 훌륭한 알고리즘들이 꾸준히 새롭게 나오거나 개선 되고 있다.
꾸준히 공부하자!
• 제품으로 완성된 솔루션만 사용할 줄 아는 개발자를 넘어서
새로운 패러다임의 제품이나 시스템을 만들어 낼 수 있는
개발자가 되자!
감사합니다.

More Related Content

Similar to NDC 2018 억! 소리나는 게임 서비스 플랫폼을 지탱하는 알고리즘 - 해시, 불변데이터, 확률적 자료구조

SK planet Streaming system
SK planet Streaming systemSK planet Streaming system
SK planet Streaming system
용휘 김
 
정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)
크몽
 
[도서 리뷰] 헤드 퍼스트 데이터 분석 ( Head First Data Analysis )
[도서 리뷰]  헤드 퍼스트 데이터 분석 ( Head First Data Analysis )[도서 리뷰]  헤드 퍼스트 데이터 분석 ( Head First Data Analysis )
[도서 리뷰] 헤드 퍼스트 데이터 분석 ( Head First Data Analysis )
Seung-Woo Kang
 
Spark Day 2017@Seoul(Spark Bootcamp)
Spark Day 2017@Seoul(Spark Bootcamp)Spark Day 2017@Seoul(Spark Bootcamp)
Spark Day 2017@Seoul(Spark Bootcamp)
Sang-bae Lim
 
리텐션의 산출과 활용
리텐션의 산출과 활용리텐션의 산출과 활용
리텐션의 산출과 활용
Chanman Jo
 
Key-Value Store를 사용한 대용량 게임 통계 : WoW 경매장 분석 서비스 wowz.kr를 사례로
Key-Value Store를 사용한 대용량 게임 통계: WoW 경매장 분석 서비스 wowz.kr를 사례로Key-Value Store를 사용한 대용량 게임 통계: WoW 경매장 분석 서비스 wowz.kr를 사례로
Key-Value Store를 사용한 대용량 게임 통계 : WoW 경매장 분석 서비스 wowz.kr를 사례로
Seok-ju Yun
 
SQL performance and UDF
SQL performance and UDFSQL performance and UDF
SQL performance and UDF
JAEGEUN YU
 
Fraud Detection - online game 과 결제를 중심으로
Fraud Detection - online game 과 결제를 중심으로Fraud Detection - online game 과 결제를 중심으로
Fraud Detection - online game 과 결제를 중심으로
NAVER Engineering
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
정주 김
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
Jaikwang Lee
 
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
none
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
Hoyoung Choi
 
알파고 해부하기 3부
알파고 해부하기 3부알파고 해부하기 3부
알파고 해부하기 3부
Donghun Lee
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
Gruter
 
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
eungjin cho
 
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
Hyeshik Chang
 
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
WON JOON YOO
 
AWS CLOUD 2018 -IoT 디바이스 관리, 보안, 분석, RTOS로 확장된 AWS IoT 신규 서비스 (김효정 솔루션즈 아키텍트)
AWS CLOUD 2018 -IoT 디바이스 관리, 보안, 분석, RTOS로 확장된 AWS IoT 신규 서비스 (김효정 솔루션즈 아키텍트)AWS CLOUD 2018 -IoT 디바이스 관리, 보안, 분석, RTOS로 확장된 AWS IoT 신규 서비스 (김효정 솔루션즈 아키텍트)
AWS CLOUD 2018 -IoT 디바이스 관리, 보안, 분석, RTOS로 확장된 AWS IoT 신규 서비스 (김효정 솔루션즈 아키텍트)Amazon Web Services Korea
 
Linked Open Data
Linked Open DataLinked Open Data
Linked Open Data
Hansung University
 
실전 스타트업 데이터분석: 소셜데이팅 이음은 이렇게 한다
실전 스타트업 데이터분석: 소셜데이팅 이음은 이렇게 한다실전 스타트업 데이터분석: 소셜데이팅 이음은 이렇게 한다
실전 스타트업 데이터분석: 소셜데이팅 이음은 이렇게 한다
승화 양
 

Similar to NDC 2018 억! 소리나는 게임 서비스 플랫폼을 지탱하는 알고리즘 - 해시, 불변데이터, 확률적 자료구조 (20)

SK planet Streaming system
SK planet Streaming systemSK planet Streaming system
SK planet Streaming system
 
정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)
 
[도서 리뷰] 헤드 퍼스트 데이터 분석 ( Head First Data Analysis )
[도서 리뷰]  헤드 퍼스트 데이터 분석 ( Head First Data Analysis )[도서 리뷰]  헤드 퍼스트 데이터 분석 ( Head First Data Analysis )
[도서 리뷰] 헤드 퍼스트 데이터 분석 ( Head First Data Analysis )
 
Spark Day 2017@Seoul(Spark Bootcamp)
Spark Day 2017@Seoul(Spark Bootcamp)Spark Day 2017@Seoul(Spark Bootcamp)
Spark Day 2017@Seoul(Spark Bootcamp)
 
리텐션의 산출과 활용
리텐션의 산출과 활용리텐션의 산출과 활용
리텐션의 산출과 활용
 
Key-Value Store를 사용한 대용량 게임 통계 : WoW 경매장 분석 서비스 wowz.kr를 사례로
Key-Value Store를 사용한 대용량 게임 통계: WoW 경매장 분석 서비스 wowz.kr를 사례로Key-Value Store를 사용한 대용량 게임 통계: WoW 경매장 분석 서비스 wowz.kr를 사례로
Key-Value Store를 사용한 대용량 게임 통계 : WoW 경매장 분석 서비스 wowz.kr를 사례로
 
SQL performance and UDF
SQL performance and UDFSQL performance and UDF
SQL performance and UDF
 
Fraud Detection - online game 과 결제를 중심으로
Fraud Detection - online game 과 결제를 중심으로Fraud Detection - online game 과 결제를 중심으로
Fraud Detection - online game 과 결제를 중심으로
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
 
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
알파고 해부하기 3부
알파고 해부하기 3부알파고 해부하기 3부
알파고 해부하기 3부
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
 
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
 
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
 
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
 
AWS CLOUD 2018 -IoT 디바이스 관리, 보안, 분석, RTOS로 확장된 AWS IoT 신규 서비스 (김효정 솔루션즈 아키텍트)
AWS CLOUD 2018 -IoT 디바이스 관리, 보안, 분석, RTOS로 확장된 AWS IoT 신규 서비스 (김효정 솔루션즈 아키텍트)AWS CLOUD 2018 -IoT 디바이스 관리, 보안, 분석, RTOS로 확장된 AWS IoT 신규 서비스 (김효정 솔루션즈 아키텍트)
AWS CLOUD 2018 -IoT 디바이스 관리, 보안, 분석, RTOS로 확장된 AWS IoT 신규 서비스 (김효정 솔루션즈 아키텍트)
 
Linked Open Data
Linked Open DataLinked Open Data
Linked Open Data
 
실전 스타트업 데이터분석: 소셜데이팅 이음은 이렇게 한다
실전 스타트업 데이터분석: 소셜데이팅 이음은 이렇게 한다실전 스타트업 데이터분석: 소셜데이팅 이음은 이렇게 한다
실전 스타트업 데이터분석: 소셜데이팅 이음은 이렇게 한다
 

NDC 2018 억! 소리나는 게임 서비스 플랫폼을 지탱하는 알고리즘 - 해시, 불변데이터, 확률적 자료구조

  • 1. Blizzard Entertainment 전이삭 - 해시, 불변데이터, 확률적 자료구조 게임 서비스 플랫폼을 지탱하는 알고리즘 “억! 소리나는”
  • 2. 주의사항 • 본 발표에서 다루는 모든 내용들, 생각, 의견, 관점은 어디까지나 개인적인 견해이며 제가 일하고 있는 회사의 공식적인 입장과는 아무런 관련이 없습니다. • 특정 제품, 기술, 회사, 개인에 대한 언급 역시 회사의 입장이 아닌 개인적인 견해일 뿐 제가 일하고 있는 회사의 업무와는 무관합니다. Disclaimer • Views, thoughts and opinions expressed in this presentation is my own and are not endorsed by my employer. • Mention of any products/technologies/companies/individuals/etc. does not equals an endorsement.
  • 3. 게임 서비스 플랫폼 • 게임 클라이언트 배포 • 게임 서버 플랫폼 • 인증 / 결제 / 보안 • 서비스 상태 모니터링 및 실시간 관제 • 서비스 관련 데이터 수집 및 분석/예측/경고 • 소셜 네트워킹 서비스 • 기계학습 활용 서비스
  • 4. 오늘 살펴볼 내용들 • Hash function / Immutable Data / Content Addressable Storage • Bloom Filter • Monoid • Introduction to Probabilistic Data Structure  HyperLogLog  MinHash  Locality Sensitive Hash
  • 5. Basic Concepts • Hash function • Immutable Data • Content Addressable Storage
  • 6. Hash function 해시 함수 • 데이터 축약 • Unbounded data -> Bounded data • 비가역성 - Irreversible • Collision  균일한 결과값 분포 - Uniform distribution  눈사태 효과 - Avalanche effect
  • 7. Immutable Data 불변 데이터 • 한번 생성된 데이터의 내용은 소멸 될 때 까지 불변 • 같은 이름의 데이터는 내용도 같다는 것을 보장 • 쉬운 복제 / 쉬운 비교 / 쉬운 캐싱 • 쉬운 분산처리
  • 9. Content Addressable Storage • 컨텐츠의 checksum / hash value를 id / key로 사용 • 주로 Immutable data를 사용 • 데이터의 위치가 아닌 컨텐츠를 쿼리 가능한 key로 구분 • Hierarchy 또는 catalog는 별도의 자료구조로 표현 • 내부적으로만 사용 • location of the actual data is unknown to users • Flexible, durable, and distributable
  • 10. 초 대용량 분산 스토리지
  • 11. NoSQL SQL 절대 아님 Filter 절대 아님
  • 12. 어떻게 빠르게 저장할 것인가? • 메모리는 빠르고 비싸다. • 디스크는 느리고 싸다. • I/O는 많이 비싸다. • 순차적 쓰기는 그래도 꽤 빠르다. • 읽기/쓰기가 동시에 일어나면 상당히 많이 느리다.
  • 13. Bloom Filter A Bloom filter is a space-efficient probabilistic data structure, conceived by Burton Howard Bloom in 1970, that is used to test whether an element is a member of a set. False positive matches are possible, but false negatives are not – in other words, a query returns either "possibly in set" or "definitely not in set". Elements can be added to the set, but not removed (though this can be addressed with a "counting" filter); the more elements that are added to the set, the larger the probability of false positives. - https://en.wikipedia.org/wiki/Bloom_filter
  • 14. Bloom Filter • space-efficient probabilistic data structure • False positive matches are possible, but false negatives are not • possibly in set / definitely not in set • How?
  • 15. 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00
  • 16. 0 0 0 00 1 0 0 00 1 0 0 00 0 1 0 00 Welcome
  • 17. 0 1 0 00 1 0 0 01 1 1 0 00 0 1 0 00 Welcome NDC
  • 18. 0 1 1 00 1 0 0 11 1 1 0 00 0 1 0 00 Welcome NDC 2018
  • 19. 0 1 1 00 1 0 0 11 1 1 0 00 0 1 0 00 Welcome NDC 2018 2019 Definitely not there
  • 20. 0 1 1 00 1 0 0 11 1 1 0 00 0 1 0 00 Welcome NDC 2018 Hello Maybe there
  • 21. 0 1 1 00 1 0 0 11 1 1 0 00 0 1 0 00 Welcome NDC 2018
  • 22. 0 1 1 00 1 1 0 11 1 1 0 10 0 1 0 00 Welcome NDC 2018 Nexon
  • 23. 0 1 1 00 1 1 0 11 1 1 1 11 0 1 0 10 Welcome NDC 2018 Nexon Developer
  • 24. 0 1 1 00 1 1 0 11 1 1 1 11 0 1 0 10 Welcome NDC 2018 Nexon Developer Conference Maybe there
  • 25. Bloom Filter • 추가 또는 검색만 가능 + • 검색 결과 - 없다면 진짜로 없다 - 𝑂(𝑘) • 추가 동작, 검색 동작, time/space complexity 모두: 𝑂(𝑘) • 튜닝가능  해시 함수의 수, 해시 테이블 크기를 조정해서 FP의 확률을 조절  메모리 사용량과 I/O 접근의 비율을 조절할 수 있음 • 활용: 화이트/블랙 리스트, 웹 캐시, 분산DB 등 • 확률적 자료구조 • 유사한 알고리즘: Count-Min Sketch *
  • 27. … 4 3 10 2 1 … 10 8 24 4 2 … 7 5 16 3 1 34 50 Sum Aggregation
  • 28. • 이항연산 - 𝑀⊗𝑀 • 결합법칙 - 𝑎 ∙ 𝑏 ∙ 𝑐 = (𝑎 ∙ 𝑏) ∙ 𝑐 • 항등원의 존재 - 𝑖 ∙ 𝑎 = 𝑎 ∙ 𝑖 = 𝑎
  • 29. • 이항연산 - 𝑀⊗𝑀 • 결합법칙 - 𝑎 ∙ 𝑏 ∙ 𝑐 = (𝑎 ∙ 𝑏) ∙ 𝑐 • 항등원의 존재 - 𝑖 ∙ 𝑎 = 𝑎 ∙ 𝑖 = 𝑎 • 교환법칙 - 𝑎 ∙ 𝑏 = 𝑏 ∙ 𝑎 Commutative
  • 30. … 2 3 4 1 … 4 8 10 2 … 1 7 3 5 10 10 4 10 7 Max Aggregation
  • 31. … x z ? q a … z d ? b x … f q ? c d ? aqzx xbdz dcqf Counting Unique Visitors
  • 32. • 카운팅 테이블의 사이즈가 크다 • 공유 데이터가 필요하므로 분산처리가 어려움 분산 노드의 UV 합산 어려운 문제 – 발상의 전환!
  • 33. 정확도를 2%만 희생하면 어떨까? 지난달 UV가 3,141,592,653 이었습니다.지난달 UV가 31억4천만 (+/- 2%) 이었습니다.
  • 35. 이상적으로 균일하게 분포된 해시 함수 0 1 𝑒 = min ℎ = 0.102 1 𝑒 = 9.8039 − 1 = 8.8 ≈ 9 𝑒
  • 36. 추정 정확도를 높이는 방법 • 메모리를 더 사용하면 정확도 증가 • 해시 함수 추가하면 정확도가 증가 • 그러나, 좋은 해시 함수를 만들기는 쉽지 않음 • 더 많은 계산 필요 • 메모리 효율적인 Cardinality 추정 방법 필요
  • 37. HyperLogLog – Cornerstone of big data infrastructure Philippe Flajolet (1948 – 2011) • Bit-pattern Observable • Stochastic Averaging • Harmonic Mean • Small / Large correction
  • 38. Hash = (Pseudo) Random Bits Generator Bit-pattern Observable!!!
  • 39. 매우 희귀한 것을 보게 될 확률은? 𝑃 … 1 = 2−1 2개 중에 하나 𝑃 … 10 = 2−2 4개 중에 하나 𝑃 … 100 = 2−3 8개 중에 하나 𝑃 … 1000 = 2−4 16개 중에 하나 𝑃 … 10000 = 2−5 32개 중에 하나 … 𝑃(… 10 𝑛−1 ) = 2−𝑛 2 𝑛 개 중에 하나 The most significant 1bit is an estimation of the cardinality!
  • 40. Stochastic Averaging • 입력값들을 bit-pattern에 따라서 𝑚 개의 register로 분류하자 • 𝑏 bits, 𝑚 registers : 𝑚 = 2 𝑏 • Averaging random variable
  • 41. 00011101 01010001 10101101 10111111 00101100 00111100 00000100 11110001 10000110 10100110 11111111 00000011 11011001 00100000 11010000 10110001 00100011 00100011 10011100 01101100 01001001 10111000 10100000 10010111 10101010 00101110 01110011 10000010 00000000 11010010 00110100 01101100 10100000 10111100 10011110 10010101 00001001 01011111 01111100 11101110
  • 42. 00011101 01010001 10101101 10111111 Y 00101100 00111100 00000100 11110001 G 10000110 10100110 11111111 00000011 Y 11011001 00100000 11010000 10110001 G 00100011 00100011 10011100 01101100 R 01001001 10111000 10100000 10010111 Y 10101010 00101110 01110011 10000010 B 00000000 11010010 00110100 01101100 R 10100000 10111100 10011110 10010101 G 00001001 01011111 01111100 11101110 B
  • 43. 00011101 01010001 10101101 10111111 Y 00101100 00111100 00000100 11110001 G 10000110 10100110 11111111 00000011 Y 11011001 00100000 11010000 10110001 G 00100011 00100011 10011100 01101100 R 01001001 10111000 10100000 10010111 Y 10101010 00101110 01110011 10000010 B 00000000 11010010 00110100 01101100 R 10100000 10111100 10011110 10010101 G 00001001 01011111 01111100 11101110 B
  • 44. 00011101 01010001 10101101 10111111 Y 00101100 00111100 00000100 11110001 G 10000110 10100110 11111111 00000011 Y 11011001 00100000 11010000 10110001 G 00100011 00100011 10011100 01101100 R 01001001 10111000 10100000 10010111 Y 10101010 00101110 01110011 10000010 B 00000000 11010010 00110100 01101100 R 10100000 10111100 10011110 10010101 G 00001001 01011111 01111100 11101110 B
  • 45. 00011101 01010001 10101101 10111111 Y 00101100 00111100 00000100 11110001 G 10000110 10100110 11111111 00000011 Y 11011001 00100000 11010000 10110001 G 00100011 00100011 10011100 01101100 R 01001001 10111000 10100000 10010111 Y 10101010 00101110 01110011 10000010 B 00000000 11010010 00110100 01101100 R 10100000 10111100 10011110 10010101 G 00001001 01011111 01111100 11101110 B
  • 46. 4 Registers 1 3 6 7 2 8 64 128
  • 47. Harmonic Mean 𝐷𝑉𝐻𝐿𝐿 = 𝑐𝑚2 𝑗=1 𝑚 2−𝑅 𝑗 −1
  • 48. 𝐻 = 𝑛 1 𝑥1 + 1 𝑥2 + ⋯ + 1 𝑥 𝑛 𝐺 = 𝑛 𝑎1 ∙ 𝑎2 ⋯ 𝑎 𝑛 𝐴 = 𝑎1 + 𝑎2 ⋯ + 𝑎 𝑛 𝑛
  • 49. HyperLogLog • 추정 정확도 - 10억 UV 2% 오차 추정 ~1.5kb • More registers, more accurate estimation • Pre-range-correction error : 1.04 𝑚 • Small / Large range corrections • Max aggregation is a Commutative Monoid!!!
  • 50. 여러분 좋아하시는… PFADD / PFCOUNT / PFMERGE stream-lib / Java-HLL In honor of Philippe Flajolet
  • 52.
  • 53. Recommender System • Content-based filtering • Collaborative filtering • Model-based • Neighborhood-based ‘Birds of a feather flock together’
  • 54. 해결할 문제들 • 커다란 집합 (매우 큰 Cardinality의 Set) 간의 유사도를 어떻게 효율적으로 비교할 것인가? • 집합들의 집합 중에서 도대체 무엇과 무엇을 비교할 것인가? • 어떻게 수 억의 사용자들 중에서 Nearest neighbors를 효과적으로 찾을 것인가? • 유사한 집합들 끼리 모으기 위한 효과적인 Clustering 방법은?
  • 55. Locality Sensitive Hashing - LSH • 데이터 축약 • Unbounded data -> Bounded data • Collision • 비가역성 - Irreversible • 균일한 결과값 분포 - Uniform distribution • 눈사태효과 - Avalanche effect • Maximize the probability of a “collision” for similar items
  • 56. Jaccard Similarity 𝐽 𝐴, 𝐵 = 𝐴 ∩ 𝐵 𝐴 ∪ 𝐵 = 𝐴 ∩ 𝐵 𝐴 + 𝐵 − 𝐴 ∩ 𝐵 𝐴, 𝐵 = ∅ → 𝐽 𝐴, 𝐵 = 1 0 ≤ 𝐽(𝐴, 𝐵) ≤ 1
  • 57. ?
  • 58. 해시 함수 Hash function • 데이터 축약 • Unbounded data -> Bounded data • Collision • 비가역성 - Irreversible • 균일한 결과값 분포 - Uniform distribution • 눈사태효과 - Avalanche effect • Hashing is permutation of all elements of a set
  • 59. MinHash 𝑃𝑟 𝐻𝑚𝑖𝑛 𝐴 = 𝐻𝑚𝑖𝑛(𝐵) = 𝐽(𝐴, 𝐵) • n개의 서로 다른 해시 함수 사용 • 최소 해시 값들을 모아서 Set의 Signature로 사용 • Signature가 유사할 수록 유사할 가능성이 높은 집합 쌍 • Min aggregation 연산은 Commutative Monoid!
  • 60. Locality Sensitive Hashing - LSH • 데이터 축약 • Collision • 비가역성 - Irreversible • 균일한 결과값 분포 - Uniform distribution • 눈사태효과 - Avalanche effect • Maximize the probability of a “collision” for similar items • MinHash forms a LSH for Jaccard similarity
  • 61. Applications of LSH • Google 뉴스 추천 서비스 https://www2007.org/papers/paper570.pdf • 친구 추천 서비스, 상품 추천 서비스 • 지문인식, 안면인식, 음성인식 • More on...
  • 62. 요약 • 대규모 분산 시스템 개발의 기본 초식: Immutable Data, CAS, Monoid  Monoid / Commutative Monoid is awesome! • 확률적 자료 구조 Probabilistic Data Structure  확률적 원소 존재검사: Bloom filter  빅데이터 플랫폼의 초석: HyperLogLog  정확도를 조금만 희생하면 불가능한 것도 할 수 있다. • 해시 함수의 확률적 활용  분산처리가 유용한 LSH e.g. Jaccard similarity + MinHash  해시 함수 설계에 따라 값 비싼 작업을 간단히 분산처리 할 수 있다. LSH
  • 63. 마치면서 • 해결하려는 문제의 규모와 복잡도가 커지면 어느 시점에는 전혀 다른 접근이 필요하다. • 불가능한 것을 가능하게 하려면 발상의 전환이 필요하다. • 훌륭한 알고리즘들이 꾸준히 새롭게 나오거나 개선 되고 있다. 꾸준히 공부하자! • 제품으로 완성된 솔루션만 사용할 줄 아는 개발자를 넘어서 새로운 패러다임의 제품이나 시스템을 만들어 낼 수 있는 개발자가 되자!