38
Implementing me2day Friend Suggestion NHN 미투데이인프라개발팀 강호성

SDEC2011 Implementing me2day friend suggestion

Embed Size (px)

DESCRIPTION

In the SNS domain, Response time of Friend Suggestion Algorithms and several SNA algorithms is in direct proportion to square of relationship number. In addition, increasing rate of relationship number is bigger and bigger. But existing usage pattern of Relational DB is suffering poor performance. To guarantee performance and scalability, we have developed such methods for Friend Suggestion and SNARelation Pruning using intimacy valueNo Join & Keeping all Data in-Memory StrategyDistributed Graph Structure

Citation preview

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/