Multithreading в Application server layer
От: Ivan Danilov Украина  
Дата: 20.08.07 11:58
Оценка:
Возможно, кто-то встречался с интересными паттернами или просто поделится опытом — где лучше всего решать проблемы синхронизации в сервере приложений?

Можно линк на статью/best practices etc.

P.S. Так как вопрос о стоящей задаче все равно кто-то задаст — она в общих описана здесь: Re[4]: Глобальные переменные
Автор: Ivan Danilov
Дата: 16.08.07
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Multithreading в Application server layer
От:  
Дата: 20.08.07 12:16
Оценка:
Hello, Ivan!
You wrote on Mon, 20 Aug 2007 11:58:10 GMT:

ID> Возможно, кто-то встречался с интересными паттернами или просто

ID> поделится опытом — где лучше всего решать проблемы синхронизации
ID> в сервере приложений?

Синхронизации, извиняюсь, чего?
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Multithreading в Application server layer
От: Ivan Danilov Украина  
Дата: 20.08.07 12:21
Оценка:
Здравствуйте, YК, Вы писали:

YК>Синхронизации, извиняюсь, чего?


Доступа к данным.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Multithreading в Application server layer
От: TK Лес кывт.рф
Дата: 20.08.07 12:54
Оценка:
Здравствуйте, Ivan Danilov, Вы писали:

ID>Возможно, кто-то встречался с интересными паттернами или просто поделится опытом — где лучше всего решать проблемы синхронизации в сервере приложений?


ID>Можно линк на статью/best practices etc.


Можно рассмотреть ActiveObject или instance-per-request (SingleCall в remoting или IHttpHandler в веб приложениях).

Какие именно проблемы синхронизации вы хотите решить?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: Multithreading в Application server layer
От:  
Дата: 20.08.07 12:55
Оценка:
Hello, Ivan!
You wrote on Mon, 20 Aug 2007 12:21:29 GMT:

YК>> Синхронизации, извиняюсь, чего?


ID> Доступа к данным.


Цвёрда трымаўся юнак на дапросе..
К каким данным? Данным на транспортном уровне, бизнес-сущностям, данным непосредственно в хранилище?
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Multithreading в Application server layer
От: Ivan Danilov Украина  
Дата: 20.08.07 13:04
Оценка:
Здравствуйте, TK, Вы писали:

TK>Можно рассмотреть ActiveObject или instance-per-request (SingleCall в remoting или IHttpHandler в веб приложениях).


TK>Какие именно проблемы синхронизации вы хотите решить?

Собственно, классы, взаимодействующие с клиентом являются Stateless. А вот под ними лежат контроллеры, которые работают с business entities и используют хранилища.

Соответственно, основная проблема — куда засунуть код, контролирующий целостность данных (т.е. предотвращающих запись и запись/чтение одновременно), чтобы он не торчал из всех дыр в приложении. Как его централизовать, что-ли?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Multithreading в Application server layer
От: TK Лес кывт.рф
Дата: 20.08.07 13:14
Оценка:
Здравствуйте, Ivan Danilov, Вы писали:

TK>>Какие именно проблемы синхронизации вы хотите решить?

ID>Собственно, классы, взаимодействующие с клиентом являются Stateless. А вот под ними лежат контроллеры, которые работают с business entities и используют хранилища.

ID>Соответственно, основная проблема — куда засунуть код, контролирующий целостность данных (т.е. предотвращающих запись и запись/чтение одновременно), чтобы он не торчал из всех дыр в приложении. Как его централизовать, что-ли?


А нельзя переложить все эти concurrency заботы на хранилища данных? Если на хранилища данных это переложить нельзя, то можно применить АОП и полностью отделить логику доступа от логики контроля.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Multithreading в Application server layer
От: Ivan Danilov Украина  
Дата: 20.08.07 13:35
Оценка:
Здравствуйте, TK, Вы писали:

TK>А нельзя переложить все эти concurrency заботы на хранилища данных? Если на хранилища данных это переложить нельзя, то можно применить АОП и полностью отделить логику доступа от логики контроля.


В принципе, на хранилища переложить можно. Немного, правда, боюсь дедлока, который на таком низком уровне отследить не удастся никак. Простейший способ синхронизации — использование ключевого слова lock на хранилище, но при дедлоке он просто повесит весь сервер Что, по понятным причинам, не есть гуд. Да и производительность оставит желать лучшего.

Что касается Аспект-оринетированного программирования — кроме названия, я о нем не знаю ничего Буду гуглить.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Multithreading в Application server layer
От: Ivan Danilov Украина  
Дата: 20.08.07 13:45
Оценка:
ID> Простейший способ синхронизации — использование ключевого слова lock на хранилище

Был неправ, он вообще ничем не помогает. Объекты-то могут быть уже получены другим потоком. Лочить business entities? Их же тысячами используют... Повесится
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Multithreading в Application server layer
От: TK Лес кывт.рф
Дата: 20.08.07 13:54
Оценка:
Здравствуйте, Ivan Danilov, Вы писали:

