SlideShare a Scribd company logo
Design a scalable social network
Problems and solutions
Châu Nguyễn Nhật Thanh
December 8, 2016
Head of Game Backend and Cloud - VNG Corp.
Table of contents
1. Giới thiệu
2. Các module chính của MXH
3. Trang chủ
4. FriendList
5. Feed
6. Bonus
1
Giới thiệu
Về bản thân
Well-known as a:
• Technical Lead of ZingMe platform
• Technical Lead of Cyber Station Manager
• Co-Founder of VNG IoT LabGuest
Speaker at:
• PHPDay 2010, 2011, 2012
• Grokking Engineer
• Vietnam Web Submit
2
Các module chính của MXH
Trang chủ
Figure 1: Trang chủ facebook
3
Danh sách bạn bè
Figure 2: Facebook friend list
4
Photo
Figure 3: Facebook photo 5
Trang chủ
Thách thức
Cách làm thông thường:
• Web server kết nối đến
DB server
• Mỗi chức năng thể hiện
bằng 1 hoặc nhiều table
Với cách làm này:
• Latency cao do phải query vào nhiều bảng khác nhau
• Quá phức tạp khi thêm mới, nâng cấp tính năng
6
Giải pháp
Dùng cache để giảm
latency:
• Kết quả trả về từ
DB sẽ được lưu vào
cache
• Lần tiếp theo sẽ
truy cập vào cache
Figure 4: Numbers Everyone should
know,Jeff Dean, Google
7
Giải pháp
Để giảm độ phức tạp và dễ
dàng nâng cấp
• Tách thành những nhóm
nghiệp vụ nhỏ (service)
• Mỗi nhóm nghiệp vụ là 1
hệ thống độc lâp có
interface vào ra
• Các nhóm nghiệp vụ
tương tác nhau qua
interface này Figure 5: divide and conquer
8
Giải pháp
Figure 6: SNS components 9
FriendList
Thách thức
• Mỗi user có danh sách n bạn (fb=unlimited,zme=500,5K)
• Mỗi user có danh sách những người follow mình
• Thách thức
1. Kiểm tra xem 1 user nào đó có phải là bạn hay không?
2. Kiểm tra 1 user nào đó có đang follow ai không ?
3. Hôm nay là sinh nhật ai trong danh sách bạn mình ?
10
Giải pháp
1. Kiểm tra xem 1 user nào đó có phải là bạn hay không?
• Mỗi user có danh sách bạn là 1 tập hợp
• Thao tác tìm 1 user có phải là bạn không tương đương
với việc kiểm tra 1 phần tử có thuộc tập hợp đó không
• Redis cmd: SADD userId friendId, SISMEMBER userId
friendId
• Tìm bạn chung SINTER userIdA, userIdB, userIdC
11
Giải pháp
2. Kiểm tra 1 user nào đó có đang follow ai không ?
• Mỗi user có danh sách bạn là 1 bitmap (chuỗi bit 2 mũ
32 phần tử)
• Thao tác tìm 1 user có phải là bạn không tương đương
với việc kiểm tra bit tại vị trí thứ userId có bật lên không
• Redis cmd: SETBIT userId friendId 1, GETBIT userId
friendId
• Có vấn đề gì không??? BitMagic
12
Giải pháp
Figure 7: Follower list
13
Giải pháp
3. Hôm nay là sinh nhật ai trong danh sách bạn mình ?
• Mỗi ngày thứ n trong năm là 1 bitmap với vị trí thứ i
trong bitmap là userId thứ i có ngày sinh là ngày thứ n
trong năm
• Thao tác tìm trong danh sách bạn bè có ngày sinh là
ngày thứ n trong năm bằng cách lấy danh sách bạn dạng
bitmap and với bitmap ngày thứ n ở trên và lấy ra tập
các vị trí bằng 1
14
Giải pháp
Figure 8: Sinh nhật bạn bè
15
Feed
Thách thức
• Mỗi user có danh sách n bạn (fb=unlimited,zme=500,5K)
• Khi user thực hiện 1 hành động thì bạn bè của người đó
sẽ thấy hoạt động đó
• Thách thức
1. Kiến trúc như thế nào để đảm bảo latency?
2. Lưu trữ như thế nào để tiết kiệm storage mà vẫn đảm
bảo tốc độ truy cập?
16
Giải pháp
• Feed sẽ được lưu
trữ thành feedItem
và feedIdList
• Mỗi user có 1 danh
sách lưu trữ các
feedId tương ứng
với các action
(photo,blog...)
• Có 2 phương pháp
PUSH và PULL Figure 9: Chiến lược hiện thực hệ
thống news feed
17
Giải pháp
Figure 10: http://www.slideshare.net/mongodb/socialite-the-
open-source-status-feed
18
Giải pháp
Figure 11: http://www.slideshare.net/mongodb/socialite-the-
open-source-status-feed
19
Bonus
http://swagger.io/swagger-editor/
Figure 12: http://www.slideshare.net/pvullioud/swagger-
45508232?smtNoRedir=1
20
Hỏi đáp
21
The end
22

