Evet. Mnesia
gereksinimlerinizi karşılar. Ancak, dediğiniz gibi, bir araç onu kullanan kişi derinlemesine anladığında iyidir. Biz bir distributed authentication system
mnesia kullandık ve şu ana kadar herhangi bir sorun yaşamadık. Mnesia bir önbellek olarak kullanıldığında, memcached'den daha iyi durumdadır, çünkü "Memcached yazdığınız şeyi garanti edemez, her an okuyabilir, çünkü bellek takas sorunları ve şeyler yüzünden" (here).
Bununla birlikte, dağıtılan sisteminizin Erlang üzerinden kurulacağı anlamına gelir. Aslında sizin durumunuzdaki mnesia, çoğu NoSQL önbellek çözümlerini atıyor çünkü sistemleri Eventually consistent
. Mnesia, kümelenme boyunca ağ kullanılabilirliği sağlandığı sürece tutarlıdır. Dağıtılmış bir önbellek sistemi için, farklı düğümlerden aynı anahtar için farklı değerler okuduğunuz bir durum istemezsiniz, dolayısıyla mnesia'nın tutarlılığı burada işe yarar.
Üzerinde düşünmeniz gereken bir şey, dağıtılmış bir sistem için merkezi bir Bellek önbelleğinin bulunmasıdır. Bu şekilde çalışır: Her Küme düğümünde AMQP istemcileri tarafından çalıştırılan ve erişilen RABBITMQ
sunucunuz vardır. Sistemler AMQP arayüzü üzerinden etkileşir. Çünkü önbellek merkezi, tutarlılık, önbellekten yazma ve okumadan sorumlu süreç/sistem tarafından sağlanır. Diğer sistemler bir anahtar için bir istekte bulunurlar, AMQP message bus
'a ve önbellekten sorumlu sistem bu mesajı alır ve değer ile birlikte yanıtlar.
Message bus Architecture using RABBITMQ
, bankacılık sistemleri, bir ERP sistemi ve Genel çevrimiçi hizmet ile bütünleşmeyi içeren yeni bir sistem için kullandık. Bütün bunları bir araya getirmekten sorumluyuz ve RABBITMQ
'u kullandığımıza sevindik.Ayrıntılar çoktur ama yaptığımız şey bir mesaj formatı ve bir sistem tanımlama mekanizması ile ortaya çıkmaktır. Tüm sistemlerin, mesaj veriyolundan yazma ve okuma için bir RABBITMQ istemcisi olması gerekir. Daha sonra, her sistem için bir Queue
okuyacaksınız, böylece diğer sistem isteklerini, RABBITMQ içindeki adı, sisteme sahip olan sistemle aynı olan sıraya yazacaktır. Sonra, daha sonra, otobüsten geçen mesajları şifrelemelisiniz. Sonunda, büyük mesafeler/eyaletler boyunca birbirine bağlı sistemler var, ancak verimli bir ağ ile, RABBITMQ'un bu sistemleri ne kadar hızlı bağladığına inanmayacaksınız. Her neyse, RABBITMQ da kümelenmiş olabilir ve size RABBITMQ (size ne kadar iyi mnesia olabileceğini söyleyen) Mnesia
olduğunu söylemeliyim.
Başka bir şey de, bu konuya değinceye kadar bir çok program okumalı ve yazmalısınız.
Detaylı öneriniz için teşekkürler. Merkezi önbellek sistemi yerine bir tür yerel bellek içi önbellek çözümünü tercih ederim. Merkezi önbellek sistemi, ağ iletişimi gecikmesi ve nesnenin depolanan ikili veya dizgeden/seriye serileştirilmesi/serileştirilmesi için ekstra maliyet anlamına gelir. Durumumda, çok küçük önbellek öğem var ve bir HTTP isteğinde, 1 yüz öğeye kadar sorgulayabilirim ama bir toplu işte değil. Bu durumda, merkezi bir önbellek sistemi benim için uygun görünmüyor. Mnesia'nın önbelleği başka makinelerden talep etmesini önlemek için bir çeşit yerel önbellek var mı? –
Evet. Her düğümün aynı veritabanının bir mnesia kopyası varsa, tutarlılık kümelenme çapında olacaktır. Her zaman. her an, herhangi bir küme düğümünden okuduğunuz şey, nerede olduğuyla aynı olacaktır. Ancak, bu ağ erişilebilirliği ve dağıtılmış sisteme katılan tüm düğümlerde mnesia kullanılabilirliği hakkında varsayımları vardır. –