Может ли модель STM Clojure работать на нескольких JVM? - PullRequest
6 голосов
/ 21 апреля 2011

Я знаю, что Clojure хорошо работает на многоядерной машине, но мне было интересно, имеет ли смысл для него работать над кластером JVM, распределенным по многим машинам?

Ответы [ 4 ]

6 голосов
/ 21 апреля 2011

Руна изучил использование терракоты для этого и в итоге опубликовал swarmiji в качестве распределенной агентской библиотеки.

Одно из реальных отличий между системой SMP иКластер является общей памятью.В кластере код должен запрашивать данные, тогда как в SMP он может просто читать их напрямую.Это имеет некоторые приятные преимущества и некоторые (масштабирующие) недостатки.

STM Clojure, который довольно значительно отличается от многих других систем STM, основан на понятии относительного времени , которое измеряется счетчиком генерации на транзакцию.Без общего доступа к этому счетчику генерации он не может отдавать событиям порядок и не может выполнять свою работу (пожалуйста, простите это слишком простое объяснение).

Одним из главных мотивов STM было создание системы, которая действительно использовала бы преимущества параллелизма совместно используемой памяти , гарантируя, например, что читатели никогда не ждут писателей, а читатели всегда видят действительные данные.Поскольку он был построен для использования преимуществ совместно используемой памяти, он теряет свою привлекательность без использования совместно используемой памяти.

Модель актера (а-ля Эрланг) лучше подходит для распределенных вычислений.

Или, другими словами: возможно, нам не следует пытаться поместить квадратный колышек в распределенное параллельное отверстие.

5 голосов
/ 21 апреля 2011

Не совсем. Я имею в виду, что можно заставить работать; такие вещи, как Terracotta, утверждают, что могут распределять логическую JVM по нескольким узлам, но семантика STM / коллекции clojure довольно сильно полагается на совместное использование памяти между потоками, что позволяет эффективно использовать пространство и время.

Вероятно, вам лучше позаботиться о многоузловых частях вашей системы, используя архитектуру передачи сообщений или пакетную архитектуру.

3 голосов
/ 21 апреля 2011

Я мог бы сделать это, но это не очень хорошая идея. Есть причина, по которой NoSql сейчас большой, потому что транзакции плохо работают в сети.

1 голос
/ 26 сентября 2012

Проект Avout позволяет распределять состояние STM по нескольким машинам:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...