Проектирование асинхронных приложений
От: Lloyd Россия  
Дата: 24.04.10 14:36
Оценка:
Привет,

Посоветуйте литературу по проектированию асинхронных приложений.

Интересует абсолютно все — "правильное" разбиение на слои, обработка ошибок, конкаренси, мониторинг операций, проектирование UI, ... Аналог Фаулервской "Архитектуры корпоративных приложений", но с упором на специфику асинхронные приложения.
Re: Проектирование асинхронных приложений
От: maloi_alex СССР  
Дата: 24.04.10 16:45
Оценка: 10 (1)
Здравствуйте, Lloyd, Вы писали:

L>Посоветуйте литературу по проектированию асинхронных приложений.


Одну книгу встречал на эту тему:
Шаблоны интеграции корпоративных приложений

Сайт этой книги
Re[2]: Проектирование асинхронных приложений
От: Lloyd Россия  
Дата: 24.04.10 16:47
Оценка:
Здравствуйте, maloi_alex, Вы писали:

_>Одну книгу встречал на эту тему:

_>Шаблоны интеграции корпоративных приложений

Эта у меня уже есть. Хотелось бы расширить список.
Re: Проектирование асинхронных приложений
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 24.04.10 17:05
Оценка:
Я думаю, вам в scholar.google.com и там искать соотствующие статьи.
http://jvmmemory.com — простой способ настройки JVM
Re[2]: Проектирование асинхронных приложений
От: Lloyd Россия  
Дата: 24.04.10 17:09
Оценка:
Здравствуйте, LeonidV, Вы писали:

LV>Я думаю, вам в scholar.google.com и там искать соотствующие статьи.


Спасибо за совет, но про наличие поисковиков я знаю и так. Меня интеесует именно провереные ссылки на статьи/книги/блоги.
Re: Проектирование асинхронных приложений
От: akarinsky Россия  
Дата: 25.04.10 09:09
Оценка: 10 (1)
Здравствуйте, Lloyd, Вы писали:

L>Привет,


L>Посоветуйте литературу по проектированию асинхронных приложений.


L>Интересует абсолютно все — "правильное" разбиение на слои, обработка ошибок, конкаренси, мониторинг операций, проектирование UI, ... Аналог Фаулервской "Архитектуры корпоративных приложений", но с упором на специфику асинхронные приложения.


