Có. Mnesia
đáp ứng các yêu cầu của bạn. Tuy nhiên, như bạn đã nói, một công cụ là tốt khi một trong những sử dụng nó hiểu nó trong chiều sâu. Chúng tôi đã sử dụng mnesia trên một số distributed authentication system
và chúng tôi chưa gặp phải bất kỳ vấn đề nào cho đến nay. Khi mnesia được sử dụng như một bộ nhớ cache thì tốt hơn memcached, vì một lý do "Memcached không thể đảm bảo rằng những gì bạn viết, bạn có thể đọc bất cứ lúc nào, do bộ nhớ hoán đổi vấn đề và thứ" (theo here).
Tuy nhiên, điều này có nghĩa là hệ thống phân phối của bạn sẽ được xây dựng trên Erlang. Thật vậy, chứng mất trí nhớ trong trường hợp của bạn đánh bại hầu hết các giải pháp bộ nhớ cache NoSQL vì hệ thống của chúng là Eventually consistent
. Mnesia là phù hợp, miễn là mạng có sẵn có thể được đảm bảo trên cụm. Đối với một hệ thống cache phân tán, bạn không muốn một tình huống mà bạn đọc các giá trị khác nhau cho cùng một khóa từ các nút khác nhau, do đó tính nhất quán của mnesia có ích ở đây.
Điều bạn nên suy nghĩ, đó là, có thể có bộ nhớ đệm tập trung cho một hệ thống phân tán. Điều này hoạt động như thế này: Bạn có RABBITMQ
máy chủ đang chạy và có thể truy cập bởi máy khách AMQP trên mỗi nút Cụm. Các hệ thống tương tác trên giao diện AMQP. Bởi vì, cache được tập trung, sự nhất quán được đảm bảo bởi quá trình/hệ thống chịu trách nhiệm viết và đọc từ cache. Các hệ thống khác chỉ đặt yêu cầu cho một khóa, vào số AMQP message bus
và hệ thống chịu trách nhiệm về bộ nhớ cache nhận được thông báo này và trả lời bằng giá trị.
Chúng tôi đã sử dụng Message bus Architecture using RABBITMQ
cho hệ thống gần đây có liên quan đến tích hợp với hệ thống ngân hàng, hệ thống ERP và dịch vụ trực tuyến công khai. Những gì chúng tôi xây dựng có trách nhiệm hợp nhất tất cả chúng lại với nhau và chúng tôi rất vui vì chúng tôi đã sử dụng RABBITMQ
.Các chi tiết rất nhiều nhưng những gì chúng tôi đã làm là để đi lên với một định dạng tin nhắn, và một cơ chế nhận dạng hệ thống. Tất cả các hệ thống phải có một máy khách RABBITMQ để viết và đọc từ bus thông báo. Sau đó, bạn sẽ tạo ra một đọc Queue
cho mỗi hệ thống, do đó hệ thống khác ghi yêu cầu của họ vào hàng đợi đó, có tên trong RABBITMQ, giống như hệ thống sở hữu nó. Sau đó, sau đó, bạn phải mã hóa các tin nhắn đi qua xe buýt. Cuối cùng, bạn có hệ thống bị ràng buộc với nhau trên khoảng cách lớn/trên toàn tiểu bang, nhưng với một mạng hiệu quả, bạn sẽ không tin RABBITMQ nhanh như thế nào liên kết các hệ thống này. Dù sao đi nữa, RABBITMQ cũng có thể được nhóm lại, và tôi nên nói với bạn rằng đó là Mnesia
có quyền hạn RABBITMQ (cho bạn biết tình trạng mất trí nhớ tốt như thế nào).
Một điều nữa là bạn nên đọc và viết nhiều chương trình cho đến khi bạn cảm thấy thoải mái với nó.
Nguồn
2013-05-24 06:16:44
Cảm ơn đề xuất chi tiết của bạn. Tôi thích một số giải pháp bộ nhớ cache trong bộ nhớ cục bộ thay vì hệ thống cache tập trung. Hệ thống cache tập trung có nghĩa là có sự chậm trễ giao tiếp mạng, và thêm chi phí để tuần tự hóa/deserialize đối tượng từ/thành chuỗi nhị phân hoặc chuỗi được lưu trữ. Trong tình huống của tôi, tôi có nhiều mục bộ nhớ cache nhỏ và trong một yêu cầu HTTP, tôi có thể truy vấn lên tới 1 trăm mục nhưng không phải trong một đợt. Trong trường hợp đó, một hệ thống cache tập trung có vẻ không phù hợp với tôi. Mnesia có một số loại bộ nhớ cache cục bộ để ngăn chặn việc yêu cầu bộ nhớ cache từ các máy khác luôn không? –
Có. Nếu mỗi nút có bản sao của bản sao của cùng một cơ sở dữ liệu, thì tính nhất quán sẽ là toàn cụm. Luôn luôn. bất cứ lúc nào, những gì bạn đọc từ bất kỳ nút cụm nào cũng sẽ giống nhau ở đâu. Nhưng, điều này có các giả định về tính khả dụng của mạng và tính sẵn có của tình trạng mất trí nhớ trên tất cả các nút tham gia vào hệ thống phân tán. –