2013-07-31 38 views
5

Tôi đang sử dụng spymemcached & HashAlgorithm.KETAMA_HASH để kết nối với một nhóm memcached gồm 5 nút.Cách xử lý các nút ghi nhớ khôi phục khi sử dụng spymemcached & HashAlgorithm.KETAMA_HASH

hiểu biết của tôi là khi chúng tôi sử dụng một thuật toán hàm băm ổn định như thế nào, khi một nút là xuống, chúng ta không cần phải lo lắng như là chìa khóa sẽ được tái phân phối (với tác động tối thiểu.)

Sẽ thế nào nếu nút down-ed sẽ tham gia vào nhóm. Tôi cần làm gì?

Tôi có nên đảm bảo xóa dữ liệu cũ? Hoặc chương trình của tôi có cần xử lý đặc biệt cho trường hợp này không?

Trả lời

4

Cho rằng tài liệu này là chính xác: http://info.couchbase.com/rs/northscale/images/Couchbase_WP_Dealing_with_Memcached_Challenges.pdf

Nếu có bất kỳ sự gián đoạn mạng, và một hoặc nhiều khách hàng quyết định rằng một đặc biệt máy chủ memcached là không có sẵn nữa, họ sẽ tự động rehash một số dữ liệu vào phần còn lại của các nút ngay cả khi nút gốc vẫn có sẵn. Nếu cuối cùng nút quay trở lại dịch vụ (ví dụ sau khi cúp mạng được giải quyết), dữ liệu trên nút đó sẽ lỗi thời và các máy khách không có thông tin cập nhật key-server cập nhật sẽ đọc dữ liệu cũ.

Giả sử điều này vẫn được cập nhật: http://lists.danga.com/pipermail/memcached/2007-April/003852.html Sẽ an toàn làm mới/xóa nút trước khi thêm lại. Buộc nút xuống để xóa mọi mục cũ.

+0

Sự hiểu biết của tôi là tôi phải xóa tất cả dữ liệu cũ trong tất cả các nút. Tại sao? Bởi vì một số khách hàng có thể nhìn thấy nút down-ed là lên nhưng một số khách hàng vẫn có thể giả định nút là xuống. Vì vậy, cho rằng khách hàng có thể băm khóa vào nút khác nhau, dữ liệu không thống nhất có thể xảy ra. Nhưng vấn đề này là khó khăn, trừ khi chúng ta có một cách để khóa tất cả các nút memcached và thực hiện tuôn ra - để tránh điều kiện chủng tộc. – Howard

+0

Dựa trên ý kiến ​​của tôi, tôi nghĩ rằng nó vẫn an toàn để chỉ tuôn ra nút xuống-ed. Nó sạch sẽ, nếu có bất kỳ yêu cầu nào đến nút, nó sẽ dẫn đến việc bỏ lỡ, thêm thông tin mới và mới. Nếu khách hàng nghĩ rằng nó là xuống, nó sẽ băm vào một nút khác, cũng dẫn đến bỏ lỡ. Nếu điều đó xảy ra, cả hai nút có khóa 'foo' chẳng hạn. Khi nút down-ed trở lại trực tuyến cho khách hàng đó, bạn cần phải xả nó một lần nữa. Đây là một số chi tiết về điều này: http://www.caiapps.com/duplicate-key-problem-in-memcache-php/ –

+1

có nhưng những gì bạn nói chỉ hợp lệ khi bạn có một khách hàng singe nhưng nhiều máy chủ. không có cách nào để điều phối các máy khách khác nhau để sử dụng cùng một tập hợp các máy chủ memcached tại một thời điểm nhất định (giả sử sử dụng băm đồng nhất). – Howard

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