Сам перелопатил кучу всяких статей об этом, но не видел ничего достаточно исчерпывающего в одном месте, так что ссылку дать, увы, не могу.
Стоит искать инфу на тему EDA (Event Driven Architecture), т.к. асинхронные приложения, чтобы использовать параллелизм на 100%, должны быть событийно-управляемыми.
Готовых и законченных фреймворков (по крайней мере для .NET) не встечал, придется велосипедировать.
Конечно, можно программировать параллелизм напрямую (http://parallelpatterns.codeplex.com/ и т.п.), но это не наш метод

Вероятно, нет ничего удобнее, чем писать код в стиле

[EventDriven]
public class BigBoss
{
    [EventPublisher(Topic = "App\Work\Start")]
    public EventHandler<string> StartWork;

    public void Start()
    {
        StartWork("Всем работать!!!");
    }
}

...

[EventDriven]
public class Worker
{
    [EventSubscriber(Topic = "App\Work\Start")]
    private void StartWorkHandler(string message)
    {
        Console.WriteLine("Не рагайся, насяльникэ...");
    }
}


можно глянуть на http://static.springsource.org/spring-integration/reference/htmlsingle/spring-integration-reference.html
На опушке за околицей мужики строили коровник.
Работали споро и весело. Получалось х**во.
Re: Проектирование асинхронных приложений
От: Sinix  
Дата: 25.04.10 11:41
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Посоветуйте литературу по проектированию асинхронных приложений.


Кмк, общих рекомендаций будет мало, т.к. оно слишком зависит от используемого фреймворка/специфики проекта. Вон на stackoverflow советуют F#. А так люди больше стараются изобрести свой plinq и посматривают в сторону rx.

К.О.: что вполне очевидно — пока не будет дешёвых потоков, многопоточность ради неё самой заводить никто не будет.

Вы поделитесь конкретной задачей — а то рекомендаций можно надавать от простого load-балансера с wait-пулом до изобретения своего workflow-движка.

*я бы смотрел в первую очередь на готовые фреймворки — хотя бы для почерпнуть идей.
Re[2]: Проектирование асинхронных приложений
От: Lloyd Россия  
Дата: 25.04.10 12:46
Оценка:
Здравствуйте, Sinix, Вы писали:

L>>Посоветуйте литературу по проектированию асинхронных приложений.


S>Кмк, общих рекомендаций будет мало, т.к. оно слишком зависит от используемого фреймворка/специфики проекта. Вон на stackoverflow советуют F#. А так люди больше стараются изобрести свой plinq и посматривают в сторону rx.


S>К.О.: что вполне очевидно — пока не будет дешёвых потоков, многопоточность ради неё самой заводить никто не будет.


S>Вы поделитесь конкретной задачей — а то рекомендаций можно надавать от простого load-балансера с wait-пулом до изобретения своего workflow-движка.


Имхо, многопоточность с воркфлоу имеет весьма отдаленное отношение к асинхроности, эти понятия ортогональные.

Приведу пример, что имено я имел в виду.
Пусть у нас есть магазин по продаже товаров. Заказчик оформляет заказ и сабмитит его. В ответ система должна зарезервировать товар на складе (или дозаказать у поставщика) и оформить доставку. Доставщиком может быть внешняя фирма и офрмление доставки может быть достаточно продолжительным.
В таких случаях для интеграции разных подсистем обычно рекомендуют использовать очереди сообщений (например, MSMQ). В описываемом примере в ответ на сабмит заказа в очередь сообщений склада будет поставлена заявка на резервирование товара, а в доставщику — заявка на доставку. В случае когда обе эти заявки успешно обработаны, эти подсистемы уведомят исходную подсистему о завершении работы и та в свою очередь сможет изменить статус заказа и проинформироваь об этом пользователя.
В описаном примере есть промежуток времени между совершением операции и получением результата и в этот промежуток времени может произойти много инетересного: внешняя система может быт не в состоянии обработать заявку или вовсе по каким-то причинам потерять ее,заказ может быть изменен до того, как заявку начали обрабатывать, пользватель может отменить заказ и т.д. и т.п.

Я ищу литературу, в которой были бы собраны рекомендации по проектированию подобного типа приложений. Имхо задача достаточно распространенная и такая литераура должна существовать.
Re[3]: Проектирование асинхронных приложений
От: Sinix  
Дата: 25.04.10 13:30
Оценка: +1
Здравствуйте, Lloyd, Вы писали:

L>Имхо, многопоточность с воркфлоу имеет весьма отдаленное отношение к асинхроности, эти понятия ортогональные.

Ну тут уж как посмотреть. Для хитрой многопоточности придётся заводить свой диспатчер + вводить понятие операций. Отсюда до воркфлоу уже рукой подать.

L>Приведу пример, что имено я имел в виду.

L>Пусть у нас есть магазин по продаже товаров.
А это вы описали прям классический бизнес-вокфлоу. И классический же способ — НКА с воркером в каждом узле. Детали под капотом — типа отката состояния, оповещений и прочее — это уже вопрос реализации.

Message-driven хорош для систем с малым количеством узлов, но крайне тяжёл в отладке, т.к. состояние размазано по куче компонент (+ они должны быть stateful, что очень плохо для асинхронных задач). Зато оно живучее и простое (пока у нас нет постоянного взаимодействия).

Классический воркфлоу c воркерами и шедулером дебажить и сопровождать ненамного проще. Там главная грабля — отобразить бизнес-процесс в как можно более примитивный алгоритм, чтобы не возиться с простынёй из наноблоков.

L>Я ищу литературу, в которой были бы собраны рекомендации по проектированию подобного типа приложений.

Можно смотреть в сторону durable бизнес-транзакций и temporary database.
Re[3]: Проектирование асинхронных приложений
От: Sinix  
Дата: 25.04.10 13:40
Оценка:
S> temporary database.

Очепятка. Temporal.
Пойнт в том, что сложная бизнес-транзакция может потребовать отката состояния и выполнения по другому пути
Re[4]: Проектирование асинхронных приложений
От: Lloyd Россия  
Дата: 25.04.10 14:51
Оценка: +1
Здравствуйте, Sinix, Вы писали:

L>>Имхо, многопоточность с воркфлоу имеет весьма отдаленное отношение к асинхроности, эти понятия ортогональные.

S>Ну тут уж как посмотреть. Для хитрой многопоточности придётся заводить свой диспатчер + вводить понятие операций.

Но этот диспатчер может работать как синхронно (fork and join), так и асинхронно (fire and forget). Потому я и написал про ортогональность.

S>Отсюда до воркфлоу уже рукой подать.


То же самое верно и для воркфлоу.

L>>Приведу пример, что имено я имел в виду.

L>>Пусть у нас есть магазин по продаже товаров.
S>А это вы описали прям классический бизнес-вокфлоу. И классический же способ — НКА с воркером в каждом узле. Детали под капотом — типа отката состояния, оповещений и прочее — это уже вопрос реализации.

S>Message-driven хорош для систем с малым количеством узлов, но крайне тяжёл в отладке, т.к. состояние размазано по куче компонент (+ они должны быть stateful, что очень плохо для асинхронных задач). Зато оно живучее и простое (пока у нас нет постоянного взаимодействия).


Не вижу связи между наличием состояния и асинхронностью. Или ты имеешь в виду паралельность?
Re[5]: Проектирование асинхронных приложений
От: Sinix  
Дата: 25.04.10 15:23
Оценка:
Здравствуйте, Lloyd, Вы писали:

S>>Message-driven хорош для систем с малым количеством узлов, но крайне тяжёл в отладке, т.к. состояние размазано по куче компонент (+ они должны быть stateful, что очень плохо для асинхронных задач). Зато оно живучее и простое (пока у нас нет постоянного взаимодействия).


L>Не вижу связи между наличием состояния и асинхронностью. Или ты имеешь в виду паралельность?

* пытаюсь разбудить мозг и вспомнить что же хотел сказать. Кажется, имелись в виду грабли с согласованием состояний при взаимодействии нескольких узлов. Приходится изобретать механизм координации, от которого мы только что ушли.
Re[6]: Проектирование асинхронных приложений
От: akarinsky Россия  
Дата: 25.04.10 19:31
Оценка:
Здравствуйте, Sinix, Вы писали:

Идентификатор корреляции для сообщения/события. Не вижу тут проблемы.
На опушке за околицей мужики строили коровник.
Работали споро и весело. Получалось х**во.
Re[3]: Проектирование асинхронных приложений
От: MozgC США http://nightcoder.livejournal.com
Дата: 26.04.10 10:07
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Приведу пример, что имено я имел в виду.

L>Пусть у нас есть магазин по продаже товаров. Заказчик оформляет заказ и сабмитит его. В ответ система должна зарезервировать товар на складе (или дозаказать у поставщика) и оформить доставку. Доставщиком может быть внешняя фирма и офрмление доставки может быть достаточно продолжительным.
L>В таких случаях для интеграции разных подсистем обычно рекомендуют использовать очереди сообщений (например, MSMQ). В описываемом примере в ответ на сабмит заказа в очередь сообщений склада будет поставлена заявка на резервирование товара, а в доставщику — заявка на доставку. В случае когда обе эти заявки успешно обработаны, эти подсистемы уведомят исходную подсистему о завершении работы и та в свою очередь сможет изменить статус заказа и проинформироваь об этом пользователя.
L>В описаном примере есть промежуток времени между совершением операции и получением результата и в этот промежуток времени может произойти много инетересного: внешняя система может быт не в состоянии обработать заявку или вовсе по каким-то причинам потерять ее,заказ может быть изменен до того, как заявку начали обрабатывать, пользватель может отменить заказ и т.д. и т.п.
L>Я ищу литературу, в которой были бы собраны рекомендации по проектированию подобного типа приложений. Имхо задача достаточно распространенная и такая литераура должна существовать.

Я бы смотрел по ключевым словам — длинные транзакции, распределенные транзакции, распределенные базы данных.
Основы concurrency control я думаю вы знаете, у того же Фаулера они есть.

По распределенным транзакциям и базам данных:

1) Гарсиа-Молина Г., Ульман Д., Уидом Д. &mdash; Системы баз данных. Полный курс.
Главы
19.4 Расрпределенные базы данных
19.5 Распределенная фиксация
19.6 Распределенное блокирование
19.7 Длинные транзакции

2) Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman &mdash; Concurrency Control and Recovery in Database Systems
Глава 7 &mdash; Distributed Recovery

3) C.J.Date &mdash; Введение в системы баз данных
Глава 21 — Распределенные базы данных.

Может быть что-то из этого вам окажется не совсем в тему, но это некоторое из того, что я качал и читал, когда были похожие задачи и когда решил разобраться в теме.
Re[3]: Проектирование асинхронных приложений
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 27.04.10 05:25
Оценка:
Здравствуйте, Lloyd, Вы писали:

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


Не видел таких книг ибо подобные задачи решаются adhoc и нету централизованных подходов.

Сейчас подобные системы строятся на таких компонентах:
1)Очереди сообщений, обязательно reliable
2)Workflow-движок (часто с описанием сценария в виде XML)
3)Сами приложения, выполняющие действия
4)WS-* вебсервисы для того чтобы приводить в движение все это
5)Распределенные системы логгирования для отладки

Каждый вендор предлагает свои фреймворки, приложения, а некоторые умудряются даже свои вебсервисы изобретать.
Re[3]: Проектирование асинхронных приложений
От: ZevS Россия  
Дата: 28.04.10 09:24
Оценка: 8 (1)
Здравствуйте, Lloyd, Вы писали:

L>Эта у меня уже есть. Хотелось бы расширить список.


