2008-11-14 32 views
5

Tôi sử dụng dịch vụ ASP.NET và WCF trong môi trường máy chủ web cân bằng tải, sử dụng Memcached trong lớp dịch vụ.Được Memcached hoán đổi cho nhau với ASP.NET State Server?

Tôi cũng muốn thay thế việc sử dụng Máy chủ trạng thái ASP.NET (cho phiên bang) bằng Memcached. Bây giờ tôi sợ nó không phải là một điều tốt, bởi vì từ những gì tôi hiểu, Memcached là một máy chủ bộ nhớ cache chứ không phải là một máy chủ nhà nước, đó là sự thật?

Nếu tôi hiểu chính xác, Memcached không phân phối dữ liệu đến các nút khác trong trang trại Memcached. Thay vào đó, một thuật toán băm đặc biệt được sử dụng để xác định một trong các nút trong trang trại chứa dữ liệu của khóa được yêu cầu, trong khi Máy chủ trạng thái ASP.NET phân phối dữ liệu càng sớm càng tốt, để ngăn chặn một điểm không thành công .

Nói cách khác, Memcached chỉ nên được sử dụng vì lý do hiệu suất, dữ liệu được lưu trữ trong nó phải luôn có thể tái tạo, trong trường hợp mục bị xóa để nhường chỗ cho vật mới hoặc trong trường hợp máy đơn lẻ thực sự lưu trữ dữ liệu bị hỏng.

Vì vậy, tôi không thể chỉ dựa vào Memcached để lưu trữ dữ liệu trạng thái phiên? Nếu tôi không thể, thì tôi không hiểu Memcached thường được so sánh như thế nào và được xem là một cách khác để sử dụng ScaleOut StateServer và ASP.NET State Server, vì đây thực sự là máy chủ trạng thái. ?

Tôi hiện không chắc chắn về cách tiếp cận tốt nhất cho trạng thái phiên phân phối hiệu suất cao trong trang trại máy chủ web là gì.

Cảm ơn

+1

Tôi không tin rằng thuộc tính chuyển đổi dự phòng mà bạn đang phân bổ cho Máy chủ trạng thái ASP.NET tồn tại. Không có cách nào để làm điều đó, ít nhất, theo như tôi biết. Đó là một điểm thất bại duy nhất. –

Trả lời

1

Memcached không hỗ trợ ánh xạ dữ liệu hiện tại, nó chỉ cung cấp khả năng chia mục của bạn trên máy chủ bội để cố gắng ngăn chặn một từ bị ngập. Điều này hoạt động bằng cách băm khóa của bạn với địa chỉ của máy chủ hoặc bằng cách sử dụng thuật toán băm nhất quán (libketama).

Nói chung, Memcached không nên được xem như là một lớp lưu trữ liên tục, và trong hầu hết các trường hợp, dữ liệu trong bộ đệm nên giống như trong cơ sở dữ liệu. Nếu bạn đang thay đổi dữ liệu phiên của người dùng và muốn lưu trữ nó, hãy cập nhật nó trong Memcached, sau đó cập nhật nó trong cơ sở dữ liệu ngay sau đó. Nếu bạn muốn thực sự cẩn thận, bạn có thể thực hiện một hệ thống journalling đơn giản để đảm bảo dữ liệu này vẫn nhất quán trong trường hợp lỗi hệ thống.

Memcached chắc chắn đang được sử dụng để lưu vào bộ nhớ mặc dù phiên, người sáng tạo nói nhiều trong một bài báo của tạp chí Jinux. Nó thực sự chỉ có nghĩa là để tối ưu hóa các hoạt động đọc, vào cuối ngày, bất kỳ dữ liệu nào bạn quan tâm phải được lưu trữ trong cơ sở dữ liệu.

0

Trong trường hợp lý tưởng, dữ liệu phiên chỉ là một giá trị duy nhất, biểu diễn số nội bộ của id người dùng. Điều đó có nghĩa là người dùng đã vượt qua trang đăng nhập thành công với việc cung cấp mật khẩu chính xác.

Nhưng những người khác thích, lấy stackoverflow chẳng hạn, dữ liệu động trên trang tùy thuộc vào người dùng: biệt hiệu của người dùng, số danh tiếng, huy hiệu kiếm được, permssion để lại nhận xét. Chúng thường là kết quả của nhiều JOIN trên nhiều bảng cơ sở dữ liệu.

Nếu bạn không đặt memcached sử dụng, các truy vấn này hầu như luôn đọc dữ liệu từ đĩa, đó là một hoạt động rất chậm, không có khả năng mở rộng. Bộ nhớ cache bên trong cơ sở dữ liệu?Bạn nghĩ gì về tỷ lệ hit sẽ xem xét cơ sở dữ liệu làm những việc khác ngoài việc quản lý dữ liệu phiên? Tại sao bạn phải đọc từ đĩa trong khi bạn có thể từ bộ nhớ?

Tất nhiên, mọi ghi vào thông tin người dùng có liên quan sẽ làm mất hiệu lực phiên tương ứng trong ghi nhớ.

+0

Ai nói gì về cơ sở dữ liệu? Câu hỏi đặt ra là liệu Memcached có thể hoán đổi trực tiếp như một máy chủ trạng thái, với máy chủ trạng thái ASP.NET, xem xét bộ nhớ đệm Memcached không được đồng bộ vì vậy nếu một nút bị hỏng, dữ liệu có khả năng bị mất. – baretta

+0

Tôi sử dụng memcached làm bộ nhớ cache để tham gia cơ sở dữ liệu, có dữ liệu dư thừa. Vì vậy, một điểm duy nhất của sự thất bại không quan trọng miễn là bạn không viết thông tin mới chỉ để memcached của bạn. Thông tin ở dạng tinh khiết của nó luôn nằm trong cơ sở dữ liệu chính. – yogman

4

http://www.codeplex.com/memcachedproviders có nhà cung cấp trạng thái phiên cho asp.net lưu trữ các giá trị trong memcached. Nó cung cấp khả năng sao lưu dữ liệu phiên trong ' SQL Server. Như yogman cho biết dữ liệu phiên được lưu trữ như một giá trị. Nếu việc trục xuất xảy ra, toàn bộ phiên cho người dùng đó bị mất và người dùng sẽ được chuyển đến màn hình đăng nhập. Memcached không loại bỏ bất kỳ dữ liệu nào trước khi hết hạn trừ khi nó hết dung lượng lưu trữ dữ liệu mới.

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