2. 내용
I. 모아보기란?
II. 싸이월드 서비스의 특징
III. 모아보기를 제공 하기 위해 고려 되어야 할 점
IV. SONIC 구성
V. SONIC 세부 구조
VI. 질문 / 답변
2
3. 모아보기란?
SONIC 시스템을 이용, 싸이월드 회원들의
활동을 뉴스 피드로 제공
SOcial Network Information Connector
일촌 / 팬 기반의 소식 전달
3가지 분류의 소식을 제공
자싞의 활동 내역
일촌/팬의 활동 내역
„나‟를 대상으로 한 활동내역
3
5. 싸이월드 서비스의 특징 (1/2)
공개 설정이 다양함
4개의 일촌 그룹 (1/2/3/4)
관심일촌
팬
5
6. 싸이월드 서비스의 특징 (2/2)
다양한 플랫폼 (플랫폼별 Data Format 상이)
미니홈피
싸이블로그
Clog
네이트
6
7. 모아보기를 제공 하기 위해 고려 되어야 할 점
피드 전달이 실 서비스에 •비동기 데이터 처리
영향을 주지 않음 •예) 태극 홈피 일촌 수 100만명
서비스의 변화에 •스크립트를 통한 비즈니스 로직 처리
유연하게 대응 가능 •서버 정지 없이 로직 변경 가능
•분당 8,000건의 새글 데이터
빈번한 데이터
•분당 600,000건의 피드 발송
삽입 / 수정 •DB 처리시 상당한 부하 예상
문서의 수정 및 일촌 그룹 •데이터의 중복 저장 시 과다한 수정 비용 발생
변경의 실시갂 반영 •키 데이터와 컨텐츠 데이터의 분리 저장
7
8. SONIC 시스템 구성
Sonicd 데몬 제작
비 동기 처리 가능
스크립트로 비즈니스 로직을 구성 가능
• 스크립트에 따라 로직이 바뀌므로 한 종류의 데몬으로 시스템 구성 가능
저장소 기능
• 자체 제작 B+tree 기반의 DB
• Message-Queue
• 각 삽입 / 수정 / 삭제 연산에 대해 트랜잭션 로그로 관리(장애 복구)
SONIC 시스템 구성
피드 = 키와 활동자 정보만 저장하는 토큰
피드에 저장된 키를 통해 데이터를 쿼리
Buddy
Feed/Inbox
Data Input (SVC) Dispatcher Meta Interface Query (WEB)
Contents DBCache
8
9. SONIC 세부 구조
각 사용자는 자싞의 저장소를 가짐
저장소에 „피드‟라는 작은 데이터만 저장
피드는 하나의 데이터에 여러 개가 생성
내부 키, 작성자, 초기 열람 권한, 서비스 종류 등
저장 공갂을 낭비하지 않기 위해 큰 데이터는 Contents 서버에 별도로 저장
회원당 3개의 목록 Feed/Inbox
내가 쓴 글 Query (WEB)
Interface
일촌/팬이 쓴 글
Contents DBCache
반가운 소식
A가 글을 작성 나에게 피드 발송 A의 내 모아보기
A A A A A
B의 일촌/팬 모아보기
일촌인 B,C에게 발송 모아보기 서비스
A C A D C
한 번에 모아보기 화면에
C의 일촌/팬 모아보기 필요한 데이터를 가져옴
A B D A E
9
10. SONIC 세부 구조
Dispatcher
피드 생성, 일촌변경 등 실제 Operation 수행
모아보기의 모든 데이터 입력 처리 (입력 데이터 분석)
외부 키 추출 후, 내부 키 매핑 작업
{SVC:”미니홈피 게시판”,
폴더번호 : 3, 게시글번호 :
501, 홈주인 : “나주인”,
제목 : “즐거운 모아보기”, 내
용 : “즐거운 세상~”, 폴더권
한 : “1촌공개-그룹1,3”, 글권
한 : “1촌공개”, …}
Buddy
Feed/Inbox
Query
Data Input (SVC) Dispatcher Meta Interface
Contents DBCache
10
11. SONIC 세부 구조
Meta-comment list
외부 데이터의 키를 Contents 서버의 UID와 연결
SVC Key -> UID (시계열 key – timestamp)
사용자 : 나주인 의 키 매핑 테이블
홈주인 : “나주인” 서비스 종류 폴더 번호 게시글 번호 발급된 키
미니홈피 게시판 3 495 12eef5718ef
서비스 종류 :
”미니홈피 게시판” 미니홈피 게시판 4 498 1300f5708ef
블로그 게시판 201 10071 1200f5708ef
폴더번호 : 3
게시글번호 : 501
Buddy
Feed/Inbox
Data Input Dispatcher Meta Interface Query
Contents DBCache
11
12. SONIC 세부 구조
Dispatcher
외부키 – 내부키 매핑이 없을 시 내부키 싞규 발급
매핑 테이블 저장 -> Meta 서버
내부 키 : UID (시계열 key – timestamp)
사용자 : 나주인 의 키 매핑 테이블
홈주인 : “나주인”
서비스 종류 폴더 번호 게시글 번호 발급된 키
서비스 종류 : 미니홈피 게시판 3 495 12eef5718ef
”미니홈피 게시판”
미니홈피 게시판 3 501 1400f0708ef
폴더번호 : 3 미니홈피 게시판 4 498 1300f5708ef
블로그 게시판 201 10071 1200f5708ef
게시글번호 : 501
Buddy
Feed/Inbox
Data Input Dispatcher Meta Interface Query
Contents DBCache
12
13. SONIC 세부 구조
Contents-Data
글 Feed의 실제 내용이 저장되는 서버
UID가 key인 B+tree 테이블 (Berkeley DB를 사용해 구현)
일부 필드 (공개권한, 댓글수, 폴더번호)는 부분 업데이트 기능을 제공
{ 1400f0708ef : 내부 키 (UID) 내용
{ SVC:”미니홈피 게시판”, 1400f0708ef {
폴더번호 : 3, SVC : ”미니홈피 게시판”,
게시글번호 : 501, 폴더번호 : 3,
홈주인 : “나주인”, 게시글번호 : 501,
제목 : “즐거운 모아보기”, 홈주인 : “나주인”,
내용 : “즐거운 세상~”, 제목 : “즐거운 모아보기”,
내용 : “즐거운 세상~”,
폴더권한 : “1촌공개-그룹1,3”,
폴더권한 : “1촌공개-그룹1,3”,
글권한 : “1촌공개”, … 글권한 : “1촌공개”
} }
}
Buddy
Feed/Inbox
Message Query (WEB)
Queue Dispatcher Meta Interface
Contents DBCache
13
14. SONIC 세부 구조
Dispatcher
피드 생성 후 발송
피드 : 서비스번호 + 내부키 + 활동자 + 피드 생성시 권한
발송 대상은 Buddy 서버로 부터 조회
Buddy
싸이월드 회원의 일촌/팬 관계를 가지고 있는 서버
• 항상 실시갂으로 일촌/팬DB와 동기화 중
{
서비스 : 미니홈피 게시판 글,
내부키 : 1400f0708ef.
작성자 : 박문자,
권한 : 1촌그룹 1,3에 공개
Buddy
}
Feed/Inbox
Message Query
Queue Dispatcher Meta Interface
Contents DBCache
14
15. SONIC 세부 구조
사용자 : 나주인 의 반가운 소식 테이블
서비스 종류 내부 키 활동자 권한
미니홈피 게시판 글 1400f0708ef 박문자 1촌 그룹 1,3에 공개
… … … …
사용자 : 박문자 의 내가 쓴 글 테이블
서비스 종류 내부 키 활동자 권한
미니홈피 게시판 글 1400f0708ef 박문자 1촌 그룹 1,3에 공개
… … … …
사용자 : 박문자 의 일촌 나일촌 의 일촌/팬 소식 테이블
서비스 종류 내부 키 활동자 권한
미니홈피 게시판 글 1400f0708ef 박문자 1촌 그룹 1,3에 공개
… … … …
{
서비스 : 미니홈피 게시판 글,
내부키 : 1400f0708ef.
작성자 : 박문자, Buddy
권한 : 1촌그룹 1,3에 공개
} Feed/Inbox
Dispatcher
15
16. SONIC 세부 구조
조회 시 동작 (Query)
HTTP request 수싞
홈주인 : 나주인
방문자 : 박문자
타입 : 내가 쓴 글
개수 : 20
Buddy
Feed/Inbox
Interface Query
Contents DBCache
16
17. SONIC 세부 구조
조회 시 동작
홈주인과 방문자가 다른 경우,
Buddy서버에서 홈주인과 방문자의 관계 쿼리
사용자 : 12345678 의 일촌 테이블
홈주인 : 나주인
일촌 그룹 관심일촌 수싞금지 설정
박문자 3 O 수신 허용
방문자 : 박문자
나일촌 1 X 수신금지 개수 : 20
… … … …
방문자는 홈주인의
Buddy 일촌 그룹 3에 속함
Feed/Inbox
Interface Query
Contents DBCache
17
18. SONIC 세부 구조
조회 시 동작
Feed-inbox 서버에서 공개 권한(그룹 3이 볼 수 있는)에 맞는 피드 n개 가져옴
데이터가 필요한 피드는 Contents서버나 외부 서비스 서버에서 내용을 가져옴
• 데이터가 삭제되거나 오류로 인해 조회할 수 없는 경우에는
해당 피드를 결과목록에서 제거
사용자 : 나주인 의 내가 쓴 글 테이블
서비스 종류 내부 키 활동자 권한
홈주인 : 나주인
미니홈피 게시판 글 1412f0708ef 나주인 1촌 그룹 1,3에 공개
… … … …
타입 : 내가 쓴 글
{ 1412f0708ef :
방문자 : 박문자
{ SVC:”미니홈피 게시판”, 폴더번호 : 3, 게시글번호 : 501, 개수 : 20
홈주인 : “나주인”, 제목 : “즐거운 모아보기”, 내용 : “즐거운 세상~”,
폴더권한 : “1촌공개-그룹1”, 글권한 : “1촌공개”, … } }
Buddy 방문자는 홈주인의
일촌 그룹 3에 속함
Feed/Inbox
Interface Query
Contents DBCache
18
19. SONIC 세부 구조
조회 시 동작
데이터의 공개권한을 보고 보여줄 수 없는 피드라면 결과목록에서 제거
• 예)
1) 최초 피드 발송시 공개권한 : 그룹 1, 3
2) 게시글 권한 수정으로 그룹 1에만 공개로 수정 홈주인 : 나주인
3) 최종 그룹 1에만 공개 권한이 있으므로 해당 피드 제거 타입 : 내가 쓴 글
방문자 : 박문자
결과목록의 피드 수가 부족하면 위의 과정을 다시 반복 개수 : 20
사용자 : 나주인 의 내가 쓴 글 테이블 { 1412f0708ef :
서비스 종류 내부 키 활동자 권한 { SVC:”미니홈피 게시판”, 폴더번호 : 3, 게시글번호 : 501,
홈주인 : “나주인”, 제목 : “즐거운 모아보기”, 내용 : “즐거운 세상~”,
미니홈피 게시판 글 1412f0708ef 나주인 1촌 그룹 1,3에 공개 폴더권한 : “1촌공개-그룹1”, 글권한 : “1촌공개”, … } }
… … … …
Buddy
Feed/Inbox
Interface Query
Contents DBCache
19