넥슨 개발자 컨퍼런스 2018
억! 소리나는 게임 서비스 플랫폼을 지탱하는 알고리즘 - 해시, 불변데이터, 확률적 자료구조
Nexon Developer Conference NDC 2018
Game Service Platform Algorithm - Hash, Immutable data, Probabilistic data structure
Blizzard Entertainment
Isaac Jeon
전이삭
https://1drv.ms/p/s!AmZm232vVfZTyyKlNhfTum90qTqi
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈Minwoo Kim
1년 7개월 장수 모바일 게임 쿠키런. 많은 유저, 하루에도 쏟아지는 많은 로그. Time To Market 단축이 핵심 역량 중 하나가 되는 모바일 게임 시장. 자주 빠르게 변경되는 스팩, 로그도 마찬가지로 자주 빠르게 변경되는 스키마. 이런 현실속에서 게임 개발과 운영, 데이터 분석까지 병행 하기 위해서 가볍고 유연한 아키텍처로 적당히 빠르게 데이터 분석을 하는 쿠키런 서버팀 사례를 소개합니다.
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유Hyojun Jeon
NDC18에서 발표하였습니다. 현재 보고 계신 슬라이드는 1부 입니다.(총 2부)
- 1부 링크: https://goo.gl/3v4DAa
- 2부 링크: https://goo.gl/wpoZpY
(SlideShare에 슬라이드 300장 제한으로 2부로 나누어 올렸습니다. 불편하시더라도 양해 부탁드립니다.)
<마비노기 영웅전>의 사례에 기반하여 다음의 내용을 설명합니다.
1. 국내 및 해외에서 라이브 서비스 중에 발생하는 작업장 이슈에 대응하기 위해서 실시간 로그 수집 프로세스를 구축하면서 고민하였던 내용과
2. 수집한 로그 데이터를 활용하여 온라인 액션 게임에서 캐릭터 애니메이션 패턴간의 유사도(TF-IDF, Cosine Similarity)를 분석하여 현업 실무의 어뷰징 탐지에 활용한 사례를 공유합니다.
라이브 서비스 환경에서 국내 및 해외의 실시간 로그 수집에 대해서 고민하시는 개발자나 온라인 게임에서의 봇탐지에 관심있는 분석가들에게 유용한 사례를 소개해드릴 수 있을 것으로 생각합니다.
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈Minwoo Kim
1년 7개월 장수 모바일 게임 쿠키런. 많은 유저, 하루에도 쏟아지는 많은 로그. Time To Market 단축이 핵심 역량 중 하나가 되는 모바일 게임 시장. 자주 빠르게 변경되는 스팩, 로그도 마찬가지로 자주 빠르게 변경되는 스키마. 이런 현실속에서 게임 개발과 운영, 데이터 분석까지 병행 하기 위해서 가볍고 유연한 아키텍처로 적당히 빠르게 데이터 분석을 하는 쿠키런 서버팀 사례를 소개합니다.
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유Hyojun Jeon
NDC18에서 발표하였습니다. 현재 보고 계신 슬라이드는 1부 입니다.(총 2부)
- 1부 링크: https://goo.gl/3v4DAa
- 2부 링크: https://goo.gl/wpoZpY
(SlideShare에 슬라이드 300장 제한으로 2부로 나누어 올렸습니다. 불편하시더라도 양해 부탁드립니다.)
<마비노기 영웅전>의 사례에 기반하여 다음의 내용을 설명합니다.
1. 국내 및 해외에서 라이브 서비스 중에 발생하는 작업장 이슈에 대응하기 위해서 실시간 로그 수집 프로세스를 구축하면서 고민하였던 내용과
2. 수집한 로그 데이터를 활용하여 온라인 액션 게임에서 캐릭터 애니메이션 패턴간의 유사도(TF-IDF, Cosine Similarity)를 분석하여 현업 실무의 어뷰징 탐지에 활용한 사례를 공유합니다.
라이브 서비스 환경에서 국내 및 해외의 실시간 로그 수집에 대해서 고민하시는 개발자나 온라인 게임에서의 봇탐지에 관심있는 분석가들에게 유용한 사례를 소개해드릴 수 있을 것으로 생각합니다.
대표적인 인터넷 서비스인 온라인게임에 존재하는 대표적인 fraud 인 게임봇/작업장에 대해 소개하고 이를 탐지하기 위한 알고리즘을 사례와 함께 설명한다.
더불어 간편결제 서비스에 지속적인 공격이 발생하고 있는데, 이를 조기 탐지하기 위한 방법에는 어떠한 것이 있을지 소개하도록 한다.
대표적인 인터넷 서비스인 온라인게임에 존재하는 대표적인 fraud 인 게임봇/작업장에 대해 소개하고 이를 탐지하기 위한 알고리즘을 사례와 함께 설명한다.
더불어 간편결제 서비스에 지속적인 공격이 발생하고 있는데, 이를 조기 탐지하기 위한 방법에는 어떠한 것이 있을지 소개하도록 한다.
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
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
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?
25. Bloom Filter
• 추가 또는 검색만 가능 +
• 검색 결과 - 없다면 진짜로 없다 - 𝑂(𝑘)
• 추가 동작, 검색 동작, time/space complexity 모두: 𝑂(𝑘)
• 튜닝가능
해시 함수의 수, 해시 테이블 크기를 조정해서 FP의 확률을 조절
메모리 사용량과 I/O 접근의 비율을 조절할 수 있음
• 활용: 화이트/블랙 리스트, 웹 캐시, 분산DB 등
• 확률적 자료구조
• 유사한 알고리즘: Count-Min Sketch *
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
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
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
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. 마치면서
• 해결하려는 문제의 규모와 복잡도가 커지면
어느 시점에는 전혀 다른 접근이 필요하다.
• 불가능한 것을 가능하게 하려면 발상의 전환이 필요하다.
• 훌륭한 알고리즘들이 꾸준히 새롭게 나오거나 개선 되고 있다.
꾸준히 공부하자!
• 제품으로 완성된 솔루션만 사용할 줄 아는 개발자를 넘어서
새로운 패러다임의 제품이나 시스템을 만들어 낼 수 있는
개발자가 되자!