2013-01-25 23 views
5

Tôi đang xây dựng một trang web cho phép người dùng 'theo dõi' các thành viên khác nhau và bất cứ khi nào thành viên đó đăng, nó sẽ thêm nó vào tất cả các luồng hoạt động của người theo dõi theo trình tự thời gian đảo ngược. Khá phổ biến những thứ ngày nay.Làm cách nào để sử dụng redis để triển khai luồng hoạt động?

Nhưng tôi đang gặp khó khăn khi xác định cách có khả năng mở rộng/tương lai nhất để thực hiện điều này (không có tham gia).

Tôi đang sử dụng bình/heroku/sqlalchemy/postgres. Tôi đang suy nghĩ bằng cách sử dụng addon Redis mở và làm một cái gì đó như instagram đề cập: mỗi người dùng có một danh sách redis và bất cứ khi nào một bài viết 'theo sau', nó thêm bài vào đầu mỗi danh sách theo và trims tổng kích thước của nó.

Tôi chỉ không biết đủ về redis để biết liệu có an toàn khi dựa vào nó cho mỗi người dùng phát trực tuyến hay không. Với redis mở, họ không đề cập đến bất cứ điều gì về sự kiên trì vì vậy tôi không biết nếu đó chỉ là một điều phổ biến đủ những ngày này mà nó chỉ là giả định.

Nếu redis không phải là 100% đáng tin cậy/an toàn, bất kỳ suy nghĩ về cách tôi có thể làm điều này với postgres/Hstore (không có tham gia xin vui lòng).

+0

Sẽ tốt để đọc bài viết này về redis persistence http://oldblog.antirez.com/post/redis-persistence-demystified.html –

Trả lời

1

Tôi nghĩ nó đủ an toàn. Redis hỗ trợ hai dạng persistence. Bạn có thể định cấu hình sự kiên trì AOF, do đó bạn có thể sẽ không mất bất kỳ dữ liệu nào trong trường hợp có sự cố.

Redis là phần mềm tương đối đơn giản và không dễ bị lỗi. Bằng chứng giai thoại của tôi là một ứng dụng trong đó mọi thứ được lưu trữ trong Redis. Nó hiện đang lưu trữ khoảng 340k phím trong Redis cho khoảng 220k người dùng và thông tin liên quan. Redis chưa bao giờ gặp sự cố hoặc gặp bất kỳ sự cố nào. Ứng dụng đã chạy được gần 6 tháng và tôi chỉ khởi động lại Redis khi khởi động lại máy chủ vài lần.

1

Tên cho những gì bạn đang thực hiện được gọi là "tắt tiếng khi viết" và có một số thảo luận hay về cách này và các cách tiếp cận khác tại đây: http://www.quora.com/Activity-Streams/What-are-the-scaling-issues-to-keep-in-mind-while-developing-a-social-network-feed.

Có thực sự là một bài đăng về việc này đặc biệt với Redis tại đây: http://nosql.mypopescu.com/post/4588381681/activity-feeds-with-redis.

Một điều tôi cảnh báo mọi người là mở rộng quy mô sớm - hãy làm gì với những gì hiệu quả cho đến khi bạn cần tiếp tục. Việc sử dụng Redis của bạn sẽ khá an toàn cho đến khi có quy mô khá cao.

Đây là một bài đăng cũ, vì vậy có thể bạn đã hoàn thành quá khứ trong dự án này, nhưng đối với bất kỳ ai đang mạo hiểm xuống con đường này, bạn có thể sử dụng dịch vụ để xử lý luồng hoạt động cho bạn. Tiết lộ đầy đủ: dịch vụ của công ty tôi, Collabinate (http://www.collabinate.com) được thiết kế rõ ràng để tạo luồng hoạt động xây dựng rất đơn giản, hiệu suất và có thể mở rộng.

3

Chúng tôi xây dựng một giải pháp cho cộng đồng thời trang trực tuyến lớn thứ 2 và mở nguồn tiếp cận của chúng tôi: https://github.com/tschellenbach/Feedly Đó là hiện thư viện mã nguồn mở lớn nhất nhằm giải quyết vấn đề này. Bạn có thể sử dụng cả Redis và Cassandra làm phụ trợ lưu trữ.

Chúng tôi đã chạy trên Redis trong hơn một năm mà không gặp bất kỳ sự cố nào. Nếu thiết lập đúng cách nó chạy cực kỳ ổn định và không có khả năng mất dữ liệu.

Nhóm tương tự đã xây dựng Feedly cũng cung cấp API được lưu trữ, xử lý sự phức tạp cho bạn. Có một cái nhìn tại getstream.io Có thư viện khách hàng cho Python, PHP, Node và Ruby.

Bên cạnh đó có một cái nhìn tại bưu khả năng mở rộng cao này là chúng tôi giải thích một số các quyết định thiết kế tham gia: http://highscalability.com/blog/2013/10/28/design-decisions-for-scaling-your-high-traffic-feeds.html

This tutorial sẽ giúp bạn thiết lập một hệ thống như thức ăn Pinterest bằng cách sử dụng Redis. Nó khá dễ dàng để bắt đầu.

Để tìm hiểu thêm về thiết kế thức ăn tôi khuyên bạn nên đọc một số bài báo mà chúng tôi dựa Feedly trên:

Các vấn đề liên quan