More Related Content

Similar to Design a scalable social network: Problems and solutions (20)

ODP
Neo4j
Tuan Bq
 
PPT
Zing
hazzaz
 
PDF
Zing Me & PHP
Long Dao
 
PPT
Cuộc thi lập trình viết ứng dụng trên Zing me
Hai Le
 
PPTX
Slides for project about data management
minh01212929979
 
PPTX
Báo cáo bài tập Lưu trữ và xử lý dữ liệu lớn.pptx
Bách Nguyễn
 
PDF
Dsd02 sta
Văn Đào Tiến
 
DOC
Luận Văn Đề Cương Công Nghệ Thông Tin Lập Trình Mạng.doc
sividocz
 
PDF
Tiểu luận_Phương Pháp Sáng Tạo Ứng Dụng Trong Mạng Xã Hội (download tai taili...
Tuyen Thu
 
PPT
Rubik tachtach opensocial-1.2
Pham Cang
 
PPT
Giới thiệu môn học
Nguyen Tran
 
PPTX
Uml diagram type
Minhtuan Chau
 
PDF
Cơ sở dữ liệu và giải thuật Vũ Song Tùng
dtrhung_vtbk
 
PDF
Dhhh ctdlgt bai giang cau truc du lieu
saobien44
 
PPTX
SLIDE CAU TRUC DL_GT.pptx
TrangNguyen211415
 
PDF
Zing osapi v1.3.3
Truong Truong
 
DOC
Cong nghe frame relay - chuong 2
VNG
 
PDF
Ứng dụng Facebook open graph là gì?
AIT-JSC
 
PDF
Cấu trúc dữ liệu cơ bản 1
Hồ Lợi
 
Neo4j
Tuan Bq
 
Zing
hazzaz
 
Zing Me & PHP
Long Dao
 
Cuộc thi lập trình viết ứng dụng trên Zing me
Hai Le
 
Slides for project about data management
minh01212929979
 
Báo cáo bài tập Lưu trữ và xử lý dữ liệu lớn.pptx
Bách Nguyễn
 
Luận Văn Đề Cương Công Nghệ Thông Tin Lập Trình Mạng.doc
sividocz
 
Tiểu luận_Phương Pháp Sáng Tạo Ứng Dụng Trong Mạng Xã Hội (download tai taili...
Tuyen Thu
 
Rubik tachtach opensocial-1.2
Pham Cang
 
Giới thiệu môn học
Nguyen Tran
 
Uml diagram type
Minhtuan Chau
 
Cơ sở dữ liệu và giải thuật Vũ Song Tùng
dtrhung_vtbk
 
Dhhh ctdlgt bai giang cau truc du lieu
saobien44
 
SLIDE CAU TRUC DL_GT.pptx
TrangNguyen211415
 
Zing osapi v1.3.3
Truong Truong
 
Cong nghe frame relay - chuong 2
VNG
 
Ứng dụng Facebook open graph là gì?
AIT-JSC
 
Cấu trúc dữ liệu cơ bản 1
Hồ Lợi
 

More from Chau Thanh (8)

PPT
ZaloPay Merchant Platform on K8S on-premise
Chau Thanh
 
PDF
ZaloPay Merchant Platform on K8S on-premise
Chau Thanh
 
PDF
Cache hcm-topdev
Chau Thanh
 
PDF
Design a scalable site: Problem and solutions
Chau Thanh
 
PDF
Design a scalable social network: Problems and Solutions
Chau Thanh
 
PDF
IoT and developer chances
Chau Thanh
 
PDF
Zing Me Real Time Web Chat Architect
Chau Thanh
 
PDF
Zingme practice for building scalable website with PHP
Chau Thanh
 
ZaloPay Merchant Platform on K8S on-premise
Chau Thanh
 
ZaloPay Merchant Platform on K8S on-premise
Chau Thanh
 
Cache hcm-topdev
Chau Thanh
 
Design a scalable site: Problem and solutions
Chau Thanh
 
Design a scalable social network: Problems and Solutions
Chau Thanh
 
IoT and developer chances
Chau Thanh
 
Zing Me Real Time Web Chat Architect
Chau Thanh
 
Zingme practice for building scalable website with PHP
Chau Thanh
 
Ad

Design a scalable social network: Problems and solutions

  • 1. Design a scalable social network Problems and solutions Châu Nguyễn Nhật Thanh December 8, 2016 Head of Game Backend and Cloud - VNG Corp.
  • 2. Table of contents 1. Giới thiệu 2. Các module chính của MXH 3. Trang chủ 4. FriendList 5. Feed 6. Bonus 1
  • 4. Về bản thân Well-known as a: • Technical Lead of ZingMe platform • Technical Lead of Cyber Station Manager • Co-Founder of VNG IoT LabGuest Speaker at: • PHPDay 2010, 2011, 2012 • Grokking Engineer • Vietnam Web Submit 2
  • 5. Các module chính của MXH
  • 6. Trang chủ Figure 1: Trang chủ facebook 3
  • 7. Danh sách bạn bè Figure 2: Facebook friend list 4
  • 10. Thách thức Cách làm thông thường: • Web server kết nối đến DB server • Mỗi chức năng thể hiện bằng 1 hoặc nhiều table Với cách làm này: • Latency cao do phải query vào nhiều bảng khác nhau • Quá phức tạp khi thêm mới, nâng cấp tính năng 6
  • 11. Giải pháp Dùng cache để giảm latency: • Kết quả trả về từ DB sẽ được lưu vào cache • Lần tiếp theo sẽ truy cập vào cache Figure 4: Numbers Everyone should know,Jeff Dean, Google 7
  • 12. Giải pháp Để giảm độ phức tạp và dễ dàng nâng cấp • Tách thành những nhóm nghiệp vụ nhỏ (service) • Mỗi nhóm nghiệp vụ là 1 hệ thống độc lâp có interface vào ra • Các nhóm nghiệp vụ tương tác nhau qua interface này Figure 5: divide and conquer 8
  • 13. Giải pháp Figure 6: SNS components 9
  • 15. Thách thức • Mỗi user có danh sách n bạn (fb=unlimited,zme=500,5K) • Mỗi user có danh sách những người follow mình • Thách thức 1. Kiểm tra xem 1 user nào đó có phải là bạn hay không? 2. Kiểm tra 1 user nào đó có đang follow ai không ? 3. Hôm nay là sinh nhật ai trong danh sách bạn mình ? 10
  • 16. Giải pháp 1. Kiểm tra xem 1 user nào đó có phải là bạn hay không? • Mỗi user có danh sách bạn là 1 tập hợp • Thao tác tìm 1 user có phải là bạn không tương đương với việc kiểm tra 1 phần tử có thuộc tập hợp đó không • Redis cmd: SADD userId friendId, SISMEMBER userId friendId • Tìm bạn chung SINTER userIdA, userIdB, userIdC 11
  • 17. Giải pháp 2. Kiểm tra 1 user nào đó có đang follow ai không ? • Mỗi user có danh sách bạn là 1 bitmap (chuỗi bit 2 mũ 32 phần tử) • Thao tác tìm 1 user có phải là bạn không tương đương với việc kiểm tra bit tại vị trí thứ userId có bật lên không • Redis cmd: SETBIT userId friendId 1, GETBIT userId friendId • Có vấn đề gì không??? BitMagic 12
  • 18. Giải pháp Figure 7: Follower list 13
  • 19. Giải pháp 3. Hôm nay là sinh nhật ai trong danh sách bạn mình ? • Mỗi ngày thứ n trong năm là 1 bitmap với vị trí thứ i trong bitmap là userId thứ i có ngày sinh là ngày thứ n trong năm • Thao tác tìm trong danh sách bạn bè có ngày sinh là ngày thứ n trong năm bằng cách lấy danh sách bạn dạng bitmap and với bitmap ngày thứ n ở trên và lấy ra tập các vị trí bằng 1 14
  • 20. Giải pháp Figure 8: Sinh nhật bạn bè 15
  • 21. Feed
  • 22. Thách thức • Mỗi user có danh sách n bạn (fb=unlimited,zme=500,5K) • Khi user thực hiện 1 hành động thì bạn bè của người đó sẽ thấy hoạt động đó • Thách thức 1. Kiến trúc như thế nào để đảm bảo latency? 2. Lưu trữ như thế nào để tiết kiệm storage mà vẫn đảm bảo tốc độ truy cập? 16
  • 23. Giải pháp • Feed sẽ được lưu trữ thành feedItem và feedIdList • Mỗi user có 1 danh sách lưu trữ các feedId tương ứng với các action (photo,blog...) • Có 2 phương pháp PUSH và PULL Figure 9: Chiến lược hiện thực hệ thống news feed 17
  • 24. Giải pháp Figure 10: http://www.slideshare.net/mongodb/socialite-the- open-source-status-feed 18
  • 25. Giải pháp Figure 11: http://www.slideshare.net/mongodb/socialite-the- open-source-status-feed 19
  • 26. Bonus