powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Пул объектов: за и против
25 сообщений из 51, страница 1 из 3
Пул объектов: за и против
    #34033394
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заинтересовал меня такой концептуальный :) вопрос...
Есть система, построенная по принципу 3-звенки. Соответственно есть сервер приложений (далее СП), который висит как служба и обслуживает клиентские подключения. Клиенты, при подключении указывают с какой "конфигурацией" (а-ля БД) они хотят работать, и СП по этому коду создает соединение с нужной базой, ну и обслуживает запросы.
На каждое подключение создается свой поток на СП, в котором есть коннекшен к СУБД и создаются/удаляются объекты типа ADOQuery. В каждом потоке есть кеш всяких описаний. Например, шаблоны отчетов хранятся в базе, при первом запросе от клиента на получение шаблона, он помещается в кеш, и , пока кеш не будет сброшен, при следующих клиентских запросах шаблон будет выдаваться из кеша.
Но кеш у каждого потока СП разный. То есть, если с одной "конфигурациеей" работает 100 клиентов, то содержимое кеша различных потоков повторяется.

Получается: насколько выгодно иметь общий кеш, ведь при выигрыше по памяти (шаблон в моем примере будет храниться в кеше в одном экземпляре) возникнет очередь обращений к кешу за нужным объектом? А это межпоточная синхронизация - надо тормозить один поток, пока с кешем работает другой.

Как вы думаете?
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34033518
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если опасаетесь, что не будет хватать производительности по обращению к кешу - масштабируйте кеш.
Запросы направляются к Observer-у, который определяет доступные кеш-сервисы и распределяет запросы по ним.
Ориентируйтесь также на асинхронные вызовы.
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34033534
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex SПолучается: насколько выгодно иметь общий кеш, ведь при выигрыше по памяти (шаблон в моем примере будет храниться в кеше в одном экземпляре) возникнет очередь обращений к кешу за нужным объектом? А это межпоточная синхронизация - надо тормозить один поток, пока с кешем работает другой.
С каких это пор чтение из кэша стало требовать эксклюзивной блокировки, да еще и на уровне кэша в целом?

Если так реализовывать, то конечно кэша не нужно. И сервера приложений тоже не нужно. Лучше писать что-нибудь на акцессе..

Alex SНа каждое подключение создается свой поток на СП, в котором есть коннекшен к СУБД и создаются/удаляются объекты типа ADOQuery.
А вот это напрягло бы меня куда больше, нежели какие-то кэши.
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34033623
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
С каких это пор чтение из кэша стало требовать эксклюзивной блокировки, да
А по-моему автор не сказал что эксклюзивная блокировка на чтение требуется. Он сказал что возникает очередь при обращении к ресурсу - ну да, возникает она, если обращения к кешу производится в однопоточном режиме...
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34033638
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что тут гадать, возьмиет пример OS, где есть счётчики, которые показывают эффективен ли кэш и его размер.
В проектируемой системе должна быть обоснована необходимость кэша и его размера.
Причём как теоретически так и на модели/тесте.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34033688
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Alex SПолучается: насколько выгодно иметь общий кеш, ведь при выигрыше по памяти (шаблон в моем примере будет храниться в кеше в одном экземпляре) возникнет очередь обращений к кешу за нужным объектом? А это межпоточная синхронизация - надо тормозить один поток, пока с кешем работает другой.
С каких это пор чтение из кэша стало требовать эксклюзивной блокировки, да еще и на уровне кэша в целом?

Если так реализовывать, то конечно кэша не нужно. И сервера приложений тоже не нужно. Лучше писать что-нибудь на акцессе..

Alex SНа каждое подключение создается свой поток на СП, в котором есть коннекшен к СУБД и создаются/удаляются объекты типа ADOQuery.
А вот это напрягло бы меня куда больше, нежели какие-то кэши.
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34033700
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ДынникЕсли опасаетесь, что не будет хватать производительности по обращению к кешу - масштабируйте кеш.
Запросы направляются к Observer-у, который определяет доступные кеш-сервисы и распределяет запросы по ним.
Ориентируйтесь также на асинхронные вызовы.
Ну в смылсе не один и не 100 кешей на 100 клиентов,а, например, 10?