ID>В принципе, на хранилища переложить можно. Немного, правда, боюсь дедлока, который на таком низком уровне отследить не удастся никак. Простейший способ синхронизации — использование ключевого слова lock на хранилище, но при дедлоке он просто повесит весь сервер Что, по понятным причинам, не есть гуд. Да и производительность оставит желать лучшего.


т.е. хранилище это нечто самопальное, а не готовая БД с поддержкой техже транзакций?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Multithreading в Application server layer
От: TK Лес кывт.рф
Дата: 20.08.07 13:54
Оценка:
Здравствуйте, Ivan Danilov, Вы писали:

ID>Был неправ, он вообще ничем не помогает. Объекты-то могут быть уже получены другим потоком. Лочить business entities? Их же тысячами используют... Повесится


Если хранилище "свое собственное" то наверное, мало чего остается... с другой стороны, если блокировка есть только на чтение/запись — это может быть не так сложно...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Multithreading в Application server layer
От: Ivan Danilov Украина  
Дата: 20.08.07 14:06
Оценка:
Здравствуйте, TK, Вы писали:

TK>т.е. хранилище это нечто самопальное, а не готовая БД с поддержкой техже транзакций?


Над БД — самопальное (фактически, скорее не хранилище, а Data Access Layer). БД присутствует. FireBird 1.5.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Multithreading в Application server layer
От: IB Австрия http://rsdn.ru
Дата: 20.08.07 15:08
Оценка:
Здравствуйте, Ivan Danilov, Вы писали:

ID> БД присутствует. FireBird 1.5.

Ну вот пусть этим FB и занимается. Получится проще, надежнее и быстрее.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Мы уже победили, просто это еще не так заметно...
Re[8]: Multithreading в Application server layer
От: Ivan Danilov Украина  
Дата: 20.08.07 15:13
Оценка:
Здравствуйте, IB, Вы писали:

IB>Здравствуйте, Ivan Danilov, Вы писали:


ID>> БД присутствует. FireBird 1.5.

IB>Ну вот пусть этим FB и занимается. Получится проще, надежнее и быстрее.

Хм. А кэшированные данные как охранять?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Multithreading в Application server layer
От: TK Лес кывт.рф
Дата: 20.08.07 15:30
Оценка: 6 (1)
Здравствуйте, Ivan Danilov, Вы писали:

ID>>> БД присутствует. FireBird 1.5.

IB>>Ну вот пусть этим FB и занимается. Получится проще, надежнее и быстрее.

ID>Хм. А кэшированные данные как охранять?


Тут можно определиться с тем, насколько критичными являются кешированные данные. В каких-то случаях, может оказаться достаточным просто сбросить закешированное значение при его изменении. для каких-то, можно завести специальную табличку в FB для отслеживания блокировок...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[9]: Multithreading в Application server layer
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.08.07 15:36
Оценка: +1
Здравствуйте, Ivan Danilov, Вы писали:

ID>Хм. А кэшированные данные как охранять?


А никак, пускай FB кеширует.
... << RSDN@Home 1.2.0 alpha rev. 716>>
AVK Blog
Re: Multithreading в Application server layer
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.08.07 15:46
Оценка:
Здравствуйте, Ivan Danilov, Вы писали:

ID>Возможно, кто-то встречался с интересными паттернами или просто поделится опытом — где лучше всего решать проблемы синхронизации в сервере приложений?


Лучше всего их не решать. Т.е. стараться до последнего синхронизации избежать.
... << RSDN@Home 1.2.0 alpha rev. 716>>
AVK Blog
Re[2]: Multithreading в Application server layer
От: Ivan Danilov Украина  
Дата: 20.08.07 15:54
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Ivan Danilov, Вы писали:


ID>>Возможно, кто-то встречался с интересными паттернами или просто поделится опытом — где лучше всего решать проблемы синхронизации в сервере приложений?


AVK>Лучше всего их не решать. Т.е. стараться до последнего синхронизации избежать.


Как можно их избежать? В любом случае несколько потоков будут работать с одними и теми же данными. Я себе с трудом представляю другой вариант...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Multithreading в Application server layer
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.08.07 16:07
Оценка: 3 (1)
Здравствуйте, Ivan Danilov, Вы писали:

ID>Как можно их избежать?


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

ID> В любом случае несколько потоков будут работать с одними и теми же данными.


Почему? Почему, к примеру, нельзя для каждого потока сделать свою копию данных?
... << RSDN@Home 1.2.0 alpha rev. 716>>
AVK Blog
Re[9]: Multithreading в Application server layer
От: IB Австрия http://rsdn.ru
Дата: 20.08.07 16:08
Оценка: +1
Здравствуйте, Ivan Danilov, Вы писали:

ID>Хм. А кэшированные данные как охранять?

Во-первых, заниматься кешированием в рукопашную, только после того как стало понятно, что есть узкое место и оно лечится кешированием.
А во-вторых — не охранять, а просто грохать при поступлении новых данных.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Мы уже победили, просто это еще не так заметно...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.