Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Design a scalable social network: Problems and solutions

992 vues

Publié le

Vietnam web submit

Publié dans : Internet
  • Thanks for sharing. Note that you can use the open source stream-framework with either Cassandra, Scylladb or Redis: https://github.com/tschellenbach/stream-framework also might want to check out the hosted getstream.io based on Golang and rocksdb (similar to linkedin's feed tech). https://getstream.io/
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici

Design a scalable social network: Problems and solutions

  1. 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. 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
  3. 3. Giới thiệu
  4. 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. 5. Các module chính của MXH
  6. 6. Trang chủ Figure 1: Trang chủ facebook 3
  7. 7. Danh sách bạn bè Figure 2: Facebook friend list 4
  8. 8. Photo Figure 3: Facebook photo 5
  9. 9. Trang chủ
  10. 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. 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. 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. 13. Giải pháp Figure 6: SNS components 9
  14. 14. FriendList
  15. 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. 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. 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. 18. Giải pháp Figure 7: Follower list 13
  19. 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. 20. Giải pháp Figure 8: Sinh nhật bạn bè 15
  21. 21. Feed
  22. 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. 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. 24. Giải pháp Figure 10: http://www.slideshare.net/mongodb/socialite-the- open-source-status-feed 18
  25. 25. Giải pháp Figure 11: http://www.slideshare.net/mongodb/socialite-the- open-source-status-feed 19
  26. 26. Bonus
  27. 27. http://swagger.io/swagger-editor/ Figure 12: http://www.slideshare.net/pvullioud/swagger- 45508232?smtNoRedir=1 20
  28. 28. Hỏi đáp 21
  29. 29. The end 22

×