softwarerС каких это пор чтение из кэша стало требовать эксклюзивной блокировки, да еще и на уровне кэша в целом?
Может, я что-то недопонимаю, но как я буду из разных потоков (TThread) обращаться к одному глобальному экземпляру классу и что-то в нем искать?
Такие вещи как критические секции, обычно и обеспечивают "потокобезопасность", а что есть "EnterCriticalSection(FLock)" - остановка (блокировка) потока, пока другой поток не выйдет из критической секции. Другое дело, что обычно эти механизмы обеспечения потокобезопасности скрыты.

softwarer
А вот это напрягло бы меня куда больше, нежели какие-то кэши.
Вы имеете в ввиду, что надо одно соединение на все подключения?
Мои аргументы против:
- Многие заказчики хотят видеть всех юзеров в результатах sp_who2 (MsSQL выдает подключения к серверу)
- Одно подключение не резиновое. В нем также возникают блокировки потоков (если оно (подключение) реально одно)
- Не хочу связываться с клонированием коннекшенов, что возникает при т.н. асинхронной работе, когда ADO решает, что ему надо бы создать еще одно подключение для параллельной обработки нескольких запросов.
- Возникают проблемы с временными таблицами, которые видны только в "своем" коннекшене.
- В общем случае, из одного СП подключения к разным серверам
- В общем случае, из одного СП подключения с разными правами на сервере
- может еще чего, сразу не вспомнил.
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34033742
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex SМожет, я что-то недопонимаю, но как я буду из разных потоков (TThread) обращаться к одному глобальному экземпляру классу и что-то в нем искать?
Такие вещи как критические секции, обычно и обеспечивают "потокобезопасность", а что есть "EnterCriticalSection(FLock)" - остановка (блокировка) потока, пока другой поток не выйдет из критической секции. Другое дело, что обычно эти механизмы обеспечения потокобезопасности скрыты.

такие вещи как 3-е звено, пул коннектов и т.д. само по себе "критические секции" - ограничивают потоково-параллельную работу пользователей с сервером.
Оно тебе надо было? "Слабое" среднее звено?
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34033898
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 Alex SМожет, я что-то недопонимаю, но как я буду из разных потоков (TThread) обращаться к одному глобальному экземпляру классу и что-то в нем искать?
Такие вещи как критические секции, обычно и обеспечивают "потокобезопасность", а что есть "EnterCriticalSection(FLock)" - остановка (блокировка) потока, пока другой поток не выйдет из критической секции. Другое дело, что обычно эти механизмы обеспечения потокобезопасности скрыты.

такие вещи как 3-е звено, пул коннектов и т.д. само по себе "критические секции" - ограничивают потоково-параллельную работу пользователей с сервером.
Оно тебе надо было? "Слабое" среднее звено?

Так пока ничего такого и нет! Ни пула, ни межпотоковой синхронизации, ни одного коннекшена на всех. Сейчас сервер приложений почти полностью "потоконезависимый" :). Почти, потому что есть единственная критическая секция синхронизации потоков, когда в целях администрирования (монитор подключений) запрашиваются параметры всех потоков. И то с проверкой потока на "занятость".
Вот я и думаю - стоит заморачиваться или нет.

А насчет "религиозных войн" по поводу среднего звена - давайте не будем снова расчехлять копья ;) . Считайте мой сервер приложений аналогом оракловой службы TNSListener (чем она не третье звено в _классической_ клиент-серверной архитектуре? :) )
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034033
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex S
А насчет "религиозных войн" по поводу среднего звена - давайте не будем снова расчехлять копья ;)
давайте не будем :).
Только вопрос ваш звучит странно тогда:
- создали третье звено полностью "потоконезависимый" (про ЗАЧЕМ тогда - не будем)
- в данном случае (среднее звено не решает бизнес-задачи) - никакой кэш не нужен.

Или всё-таки среднее звено - "тормозит"? ;)

ЗЫ. Сначала делаем препятствия, а потом их героически "обходим".

"Сложнее всего в мире достигнуть простоты - это крайняя граница опыта и последнее усилие гения".
George Sand.
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034124
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex S
Ну в смылсе не один и не 100 кешей на 100 клиентов,а, например, 10?

Да
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034237
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 Alex S
А насчет "религиозных войн" по поводу среднего звена - давайте не будем снова расчехлять копья ;)
давайте не будем :).
Только вопрос ваш звучит странно тогда:
- создали третье звено полностью "потоконезависимый" (про ЗАЧЕМ тогда - не будем)
- в данном случае (среднее звено не решает бизнес-задачи) - никакой кэш не нужен.

Или всё-таки среднее звено - "тормозит"? ;)

ЗЫ. Сначала делаем препятствия, а потом их героически "обходим".

