2010-11-04 29 views
5

Tôi hiện đang thiết kế một hệ thống mà chúng tôi cần biết liệu người dùng vẫn đang trực tuyến/đăng nhập.Thiết kế dịch vụ "Tôi còn sống"

Hệ thống này dựa trên web .Net, vì vậy chúng tôi dự định làm điều này bằng cách sử dụng mã AJAX/JSONP, sẽ ping máy chủ sau mỗi 2 phút.

Có một số lượng lớn người dùng, do đó, ping cứ 2 phút một lần gây ra ca. 600 ping mỗi giây.

Do đó, chúng tôi dự định đặt dịch vụ này trên máy chủ của chính nó và lưu trữ tất cả thông tin trong bộ nhớ bằng Velocity.

Bộ nhớ cache sẽ là bộ thừa kế các cặp giá trị được đặt tên, nhóm đầu tiên sau đó là người và dấu thời gian cho từng người.

Câu hỏi là chúng ta có thể ghi trực tiếp vào bộ đệm tốc độ cho mỗi ping không? Hoặc điều này có gây ra khóa không? Trước tiên chúng ta có nên ghi vào hàng đợi và sau đó cập nhật bộ nhớ cache từ hàng đợi không?

Đồng thời khi chúng tôi cập nhật bộ nhớ cache, sẽ có những người dùng khác yêu cầu thông tin theo từng nhóm.

+0

Đối với nhóm redis thứ được cách phù hợp tốt hơn: http://code.google.com/p/redis/wiki/SaddCommand ... Tôi nghi ngờ bạn cần phải lo lắng về khóa hoặc đồng thời khi truy cập vào vận tốc –

+0

http://msdn.microsoft.com/en-us/library/ee790890.aspx –

Trả lời

2

Tôi nghĩ bạn có thể thực hiện việc này nếu bạn có thể thay đổi mô hình của mình để căn cứ từng mục bộ nhớ cache xung quanh người dùng như được đề xuất làm nhóm người dùng như bạn đã đề cập. Nếu bạn yêu cầu khả năng truy vấn các mục này theo nhóm, bạn sẽ phải nghĩ ra cách để giữ một chỉ mục (có khả năng trong bộ nhớ) của các khóa và nhóm để truy vấn các mục theo (truy vấn rõ ràng sẽ là một điểm chậm).

này sẽ làm cho mất ổn định của bạn cập nhật cùng một mục cùng lúc gần nill (như mỗi khách hàng sẽ chỉ được cập nhật mỗi 2 phút)

này sẽ cho phép bạn tận dụng lợi thế của Lạc quan Concurrency Mô hình vận tốc như được thảo luận trên MSDN trên liên kết bên dưới, mà không làm mất bất kỳ dữ liệu nào.

http://msdn.microsoft.com/en-us/library/ee790890.aspx

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