Все полезной из этой книги и не разбавленное тоннами воды есть тут — http://www.eaipatterns.com/toc.html
Re[4]: Проектирование асинхронных приложений
От: Sinix  
Дата: 30.04.10 15:17
Оценка:
Здравствуйте, ZevS, Вы писали:

ZS>Все полезной из этой книги и не разбавленное тоннами воды есть тут — http://www.eaipatterns.com/toc.html


http://www.eaipatterns.com/SharedDataBaseIntegration.html
Выжато всухую
Re[3]: Проектирование асинхронных приложений
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 03.05.10 22:22
Оценка: 4 (1)
Здравствуйте, Lloyd, Вы писали:

[Skipped]
В принципе, можно посмотреть статью Уди Дахана в MSDN Magazine "Создание масштабируемых систем с обработкой сбоев без потери данных" или его библиотеку NServiceBus как воплощение решений проблем, описанных в статье. Все в том же русле EDA, MSMQ и т.п.
Re: Проектирование асинхронных приложений
От: FlevelEx Россия  
Дата: 09.05.10 17:46
Оценка: 11 (1)
Здравствуйте, Lloyd, Вы писали:

Overview of Some Readings on Events
Re: Проектирование асинхронных приложений
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.10 16:55
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Посоветуйте литературу по проектированию асинхронных приложений.


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