Про ЗАЧЕМ:
1) Абстрагирование от типа сервера на настоящий момент:
Microsoft SQL Server 2000
Microsoft SQL Server 2005
MSDE
Oracle 8
Oracle 9
Oracle 10
IBM DB2 v8
2) В СП сосредоточены функции:
-ограничения доступа
-ПОЛНОГО журналирования событий
3) С рабочих мест вынесены ВСЕ драйверы СУБД, что особенно актуально в случае Oracle, DB2. Наиболее часто практикуется забуск клиентского приложения (~4Mb) с сетевого ресурса. Никто не бегает по этажам и зданиям для смены версий и настройки.
4) Организована шифрация всего траффика между клиентскими приложениями и СП, а это наибольший отрезок сети т.к. между СП и СУБД он минимален, либо его нет (на одной машине).
5) Варианты подключения через HTTP,HTTPS (встроено в клиентское приложение) в том числе с выходом через прокси сервер.
6) "КроссСерверные" конфигурации - одно клиентское подключение работает с данными нескольких СУБД (один справочник на одном, другой на другом ...) в т.ч. на различных типах СУБД
7) Уменьшение траффика от клиентской станции:
- из-за формализации выполнения операций (посылается короткая команда, выполняющая бОльшие операции между СП и СУБД
- из-за пакетного механизма передачи наборов данных между СП и клиентом
- из-за упаковки траффика алгоритмами компрессии
8) Гладкое переподключение при сбоях в сети
9) может чего не вспомнил

Кеш нужен по любому :) Вообще, это не напрямую связано с 3-звенкой, скорее с таким принципом построения системы, как "работа по описаниям" , хранящимся в базе. Шаблоны отчетов, DFM форм, описания атрибутов документов, методов из обработки и т.п.
В клиентский exe-ник не "Вкомпилируются" формы документов, шаблоны отчетов и т.п. - он берет их из базы. Меняются они там при сменах версий, т.е. редко. Вот эти описания и кеширются.
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034310
UrryMcA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор- Многие заказчики хотят видеть всех юзеров в результатах sp_who2 (MsSQL выдает подключения к серверу)

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

Раз уж решили абстрагироваться от SQL сервера - сделайте это грамотно.
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034344
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ Про ЗАЧЕМ:
Собственно, это вытекало из моих объяснений, но дополню:

x) СУБД не видны из сети. Законнектится к ним, например с помощью sqlplus.exe или osql.exe невозможно. Иногда это встречается в требованиях по безопасности в дотошных (как правило иностранных) организациях.
Да и вообще полезно для спокойного сна ;)
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034429
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrryMcA автор- Многие заказчики хотят видеть всех юзеров в результатах sp_who2 (MsSQL выдает подключения к серверу)

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

Ну так нет проблем - почти так и происходит, а вот если бы не было СП ....
Вообще про sp_who2 я имел в виду как отрицательный момент хождения на сервер через один коннект
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034633
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ДынникА по-моему автор не сказал что эксклюзивная блокировка на чтение требуется.
А по-моему, сказал:

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

Alex SМожет, я что-то недопонимаю, но как я буду из разных потоков (TThread) обращаться к одному глобальному экземпляру классу и что-то в нем искать? Такие вещи как критические секции, обычно и обеспечивают ...
Прочитайте книгу дальше первых страниц. Или задумайтесь над тем, как работает тот же MSSQL, когда допустим сто клиентов одновременно просят у него данные (в наиболее интересном случае - просят у него результаты одного и того же долгого запроса).

Alex S> А вот это напрягло бы меня куда больше, нежели какие-то кэши.

Вы имеете в ввиду, что надо одно соединение на все подключения?
Нет. Я имею в виду, что при таком технологическом решении я бы не ожидал заметных дополнительных проблем от одного малоэффективного кэша данных. Конкретных решений я предлагать не хочу, потому что все больше убеждаюсь в том, что единственно разумное решение - выбросить и начать заново.

Alex SСчитайте мой сервер приложений аналогом оракловой службы TNSListener (чем она не третье звено в _классической_ клиент-серверной архитектуре? :) )
Всем. Не стоит щеголять грамотностью там, где ни фига не разбираетесь.

