metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-04-28 01:45 pm

Передача вычислений в распределенной системе

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

Как передать значения мы в общем-то знаем - сериализовав их в что-то понятное другому участнику обмена.

А вычисления нужно или тащить целиком с кодом и его параметрами или передавать что-то аналогичное thunk(т.е. отложенное ленивое вычисление) в виде вызова "рассчитать значение, обратившись к тому, кто передал").

А поскольку система распределенная - нам никто не обещал, что тот кто передал вычисление, на момент обращения к нему(force), вообще включен, доступен по сети, не накрылся ошибкой и прочим свиным гриппом. И что переданные данные не изменились с момента передачи. Соответственно, в таком случае все вычисления далее могут быть задержаны или же вернуть пользователю вместо ожидаемого отчета о поголовье свиней сообщение об ошибке "Schweine-Zähler Server "DOMAIN\\Zuchtsau001" Verbindung kann nicht hergestellt werden".

А все изменения данных тогда изначально должны поддерживать версионность, т.е. любые предыдущие значения должны быть доступны и идентифицируемы извне.

И, как обычно, рассуждать о этой хреновине проще всего получается в терминах чистых ленивых функциональных языков и прочей околохаскелевой жути.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting