Implementing me2day Friend Suggestion NHN 미투데이인프라개발팀 강호성
Dec 14, 2014
1
Implementing
me2day Friend Suggestion
NHN
미투데이인프라개발팀
강호성
2
Implementing
me2day Friend Suggestion
NHN
미투데이인프라개발팀
강호성
3
Contents
• SNS에서의 친구추천
• 친구추천 알고리즘
• 친구추천 시스템의 구현
• 결롞 및 향후 작업
4
5
6
가입했는데친구 없어서 심심해..나도 미친 좀 사귀어보자!
불쌍하다고 4명 싞청해주고..그마저도 홍보미투ㅠㅠ
허이고.. 불쌍하다 불쌍해! 옛다!미투 한 개 찍어줌.
7
SNS에서의친구추천
• 사용자에게 새로운 친구를 사귈 수 있도록 도와주는 장치
• 친구수가 적은 유저에게 유용함
SNS = 블로그?친구추천이 뜨네친구싞청 해볼까?
이제야 SNS의 묘미를알겠다~
8
me2day에서의친구추천
9
me2day에서의친구추천
추천하는 사람들
공통된 친구들
10
Next Contents
• SNS에서의 친구추천
•친구추천 알고리즘
• Friend of a Friend 추천
• Close Friend of a Close Friend 추천
• 친구추천 시스템의 구현
• 결롞 및 향후 작업
11
Friend of a Friend (FOAF) 추천
• F(A, B) = A, B가 친구관계이면 True
• M.F.C(A, C) = A, C의 공통친구의 수 (Mutual Friend Count)
• A의 추천친구 집합 = F(A, B) 이고 F(B, C)인 C들의 집합
• 각각의 C마다 M.F.C(A, C)가 높은 순으로 정렬함
First
※ Jilin Chen, (2009), “Recommending People on Social Networking Sites”.
아이유
직장동료
팀장님
친구2
친구1
친구3
갈길이멀다
12
Friend of a Friend (FOAF) 추천
• F(A, B) = A, B가 친구관계이면 True
• M.F.C(A, C) = A, C의 공통친구의 수 (Mutual Friend Count)
• A의 추천친구 집합 = F(A, B) 이고 F(B, C)인 C들의 집합
• 각각의 C마다 M.F.C(A, C)가 높은 순으로 정렬함
Second
※ Jilin Chen, (2009), “Recommending People on Social Networking Sites”.
아이유
직장동료
팀장님
친구2
친구1
친구3
갈길이멀다
13
Friend of a Friend (FOAF) 추천
• F(A, B) = A, B가 친구관계이면 True
• M.F.C(A, C) = A, C의 공통친구의 수 (Mutual Friend Count)
• A의 추천친구 집합 = F(A, B) 이고 F(B, C)인 C들의 집합
• 각각의 C마다 M.F.C(A, C)가 높은 순으로 정렬함
Third
※ Jilin Chen, (2009), “Recommending People on Social Networking Sites”.
아이유
직장동료
팀장님
친구2
친구1
친구3
갈길이멀다
14
Close Friend of a Close Friend (CFOACF) 추천
• FOAF 추천 알고리즘에 친밀도를 추가한 알고리즘
• A의 추천친구 집합 = F(A, B) 이고 F(B, C)인 C들의 집합
• I(A, B) = A B의 친밀도 (A에서 B로의 소통량을 수치로 표시)
9
Score of C = I(A, Bi) * I(Bi, C)
1
2
5
2
1
155
아이유
직장동료
팀장님
친구2
친구1
친구3
갈길이멀다
15
Close Friend of a Close Friend (CFOACF) 추천
• FOAF 추천 알고리즘에 친밀도를 추가한 알고리즘
• A의 추천친구 집합 = F(A, B) 이고 F(B, C)인 C들의 집합
• I(A, B) = A B의 친밀도 (A에서 B로의 소통량을 수치로 표시)
16
Score of C = I(A, Bi) * I(Bi, C)
2
5
2
5
3
2
5
아이유
직장동료
팀장님
친구2
친구1
친구3
갈길이멀다
16
Close Friend of a Close Friend (CFOACF) 추천
• FOAF 추천 알고리즘에 친밀도를 추가한 알고리즘
• A의 추천친구 집합 = F(A, B) 이고 F(B, C)인 C들의 집합
• I(A, B) = A B의 친밀도 (A에서 B로의 소통량을 수치로 표시)
20
Score of C = I(A, Bi) * I(Bi, C)
5 455
아이유
직장동료
팀장님
친구2
친구1
친구3
갈길이멀다
17
Close Friend of a Close Friend (CFOACF) 추천
• 친밀도 값의 산정 프로세스
Feedback !!
관심친구, 댓글,미투, 친구 맺은 기간
18
Next Contents
• SNS에서의 친구추천
• 친구추천 알고리즘
•친구추천 시스템의구현
• Social Network에적합한데이터모델링
• Graph Product의고려
•친구수가많은사용자로인한성능저하극복
•친구추천시스템의확장성문제
• 결롞 및 향후 작업
19
Social Network에적합한데이터모델링
• Social Network 모델링 기법 비교
User Nodes
1
2
3
5
6
8
9
List of
Friend
user_no friend_no
1 5
1 9
1 8
2 3
2 8
3 5
3 8
3 9
3 2
. .
. .
. .
9 6
8
5
1
3
2
9 6
<Social Network>
<Graph Model>
<Relational Model>
5 - 9 - 8
3 - 8
5 - 8 - 9 - 2
8 - 1 - 3
9 - 8
1 - 5 - 3 - 2 - 6
1 - 3 - 6
20
• Relational Model의 쿼리 방법
Joinor재쿼리
<User, Friend>
Social Network에적합한데이터모델링
21
• Graph Model의 쿼리 방법
Just Tracking Reference Pointer !
Social Network에적합한데이터모델링
22
• 실험: 25만 명의 친구를 가진 사용자의 “친구의 친구” 구하기
• Result (Count : 9,060,712)
Relational Model Graph Model
ResponseTime
5.9 sec 0.15 sec
Social Network에적합한데이터모델링
40X
23
Graph Product의고려
• Graph Products Features
Comparisons Graph Framework Graph Database
Data Durability Medium-Low Medium-High
Cache hit-ratio 100 % Depend on Workload
Suitable Workload Batch Job Real-time Job
Products
TinkerPop’s TinkerGraph
Google’s Pregel
MS’s Trinity
Neo Tech’s Neo4j
Twitter’s FlockDB
Orient Tech’s OrientDB
※ Google, Inc, (2010), “Pregel : A System for Large-Scale Graph Processing”“http://www.tinkerpop.com/”, “http://www.graph-database.org/”
24
• Graph Products Evaluation
HighLow
Low
High
Performance
AvailabilityTinkerGraph
Neo4j
OrientDB
FlockDB Pregel
Graph Product의고려
※ “http://markorodriguez.com”, “http://www.orientechnologies.com/”
25
• 친구추천 시스템의 구현
• TinkerGraph의 구현방식을 참고
• Availability 향상을 위해 Replication Failover 기능 구현
Graph Product의고려
Suggestion Result
Stand-byBatch ServerMaster
Batch Server
Friendships
26
친구수가많은사용자로인한성능저하극복
• 친구수가 많은 사용자
• 본인과 친구들의 추천 연산의 성능을 저하 시킴
• 이러한 사용자의 친구수는 급격한 속도로 증가하고 있음
265 X
27
친구수가많은사용자로인한성능저하극복
• Dunbar’s Number
• 친밀한 관계의 한계는 150명~200명 사이라는 이롞
※ Robin Dunbar, (2010), “How Many friends Does One Person Need?”.
친구 수 많아 봐야진짜 친구는 150명이야!~
28
친구수가많은사용자로인한성능저하극복
• 친밀도 순으로 150명만 남겨놓고 나머지는 제거
29
• Result
친구수가많은사용자로인한성능저하극복
RelationalGraph(All)
Graph(Top 150)
ResponseTime
5.9 sec 0.15 sec 0.0005 sec300X 40X
30
• Result
All Top 150
ResultCount
9,060,712 14,912
Memory 900 MB 608 MB
LoadTime
37.1 sec 28.8 sec
친구수가많은사용자로인한성능저하극복
32%
23%
99%
31
Batch Server Batch Server
친구추천시스템의확장성문제
Batch Server
아흑!1대의 메모리를
넘어가면 어쩌지?
• Social Network의 급격한 성장
32
Batch Server
• 1안
• 메모리를 넘어서는 데이터는 SSD에 저장
• 캐시 알고리즘(LRU, LFU)에 따라 메모리에 데이터를 유지
Batch Server
SSD
친구추천시스템의확장성문제
33
Batch Server 1 Batch Server 2 Batch Server 3 Batch Server 4
Remote Cache Cloud
• 2안
• 그래프를 분류 알고리즘으로 분산해서 저장
• Local 메모리에서 miss시에 Remote Cache Cloud를 참조함
친구추천시스템의확장성문제
34
Next Contents
• SNS에서의 친구추천
• 친구추천 알고리즘
• 친구추천 시스템의 구현
•결론및향후작업
35
결론및향후작업
• 친구추천 시스템 구현을 위해 다음의 방안들을 적용함
• Graph Model의 도입
• Pruning Edges using Dunbar’s Number
• Scalable Distributed Architecture
• 오픈 후 싞규 친구관계의 약 20%가 친구추천으로 맺어지고 있음
• 추천 알고리즘 정교화와 Scalability 확보는 계속 진행 중임
36
37
참고문헌
• Jilin Chen, (2009), “Recommending People on Social Networking Sites”.
• Robin Dunbar, (2010), “How Many friends Does One Person Need”.
• RENZO ANGLES, (2008), “Survey of Graph database models”, ACM
Computing Surveys.
• Marko A. Rodriguez, (2010), “Graph Traversal Programming Pattern”.
• HANNEMAN, R. A, (2001), “Introduction to social network methods”.
• TinkerPop, “TinkerGraph”.
http://github.com/tinkerpop/gremlin/wiki/tinkergraph
• Grzegorz Malewicz, (2010), “Pregel : A System for Large-Scale Graph
Processing”, Google, Inc.
• Microsoft, “Trinity”, http://research.microsoft.com/en-us/projects/trinity/
38
참고문헌
• Neo Technology, “Neo4j : the Graph database”. www.neo4j.org
• Twitter, “FlockDB”,
https://github.com/twitter/flockdb/blob/master/doc/blog.md
• Orient Technologies, “OrientDB”, http://www.orientechnologies.com/
• Marko A. Rodriguez, “MySQL vs. Neo4j on a Large-Scale Graph Traversal”,
http://markorodriguez.com/2011/02/18/mysql-vs-neo4j-on-a-large-scale-
graph-traversal/