Transcript
Page 1: SDEC2011 Implementing me2day friend suggestion

1

Implementing

me2day Friend Suggestion

NHN

미투데이인프라개발팀

강호성

Page 2: SDEC2011 Implementing me2day friend suggestion

2

Implementing

me2day Friend Suggestion

NHN

미투데이인프라개발팀

강호성

Page 3: SDEC2011 Implementing me2day friend suggestion

3

Contents

• SNS에서의 친구추천

• 친구추천 알고리즘

• 친구추천 시스템의 구현

• 결롞 및 향후 작업

Page 4: SDEC2011 Implementing me2day friend suggestion

4

Page 5: SDEC2011 Implementing me2day friend suggestion

5

Page 6: SDEC2011 Implementing me2day friend suggestion

6

가입했는데친구 없어서 심심해..나도 미친 좀 사귀어보자!

불쌍하다고 4명 싞청해주고..그마저도 홍보미투ㅠㅠ

허이고.. 불쌍하다 불쌍해! 옛다!미투 한 개 찍어줌.

Page 7: SDEC2011 Implementing me2day friend suggestion

7

SNS에서의친구추천

• 사용자에게 새로운 친구를 사귈 수 있도록 도와주는 장치

• 친구수가 적은 유저에게 유용함

SNS = 블로그?친구추천이 뜨네친구싞청 해볼까?

이제야 SNS의 묘미를알겠다~

Page 8: SDEC2011 Implementing me2day friend suggestion

8

me2day에서의친구추천

Page 9: SDEC2011 Implementing me2day friend suggestion

9

me2day에서의친구추천

추천하는 사람들

공통된 친구들

Page 10: SDEC2011 Implementing me2day friend suggestion

10

Next Contents

• SNS에서의 친구추천

•친구추천 알고리즘

• Friend of a Friend 추천

• Close Friend of a Close Friend 추천

• 친구추천 시스템의 구현

• 결롞 및 향후 작업

Page 11: SDEC2011 Implementing me2day friend suggestion

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

갈길이멀다

Page 12: SDEC2011 Implementing me2day friend suggestion

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

갈길이멀다

Page 13: SDEC2011 Implementing me2day friend suggestion

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

갈길이멀다

Page 14: SDEC2011 Implementing me2day friend suggestion

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

갈길이멀다

Page 15: SDEC2011 Implementing me2day friend suggestion

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

갈길이멀다

Page 16: SDEC2011 Implementing me2day friend suggestion

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

갈길이멀다

Page 17: SDEC2011 Implementing me2day friend suggestion

17

Close Friend of a Close Friend (CFOACF) 추천

• 친밀도 값의 산정 프로세스

Feedback !!

관심친구, 댓글,미투, 친구 맺은 기간

Page 18: SDEC2011 Implementing me2day friend suggestion

18

Next Contents

• SNS에서의 친구추천

• 친구추천 알고리즘

•친구추천 시스템의구현

• Social Network에적합한데이터모델링

• Graph Product의고려

•친구수가많은사용자로인한성능저하극복

•친구추천시스템의확장성문제

• 결롞 및 향후 작업

Page 19: SDEC2011 Implementing me2day friend suggestion

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

Page 20: SDEC2011 Implementing me2day friend suggestion

20

• Relational Model의 쿼리 방법

Joinor재쿼리

<User, Friend>

Social Network에적합한데이터모델링

Page 21: SDEC2011 Implementing me2day friend suggestion

21

• Graph Model의 쿼리 방법

Just Tracking Reference Pointer !

Social Network에적합한데이터모델링

Page 22: SDEC2011 Implementing me2day friend suggestion

22

• 실험: 25만 명의 친구를 가진 사용자의 “친구의 친구” 구하기

• Result (Count : 9,060,712)

Relational Model Graph Model

ResponseTime

5.9 sec 0.15 sec

Social Network에적합한데이터모델링

40X

Page 23: SDEC2011 Implementing me2day friend suggestion

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/”

Page 24: SDEC2011 Implementing me2day friend suggestion

24

• Graph Products Evaluation

HighLow

Low

High

Performance

AvailabilityTinkerGraph

Neo4j

OrientDB

FlockDB Pregel

Graph Product의고려

※ “http://markorodriguez.com”, “http://www.orientechnologies.com/”

Page 25: SDEC2011 Implementing me2day friend suggestion

25

• 친구추천 시스템의 구현

• TinkerGraph의 구현방식을 참고

• Availability 향상을 위해 Replication Failover 기능 구현

Graph Product의고려

Suggestion Result

Stand-byBatch ServerMaster

Batch Server

Friendships

Page 26: SDEC2011 Implementing me2day friend suggestion

26

친구수가많은사용자로인한성능저하극복

• 친구수가 많은 사용자

• 본인과 친구들의 추천 연산의 성능을 저하 시킴

• 이러한 사용자의 친구수는 급격한 속도로 증가하고 있음

265 X

Page 27: SDEC2011 Implementing me2day friend suggestion

27

친구수가많은사용자로인한성능저하극복

• Dunbar’s Number

• 친밀한 관계의 한계는 150명~200명 사이라는 이롞

※ Robin Dunbar, (2010), “How Many friends Does One Person Need?”.

친구 수 많아 봐야진짜 친구는 150명이야!~

Page 28: SDEC2011 Implementing me2day friend suggestion

28

친구수가많은사용자로인한성능저하극복

• 친밀도 순으로 150명만 남겨놓고 나머지는 제거

Page 29: SDEC2011 Implementing me2day friend suggestion

29

• Result

친구수가많은사용자로인한성능저하극복

RelationalGraph(All)

Graph(Top 150)

ResponseTime

5.9 sec 0.15 sec 0.0005 sec300X 40X

Page 30: SDEC2011 Implementing me2day friend suggestion

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%

Page 31: SDEC2011 Implementing me2day friend suggestion

31

Batch Server Batch Server

친구추천시스템의확장성문제

Batch Server

아흑!1대의 메모리를

넘어가면 어쩌지?

• Social Network의 급격한 성장

Page 32: SDEC2011 Implementing me2day friend suggestion

32

Batch Server

• 1안

• 메모리를 넘어서는 데이터는 SSD에 저장

• 캐시 알고리즘(LRU, LFU)에 따라 메모리에 데이터를 유지

Batch Server

SSD

친구추천시스템의확장성문제

Page 33: SDEC2011 Implementing me2day friend suggestion

33

Batch Server 1 Batch Server 2 Batch Server 3 Batch Server 4

Remote Cache Cloud

• 2안

• 그래프를 분류 알고리즘으로 분산해서 저장

• Local 메모리에서 miss시에 Remote Cache Cloud를 참조함

친구추천시스템의확장성문제

Page 34: SDEC2011 Implementing me2day friend suggestion

34

Next Contents

• SNS에서의 친구추천

• 친구추천 알고리즘

• 친구추천 시스템의 구현

•결론및향후작업

Page 35: SDEC2011 Implementing me2day friend suggestion

35

결론및향후작업

• 친구추천 시스템 구현을 위해 다음의 방안들을 적용함

• Graph Model의 도입

• Pruning Edges using Dunbar’s Number

• Scalable Distributed Architecture

• 오픈 후 싞규 친구관계의 약 20%가 친구추천으로 맺어지고 있음

• 추천 알고리즘 정교화와 Scalability 확보는 계속 진행 중임

Page 36: SDEC2011 Implementing me2day friend suggestion

36

Page 37: SDEC2011 Implementing me2day friend suggestion

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/

Page 38: SDEC2011 Implementing me2day friend suggestion

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/