2013-05-24 16 views
6

Chào mọi ngườiBest erlang trong bộ nhớ cache hệ thống qua các nút mạng = mnesia?

Tôi mới làm quen, nhưng tôi đang cố gắng thiết kế dự án thứ nhất của mình trên erlang để có thể làm tốt nhất có thể. Ở đây tôi cần một số gợi ý cho hệ thống bộ nhớ đệm trong bộ nhớ.

  1. Mục bộ nhớ cache là bộ nhớ dựa trên khóa-giá trị. khóa thường là một chuỗi ASCII; giá trị là các loại của erlang bao gồm số/danh sách/bộ/v.v.
  2. Mục bộ nhớ cache có thể được đặt bởi bất kỳ nút nào.
  3. Mục bộ nhớ cache có thể nhận được bằng bất kỳ nút nào.
  4. Mục bộ nhớ cache được chia sẻ qua tất cả các nút ngay cả trên các máy chủ khác nhau
  5. đọc bẩn được phép, tôi không muốn bất kỳ khóa hoặc giao dịch nào để giảm hiệu suất.
  6. Được phân phối hoàn toàn, không có máy hoặc dịch vụ tập trung.
  7. Thực hiện tốt
  8. Dễ dàng cài đặt & triển khai & cấu hình & bảo trì

sự lựa chọn đầu tiên dường như tôi là mnesia, nhưng tôi không có experence trên đó. Nó có đáp ứng được yêu cầu của tôi không? Tôi có thể mong đợi hiệu suất như thế nào?

Một tùy chọn khác là memcached - Nhưng tôi sợ hiệu suất thấp hơn so với chứng mất trí vì thêm serialization/deserialization được thực hiện như memcached daemon là từ một quá trình hệ điều hành.

Mọi đề xuất đều trợ giúp :)

Trả lời

10

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ó.

+0

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? –

+0

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. –