Re: [Erlang] Распараллелить следующее
От: 3BEP http://3bep.blogspot.com
Дата: 03.06.08 07:16
Оценка:
Здравствуйте, ZveN, Вы писали:

ZN>Привет!


<telepat mode on>
Система — биллинг. Задача — преобразовать байты в бабки. Для этого необходимо взять пакет из потока нетфлоу, определить кому принадлежит описываемый в пакете трафик и сколько этот трафик стоит. Потом можно снять с баланса пользователя стоимость этого трафика и записать этот трафик в статистику пользователя. Рабочие блоки из этого описания получаются следующие:
* приемник потока нетфлоу
* парсер пакетов
* идентификатор
* тарификатор
* баланс пользователя
Сервисные блоки можно предположить следующие:
* сплиттер — делит поток однородных данных на несколько подпотоков. Можно сразу выделить подтипы — интеллектуальные (деление потока по некоторому признаку) и простые (равномерное разделение потока).
* буфер — буферизирует поток. Можно обойтись и без них, но управление потоками данных будет уже сложнее. Подтипы — FIFO, LIFO, push/pull переходы и т.д.

Для однонаправленного потока данных каждому из блоков необходимо знать следующий блок/блоки. Управление системой таким образом сводится к управлению связями между блоками.

Теперь к вопросу как параллелить. приемник -> буфер -> сплиттер -> ...
</telepat mode off>
Re[2]: [Erlang] Распараллелить следующее
От: Gaperton http://gaperton.livejournal.com
Дата: 03.06.08 12:05
Оценка:
Здравствуйте, 3BEP, Вы писали:

BEP>Здравствуйте, ZveN, Вы писали:


ZN>>Привет!


BEP><telepat mode on>

BEP> * буфер — буферизирует поток. Можно обойтись и без них, но управление потоками данных будет уже сложнее. Подтипы — FIFO, LIFO, push/pull переходы и т.д.
BEP></telepat mode off>

Буфер не нужен . Очередь входящих сообщений процесса-сплиттера прекрасно справится с буферизацией.
Re[3]: [Erlang] Распараллелить следующее
От: 3BEP http://3bep.blogspot.com
Дата: 03.06.08 16:07
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Буфер не нужен . Очередь входящих сообщений процесса-сплиттера прекрасно справится с буферизацией.


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

Встраивание этих функций в рабочие блоки возможно. Но я предпочту выделить служебный функционал, декларировать и специфицировать его явно.
Re[2]: [Erlang] Распараллелить следующее
От: Critical Error ICQ: 123736611
Дата: 04.06.08 10:23
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Вообще — есть один аспект, в котором проектирование для Эрланга сильно отличается от ОО проектирования — хотя в целом там все близко. Этот аспект — в Эрланге инкапсуляция функциональности и состояния не связана, как в ОО, а разделена. В ОО — у вас функциональность нарезана на классы вместе с состояние. В Эрланге — состояние инкапсулируется отдельно — при помощи процессов, а функциональность тоже отдельно — при помощи модулей.


G>В результате, для мало-мальского описания дизайна для Эрланга вам потребуется _две_ модели (в случае ОО в простых ситуациях хватает только одной — диаграммы классов, а здесь ни в каких не хватит одной). Первая — диаграмма функциональной связи модулей — кто про кого знает. Она — статическая, как диаграмма классов в ОО — только сильно проще, и нечего не говорит о стейте, только связность кода показывает. Вторая — диаграмма потока данных, которая показывает процессы и их взаимодействие. Это уже "динамическая" диаграмма, показывающая вам с одной стороны как завернут и инкапсулирован стейт, с другой — поток данных. При этом, один процесс Эрланга может в общем случае реализовывать группу сущностей из DFD — скажем, внутри него есть и storage, и несколько "процессов" из диаграммы.


А можно какойнибудь пример с картинками?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: [Erlang] Распараллелить следующее
От: Gaperton http://gaperton.livejournal.com
Дата: 11.06.08 17:02
Оценка:
Здравствуйте, Critical Error, Вы писали:

CE>Здравствуйте, Gaperton, Вы писали:


G>>Вообще — есть один аспект, в котором проектирование для Эрланга сильно отличается от ОО проектирования — хотя в целом там все близко. Этот аспект — в Эрланге инкапсуляция функциональности и состояния не связана, как в ОО, а разделена. В ОО — у вас функциональность нарезана на классы вместе с состояние. В Эрланге — состояние инкапсулируется отдельно — при помощи процессов, а функциональность тоже отдельно — при помощи модулей.


G>>В результате, для мало-мальского описания дизайна для Эрланга вам потребуется _две_ модели (в случае ОО в простых ситуациях хватает только одной — диаграммы классов, а здесь ни в каких не хватит одной). Первая — диаграмма функциональной связи модулей — кто про кого знает. Она — статическая, как диаграмма классов в ОО — только сильно проще, и нечего не говорит о стейте, только связность кода показывает. Вторая — диаграмма потока данных, которая показывает процессы и их взаимодействие. Это уже "динамическая" диаграмма, показывающая вам с одной стороны как завернут и инкапсулирован стейт, с другой — поток данных. При этом, один процесс Эрланга может в общем случае реализовывать группу сущностей из DFD — скажем, внутри него есть и storage, и несколько "процессов" из диаграммы.


CE>А можно какойнибудь пример с картинками?


Нет, я свои только на бумаге рисовал. Но вообще — поищите по ключевым словам DFD (dataflow diagram), это очень простая диаграмма. Пример диаграммы связности модулей есть. Я не настаиваю на том, что его надо рисовать именно так — но, думаю, идея понятна. В данной задаче у меня нет процессов, поэтому нет и DFD.
http://gaperton.livejournal.com/7229.html
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.