Впрочем, можете провести эксперимент. Запустите программу, вырубите TNS Listener и увидите, что программа продолжает нормально работать. Когда добьетесь такого же результата от своего аппсервера, приходите.
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034663
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex S....Получается: насколько выгодно иметь общий кеш, ведь при выигрыше по памяти (шаблон в моем примере будет храниться в кеше в одном экземпляре) возникнет очередь обращений к кешу за нужным объектом? А это межпоточная синхронизация - надо тормозить один поток, пока с кешем работает другой.Как вы думаете?

1) представте, что объекты кэша уникальны. Уникальность поддерживается кэшем за счёт механизма идентификации самих данных, упорядочивания, подсчёта ссылок от разных "внутренних" клиентов. Вот в рамках объекта и нужно городить синхронизацию...
2) синхронизация требуется для доступа к данным, которые могут быть изменены. Например кол-во элементов в списке, сами данные в списке, некие глобальные данные и прочая муть... На чтение, если объект кэша существует - нет необходимости его блокировать.
3) кэш объектов отличная точка для извещения об изменении состояния кэша. Ну например выгрузка его на диск, протухание, удаления, модификации...
4) Не бойтесь искать решения.

где то так...

по поводу необходимости сервера приложения - не слушайте людей никогда не видевших нормальных БД... Потому как сами движки БД выполненны как клиент-серверные системы, со своим сервером приложения (сам движок, а клиент - драйвер этой бд)...

удачи Вам
(круглый)
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034690
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0На чтение, если объект кэша существует - нет необходимости его блокировать.
Не то чтобы полностью согласен с этой фразой.

kolobok0Потому как сами движки БД выполненны как клиент-серверные системы, со своим сервером приложения (сам движок, а клиент - драйвер этой бд)...
:)
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034727
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer kolobok0Потому как сами движки БД выполненны как клиент-серверные системы, со своим сервером приложения (сам движок, а клиент - драйвер этой бд)...
:)
+1
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034951
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex S
....Например, шаблоны отчетов хранятся в базе, при первом запросе от клиента на получение шаблона, он помещается в кеш , и , пока кеш не будет сброшен, при следующих клиентских запросах шаблон будет выдаваться из кеша.

а если пойти дальше:

....Например, ДАННЫЕ хранятся в базе, при первом запросе от клиента на получение ДАННЫХ, онИ помещаЮтся в кеш, и , пока кеш не будет сброшен, при следующих клиентских запросах ДАННЫЕ будУт выдаваться из кеша.

ЗЫ. Чем шаблоны отчётов лучше остальных данных получаемых с сервера - непонятно.

Если ты сервер - не суетись под клиентом (с)
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34034989
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123...Чем шаблоны отчётов лучше остальных данных получаемых с сервера - непонятно....

В таком контексте - Вы правы.. Вообщето кэш ради ускорения БД - глупость. А вот кэш удовлетворяющий неким бизнес требованиям и упрощающий ситуацию - это другое дело. Всё же зависит от задачи, это и так понятно... Предлагаю не передёргивать и расчитывать, что автор топика взвесил все за и против...

с уважением
(круглый)
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34035695
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВообщето кэш ради ускорения БД - глупость
Ну я бы так не сказал...
В тех же всяких ORM, Hibernate, к примеру - это и есть основная задача кеша - повторно не запрашивать данные из БД если они не были изменены.
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34035780
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник авторВообщето кэш ради ускорения БД - глупость
Ну я бы так не сказал...
..... повторно не запрашивать данные из БД если они не были изменены.
интересно, как ты ЭТО узнаешь?
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34035792
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник...к примеру - это и есть основная задача кеша - повторно не запрашивать данные из БД если они не были изменены.

к сожалению не совсем тесно знаком с указанными системами, но сдаётся мне, что кэш там организован не с "сырыми" данными из БД... А каким то макаром сгрупированные по определённой бизнес логики, в данном контексте слоя...

Ну например...
Предположим речь идёт о бизнес слое, в велосипедостроении... Есть у нас объект колесо.. Нам удобно с ним тискаться как с атомарной сущностью, с учётом этого типа. При этом хранение этого колеса возможно не в одной таблице, и даже не в одной базе... Это не относиться к высказыванию о кэше БД.. Более того именно это я и имел в ввиду когда ляпнул "А вот кэш удовлетворяющий неким бизнес требованиям и упрощающий ситуацию "...


с уважением
(круглый)
...
Рейтинг: 0 / 0
Пул объектов: за и против
    #34035796
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123..интересно, как ты ЭТО узнаешь?

это техническая сторона и она менее всех интересна...
например монопольное открытие БД...задача решена ????


(круглый)
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Пул объектов: за и против
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]