Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
05.10.2006, 08:12
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Заинтересовал меня такой концептуальный :) вопрос... Есть система, построенная по принципу 3-звенки. Соответственно есть сервер приложений (далее СП), который висит как служба и обслуживает клиентские подключения. Клиенты, при подключении указывают с какой "конфигурацией" (а-ля БД) они хотят работать, и СП по этому коду создает соединение с нужной базой, ну и обслуживает запросы. На каждое подключение создается свой поток на СП, в котором есть коннекшен к СУБД и создаются/удаляются объекты типа ADOQuery. В каждом потоке есть кеш всяких описаний. Например, шаблоны отчетов хранятся в базе, при первом запросе от клиента на получение шаблона, он помещается в кеш, и , пока кеш не будет сброшен, при следующих клиентских запросах шаблон будет выдаваться из кеша. Но кеш у каждого потока СП разный. То есть, если с одной "конфигурациеей" работает 100 клиентов, то содержимое кеша различных потоков повторяется. Получается: насколько выгодно иметь общий кеш, ведь при выигрыше по памяти (шаблон в моем примере будет храниться в кеше в одном экземпляре) возникнет очередь обращений к кешу за нужным объектом? А это межпоточная синхронизация - надо тормозить один поток, пока с кешем работает другой. Как вы думаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 09:42
|
|||
---|---|---|---|
|
|||
Пул объектов: за и против |
|||
#18+
Если опасаетесь, что не будет хватать производительности по обращению к кешу - масштабируйте кеш. Запросы направляются к Observer-у, который определяет доступные кеш-сервисы и распределяет запросы по ним. Ориентируйтесь также на асинхронные вызовы. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 09:49
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Alex SПолучается: насколько выгодно иметь общий кеш, ведь при выигрыше по памяти (шаблон в моем примере будет храниться в кеше в одном экземпляре) возникнет очередь обращений к кешу за нужным объектом? А это межпоточная синхронизация - надо тормозить один поток, пока с кешем работает другой. С каких это пор чтение из кэша стало требовать эксклюзивной блокировки, да еще и на уровне кэша в целом? Если так реализовывать, то конечно кэша не нужно. И сервера приложений тоже не нужно. Лучше писать что-нибудь на акцессе.. Alex SНа каждое подключение создается свой поток на СП, в котором есть коннекшен к СУБД и создаются/удаляются объекты типа ADOQuery. А вот это напрягло бы меня куда больше, нежели какие-то кэши. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 10:15
|
|||
---|---|---|---|
|
|||
Пул объектов: за и против |
|||
#18+
softwarer С каких это пор чтение из кэша стало требовать эксклюзивной блокировки, да А по-моему автор не сказал что эксклюзивная блокировка на чтение требуется. Он сказал что возникает очередь при обращении к ресурсу - ну да, возникает она, если обращения к кешу производится в однопоточном режиме... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 10:20
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
А что тут гадать, возьмиет пример OS, где есть счётчики, которые показывают эффективен ли кэш и его размер. В проектируемой системе должна быть обоснована необходимость кэша и его размера. Причём как теоретически так и на модели/тесте. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 10:31
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
softwarer Alex SПолучается: насколько выгодно иметь общий кеш, ведь при выигрыше по памяти (шаблон в моем примере будет храниться в кеше в одном экземпляре) возникнет очередь обращений к кешу за нужным объектом? А это межпоточная синхронизация - надо тормозить один поток, пока с кешем работает другой. С каких это пор чтение из кэша стало требовать эксклюзивной блокировки, да еще и на уровне кэша в целом? Если так реализовывать, то конечно кэша не нужно. И сервера приложений тоже не нужно. Лучше писать что-нибудь на акцессе.. Alex SНа каждое подключение создается свой поток на СП, в котором есть коннекшен к СУБД и создаются/удаляются объекты типа ADOQuery. А вот это напрягло бы меня куда больше, нежели какие-то кэши. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 10:35
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Роман ДынникЕсли опасаетесь, что не будет хватать производительности по обращению к кешу - масштабируйте кеш. Запросы направляются к Observer-у, который определяет доступные кеш-сервисы и распределяет запросы по ним. Ориентируйтесь также на асинхронные вызовы. Ну в смылсе не один и не 100 кешей на 100 клиентов,а, например, 10? softwarerС каких это пор чтение из кэша стало требовать эксклюзивной блокировки, да еще и на уровне кэша в целом? Может, я что-то недопонимаю, но как я буду из разных потоков (TThread) обращаться к одному глобальному экземпляру классу и что-то в нем искать? Такие вещи как критические секции, обычно и обеспечивают "потокобезопасность", а что есть "EnterCriticalSection(FLock)" - остановка (блокировка) потока, пока другой поток не выйдет из критической секции. Другое дело, что обычно эти механизмы обеспечения потокобезопасности скрыты. softwarer А вот это напрягло бы меня куда больше, нежели какие-то кэши. Вы имеете в ввиду, что надо одно соединение на все подключения? Мои аргументы против: - Многие заказчики хотят видеть всех юзеров в результатах sp_who2 (MsSQL выдает подключения к серверу) - Одно подключение не резиновое. В нем также возникают блокировки потоков (если оно (подключение) реально одно) - Не хочу связываться с клонированием коннекшенов, что возникает при т.н. асинхронной работе, когда ADO решает, что ему надо бы создать еще одно подключение для параллельной обработки нескольких запросов. - Возникают проблемы с временными таблицами, которые видны только в "своем" коннекшене. - В общем случае, из одного СП подключения к разным серверам - В общем случае, из одного СП подключения с разными правами на сервере - может еще чего, сразу не вспомнил. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 10:47
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Alex SМожет, я что-то недопонимаю, но как я буду из разных потоков (TThread) обращаться к одному глобальному экземпляру классу и что-то в нем искать? Такие вещи как критические секции, обычно и обеспечивают "потокобезопасность", а что есть "EnterCriticalSection(FLock)" - остановка (блокировка) потока, пока другой поток не выйдет из критической секции. Другое дело, что обычно эти механизмы обеспечения потокобезопасности скрыты. такие вещи как 3-е звено, пул коннектов и т.д. само по себе "критические секции" - ограничивают потоково-параллельную работу пользователей с сервером. Оно тебе надо было? "Слабое" среднее звено? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 11:21
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Petro123 Alex SМожет, я что-то недопонимаю, но как я буду из разных потоков (TThread) обращаться к одному глобальному экземпляру классу и что-то в нем искать? Такие вещи как критические секции, обычно и обеспечивают "потокобезопасность", а что есть "EnterCriticalSection(FLock)" - остановка (блокировка) потока, пока другой поток не выйдет из критической секции. Другое дело, что обычно эти механизмы обеспечения потокобезопасности скрыты. такие вещи как 3-е звено, пул коннектов и т.д. само по себе "критические секции" - ограничивают потоково-параллельную работу пользователей с сервером. Оно тебе надо было? "Слабое" среднее звено? Так пока ничего такого и нет! Ни пула, ни межпотоковой синхронизации, ни одного коннекшена на всех. Сейчас сервер приложений почти полностью "потоконезависимый" :). Почти, потому что есть единственная критическая секция синхронизации потоков, когда в целях администрирования (монитор подключений) запрашиваются параметры всех потоков. И то с проверкой потока на "занятость". Вот я и думаю - стоит заморачиваться или нет. А насчет "религиозных войн" по поводу среднего звена - давайте не будем снова расчехлять копья ;) . Считайте мой сервер приложений аналогом оракловой службы TNSListener (чем она не третье звено в _классической_ клиент-серверной архитектуре? :) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 11:53
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Alex S А насчет "религиозных войн" по поводу среднего звена - давайте не будем снова расчехлять копья ;) давайте не будем :). Только вопрос ваш звучит странно тогда: - создали третье звено полностью "потоконезависимый" (про ЗАЧЕМ тогда - не будем) - в данном случае (среднее звено не решает бизнес-задачи) - никакой кэш не нужен. Или всё-таки среднее звено - "тормозит"? ;) ЗЫ. Сначала делаем препятствия, а потом их героически "обходим". "Сложнее всего в мире достигнуть простоты - это крайняя граница опыта и последнее усилие гения". George Sand. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 12:14
|
|||
---|---|---|---|
|
|||
Пул объектов: за и против |
|||
#18+
Alex S Ну в смылсе не один и не 100 кешей на 100 клиентов,а, например, 10? Да ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 12:33
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
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-ник не "Вкомпилируются" формы документов, шаблоны отчетов и т.п. - он берет их из базы. Меняются они там при сменах версий, т.е. редко. Вот эти описания и кеширются. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 12:43
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
автор- Многие заказчики хотят видеть всех юзеров в результатах sp_who2 (MsSQL выдает подключения к серверу) В нормальной системе на АПП сервере ведется учет не только подключенных юзеров, но также и список ресурсов, заблокированных пользователем, и многое другое. Раз уж решили абстрагироваться от SQL сервера - сделайте это грамотно. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 12:47
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
+ Про ЗАЧЕМ: Собственно, это вытекало из моих объяснений, но дополню: x) СУБД не видны из сети. Законнектится к ним, например с помощью sqlplus.exe или osql.exe невозможно. Иногда это встречается в требованиях по безопасности в дотошных (как правило иностранных) организациях. Да и вообще полезно для спокойного сна ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 13:02
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
UrryMcA автор- Многие заказчики хотят видеть всех юзеров в результатах sp_who2 (MsSQL выдает подключения к серверу) В нормальной системе на АПП сервере ведется учет не только подключенных юзеров, но также и список ресурсов, заблокированных пользователем, и многое другое. Ну так нет проблем - почти так и происходит, а вот если бы не было СП .... Вообще про sp_who2 я имел в виду как отрицательный момент хождения на сервер через один коннект ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 13:39
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Роман ДынникА по-моему автор не сказал что эксклюзивная блокировка на чтение требуется. А по-моему, сказал: надо тормозить один поток, пока с кешем работает другой. И позже подтвердил. Alex SМожет, я что-то недопонимаю, но как я буду из разных потоков (TThread) обращаться к одному глобальному экземпляру классу и что-то в нем искать? Такие вещи как критические секции, обычно и обеспечивают ... Прочитайте книгу дальше первых страниц. Или задумайтесь над тем, как работает тот же MSSQL, когда допустим сто клиентов одновременно просят у него данные (в наиболее интересном случае - просят у него результаты одного и того же долгого запроса). Alex S> А вот это напрягло бы меня куда больше, нежели какие-то кэши. Вы имеете в ввиду, что надо одно соединение на все подключения? Нет. Я имею в виду, что при таком технологическом решении я бы не ожидал заметных дополнительных проблем от одного малоэффективного кэша данных. Конкретных решений я предлагать не хочу, потому что все больше убеждаюсь в том, что единственно разумное решение - выбросить и начать заново. Alex SСчитайте мой сервер приложений аналогом оракловой службы TNSListener (чем она не третье звено в _классической_ клиент-серверной архитектуре? :) ) Всем. Не стоит щеголять грамотностью там, где ни фига не разбираетесь. Впрочем, можете провести эксперимент. Запустите программу, вырубите TNS Listener и увидите, что программа продолжает нормально работать. Когда добьетесь такого же результата от своего аппсервера, приходите. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 13:44
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Alex S....Получается: насколько выгодно иметь общий кеш, ведь при выигрыше по памяти (шаблон в моем примере будет храниться в кеше в одном экземпляре) возникнет очередь обращений к кешу за нужным объектом? А это межпоточная синхронизация - надо тормозить один поток, пока с кешем работает другой.Как вы думаете? 1) представте, что объекты кэша уникальны. Уникальность поддерживается кэшем за счёт механизма идентификации самих данных, упорядочивания, подсчёта ссылок от разных "внутренних" клиентов. Вот в рамках объекта и нужно городить синхронизацию... 2) синхронизация требуется для доступа к данным, которые могут быть изменены. Например кол-во элементов в списке, сами данные в списке, некие глобальные данные и прочая муть... На чтение, если объект кэша существует - нет необходимости его блокировать. 3) кэш объектов отличная точка для извещения об изменении состояния кэша. Ну например выгрузка его на диск, протухание, удаления, модификации... 4) Не бойтесь искать решения. где то так... по поводу необходимости сервера приложения - не слушайте людей никогда не видевших нормальных БД... Потому как сами движки БД выполненны как клиент-серверные системы, со своим сервером приложения (сам движок, а клиент - драйвер этой бд)... удачи Вам (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 13:47
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
kolobok0На чтение, если объект кэша существует - нет необходимости его блокировать. Не то чтобы полностью согласен с этой фразой. kolobok0Потому как сами движки БД выполненны как клиент-серверные системы, со своим сервером приложения (сам движок, а клиент - драйвер этой бд)... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 13:56
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
softwarer kolobok0Потому как сами движки БД выполненны как клиент-серверные системы, со своим сервером приложения (сам движок, а клиент - драйвер этой бд)... :) +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 14:49
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Alex S ....Например, шаблоны отчетов хранятся в базе, при первом запросе от клиента на получение шаблона, он помещается в кеш , и , пока кеш не будет сброшен, при следующих клиентских запросах шаблон будет выдаваться из кеша. а если пойти дальше: ....Например, ДАННЫЕ хранятся в базе, при первом запросе от клиента на получение ДАННЫХ, онИ помещаЮтся в кеш, и , пока кеш не будет сброшен, при следующих клиентских запросах ДАННЫЕ будУт выдаваться из кеша. ЗЫ. Чем шаблоны отчётов лучше остальных данных получаемых с сервера - непонятно. Если ты сервер - не суетись под клиентом (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 14:55
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Petro123...Чем шаблоны отчётов лучше остальных данных получаемых с сервера - непонятно.... В таком контексте - Вы правы.. Вообщето кэш ради ускорения БД - глупость. А вот кэш удовлетворяющий неким бизнес требованиям и упрощающий ситуацию - это другое дело. Всё же зависит от задачи, это и так понятно... Предлагаю не передёргивать и расчитывать, что автор топика взвесил все за и против... с уважением (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 17:47
|
|||
---|---|---|---|
|
|||
Пул объектов: за и против |
|||
#18+
авторВообщето кэш ради ускорения БД - глупость Ну я бы так не сказал... В тех же всяких ORM, Hibernate, к примеру - это и есть основная задача кеша - повторно не запрашивать данные из БД если они не были изменены. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 18:09
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Роман Дынник авторВообщето кэш ради ускорения БД - глупость Ну я бы так не сказал... ..... повторно не запрашивать данные из БД если они не были изменены. интересно, как ты ЭТО узнаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2006, 18:13
|
|||
---|---|---|---|
Пул объектов: за и против |
|||
#18+
Роман Дынник...к примеру - это и есть основная задача кеша - повторно не запрашивать данные из БД если они не были изменены. к сожалению не совсем тесно знаком с указанными системами, но сдаётся мне, что кэш там организован не с "сырыми" данными из БД... А каким то макаром сгрупированные по определённой бизнес логики, в данном контексте слоя... Ну например... Предположим речь идёт о бизнес слое, в велосипедостроении... Есть у нас объект колесо.. Нам удобно с ним тискаться как с атомарной сущностью, с учётом этого типа. При этом хранение этого колеса возможно не в одной таблице, и даже не в одной базе... Это не относиться к высказыванию о кэше БД.. Более того именно это я и имел в ввиду когда ляпнул "А вот кэш удовлетворяющий неким бизнес требованиям и упрощающий ситуацию "... с уважением (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=33&mobile=1&tid=1549269]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
188ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
95ms |
get tp. blocked users: |
2ms |
others: | 264ms |
total: | 589ms |
0 / 0 |