Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Сразу отмечу что проект исследовательский с большой вероятностью неудачи. Основная цель сделать кластерную систему с возможностью балансировки нагрузки. Идея состоит в следующем. Перехватываются все запросы к MSSQL(на уровне прокси). Они разделяются на те которые меняют данные и те которые не меняют. После этого те запросы которые изменяют данные направляются на несколько серверов(одновременно). А запросы на чтение по определенному алгоритму перенаправляются на один из серверов. Таким образом для систем с большим отношением операций чтения к операциям на запись можно решать задачу масштабирования. Предполагается что в качестве основного узла используется прокси сервер. Клиенты думают что они работают с одним MSSQL сервером на деле же они обращаются к прокси. Далее прокси сам уже перенаправляет запросы.
На практике возникает ряд проблем.Текущая реализация в прототипе сделана на уровне прокси который работает с сокетами. На данный момент возникает замедление работы порядка 15 %. Это конечно же неприемлимо. Есть понимание что скорее всего вариант ускорения единственный - перехваты на уровне сетевых драйверов. Также с разделением запросов возникают сложности(которые впрочем решаются). Например определенные запросы в рамках транзакций можно выполнять в рамках одного сервера. Также работы с курсорами, с временными таблицами и т.п. предпологает контекст выполнения на одном сервере.Есть также сложности с реализацией эффективного механизма балансировки нагрузки а также с обеспечением высокой надежности системы(к примеру эксепшен на одном из серверов).

У меня вопрос, есть ли у кого нибудь опыт в реализации подобных систем. Есть ли уже готовые решения?

P.s. Разумеется я знаю о подходах для масштабирования систем с использованием трехзвенки а в частности правильной реализации апликейшен серверов. Цель создать некоторое полууниверсальное решение.
24 май 11, 15:28    [10700743]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
думаю - овчинка выделки не стоит ....
мало того что свой апликейшин сервер надо писать ,и четко знать формат передачи данных,если жить на уровне сетевого адаптера, так и синхронизация данных на всех серверах не очнеь веселое занияе..а ваще похожее есть - называться ORACLE RAC
24 май 11, 15:30    [10700779]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Овчинка выделки стоит. К примеру у некоторых клиентов стоит ИТ система на MSSQL и оптимизирована уже по максимуму. Дальнейшая серьезная оптимизация требует структурных изменений. При этом 95% нагрузки идет на операции чтения несмотря на то что есть серьезный трафик на изменение. Сейчас сделана система репликации и часть условно не оперативных запросов (определяет их разработчик) могут быть переправлены на другой сервер. Но проблема в том что бывают задержки(например большая длинная транзакция) в переносимых данных и это ограничивает область применения.
А так бы если была эта система - натравил клиентов на проксю. А дальше только добавляй сервера(дисковый операции у них должны быть одинаковой скорости) и разделяй нагрузку. Писать в коде тоже ничего не нужно было бы.
Вообщем область применения есть, вот только есть подозрение что имеются архитектурные ограничения и реализовать эффективное(прототип уже есть) подобное решение вообще не возможно.
24 май 11, 15:39    [10700857]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
и если не секрет
нормальна скорость работы SAN выше чем работы LAN ,откуда у вас выигрыш то ??? Может вместо ,того чтоб городить ,может и рабочий,но велосипеет..просто подобрать правильную конфигурацию SAN ?
24 май 11, 15:47    [10700924]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
МуМу
Овчинка выделки стоит. К примеру у некоторых клиентов стоит ИТ система на MSSQL и оптимизирована уже по максимуму. Дальнейшая серьезная оптимизация требует структурных изменений.
Есть подозрение, что проапгрейтить с запасом одну "железку" выйдет, все таки, дешевле и быстрее, чем разводить зоопарк из множества серверов и настраивать (обучать) эту шибко умную "проксю".

МуМу
А так бы если была эта система - натравил клиентов на проксю. А дальше только добавляй сервера(дисковый операции у них должны быть одинаковой скорости) и разделяй нагрузку.
Ну и станет эта "прокся" узким местом и по производительности и по надежности.
Данные, возвращаемые всеми этими запросами, ведь тоже через нее качаться будут?
24 май 11, 15:59    [10701026]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Сеть не станет узким местом.Можно рассмотреть гипотетически когда это может произойти - но это вырожденные случаи.
Основная проблема апгрейда по оборудованию - утилизация старых серверов.
К тому же мощные нума сервера тоже на уровне аппаратной части решают аналогичные проблемы. Вопросы когерентности кеша, вопросы обмена данных по единой шине. Не совсем понятно как подобные проблемы будут решаться в дальнейшем. Кстати кто нибудь использовал сервера с количеством процессоров большим 64? (MSSQL 2008 уже позволят если я не ошибаюсь)
24 май 11, 16:19    [10701202]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
МуМу,

вам ценник для IBM 3950 M2 (помоему он тозволяет 64 ядра) в полной набивке показать ? Ето про 64 проца
Ееще раз LAN гораздо медленее чем SAN
24 май 11, 16:22    [10701227]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
МуМу,

Для начала ответьте себе на следущие вопросы:
1. Что мы будем делать, когда на одном из серверов потребуется восстановление после сбоя?
2. Что мы будем делать, когда наш proxy не сумеет распознать запрос на модификацию (например вызов процедуры)?
24 май 11, 17:02    [10701572]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
давно работает такое. обычно соотношение прочитанных и записанных страниц 100:1 и лучше в сторону чтений
как следствие если 1 сервер разгрузить от чтений и поставить работать только на запись, то все будет быстро
а читать с копий, которые сделать можно кучей способов, все зависит от требований к скорости обновления инфы
24 май 11, 17:06    [10701586]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Давайте тогда так. Смотря для каких задач. Если математические задачи решать :) - конечно это не для этой системы. Всегда есть некоторая часть которая выполняется на клиенте, есть которая выполняется на классическом сервере приложений. Есть часть которая выполняется на SQL. Вопрос в том какое их соотношение. Если предположить что SQL является узким местом. То важно какие это запросы. Если запросов таких очень много и они все мелкие - эта система тоже не подойдет. Но это бывает крайне редко. Как правило это относительно небольшое количество запросов как на чтение так и на изменение с относительно большим весом(как в реадсах так и в цпу). В этом случае не принципиально выполняется ли это на аппаратном уровне на базе одной шины или же выполняется на сетевом уровне. Накладные расходы будут маленькой частью относительно нагрузки создаваемой этими операциями на сервере.
24 май 11, 17:07    [10701596]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Crimean. Я уже писал что у нас такое тоже работает. Вот только область применения в силу разных причин очень ограниченная.
Например у одного из клиентов. Казалось бы время обновления в среднем 30 секунд задержки, но иногда может достигать 10 минут.
(Почему 10 минут? Длинная транзакция - и ничего здесь не сделаешь. Многопоточность обмена тоже не всегда помогает.)
Все - область применения ограничивается. Уже 60 % запросов нельзя перенаправлять на другой сервер.
24 май 11, 17:12    [10701624]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
invm Разумеется я этот вопрос себе задавал изначально. Здесь есть тоже несколько подводных камней. Для некоторых систем с очень высокой конкуренцией(по блокировкам) операцией на уровне SQL применять данную систему вообще будет нельзя. Точнее это будет крайне неэффективно.Разумеется для некоторых систем это автоматически не взлетит - потому как одним из важных блоков является правильное распределение операций а точнее понимание того какие являются на чтение а какие на изменение. К тому же этого тоже не достаточно. Я уже приводил пример с курсорами, темповыми таблицами и т.п.
Но вот именно эти вопросы для большинства систем принципиально решаются.
24 май 11, 17:21    [10701678]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
10 минут транзакция?? не верю (ц)
24 май 11, 17:22    [10701684]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Crimean
10 минут транзакция?? не верю (ц)


да прибудет с тобой мир 1с ,еще не в такое повериш
24 май 11, 17:23    [10701689]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Почему? Если транзакция не блокирует оперативные данные, выполняется большей частью на клиенте. Вполне такое бывает - на масштабируемость системы это не влияет. С другой стороны нужно понимать что бывают и другие ситуации. Например массовый апдейт. Например апдейт с обединением по запросу. Он выполнится быстро как массовая операция быстро. Но вот очередь по изменениям сформирует большую. А эта очередь будет переносится на уровне записей. То есть сама транзакция выполнится быстро но приведет к рассинхронизации на 10 минут. Да конечно можно реализовать в разных потоках обмен. Можно делать предварительный просмотр записей на изменение и пытаться их объеденить и тем самым ускорить процесс принятия изменгений. Иногда можно кидать подробные операции массовые сразу на несколько серверов( но это можно не всегда сделать). Вообщем все это проблематично снижает управляемость решений их унификацию.
24 май 11, 17:29    [10701741]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
МуМу
invm Разумеется я этот вопрос себе задавал изначально. Здесь есть тоже несколько подводных камней. Для некоторых систем с очень высокой конкуренцией(по блокировкам) операцией на уровне SQL применять данную систему вообще будет нельзя. Точнее это будет крайне неэффективно.Разумеется для некоторых систем это автоматически не взлетит - потому как одним из важных блоков является правильное распределение операций а точнее понимание того какие являются на чтение а какие на изменение. К тому же этого тоже не достаточно. Я уже приводил пример с курсорами, темповыми таблицами и т.п.
Но вот именно эти вопросы для большинства систем принципиально решаются.

Оно не взлетит для большинства систем, ибо, в общем случае, невозможно достоверно определить будет модификация данных или нет. А если в батче будут как чтения, так и изменения, то ваш прокси вообще в ступоре окажется. Опять же, системы имеют свойство развиваться. Так что перед внедрением изменений придется подвергать прокси тщательной ревизии на предмет корректности работы.
Я уже молчу о необходимости обеспечить согласованное изменение данных на множестве серверов.
24 май 11, 17:51    [10701916]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
guest45
Guest
МуМу
...При этом 95% нагрузки идет на операции чтения несмотря на то что есть серьезный трафик на изменение...

А не пробовали включить версионность (READ_COMMITTED_SNAPSHOT) ?
24 май 11, 17:54    [10701934]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Пока что анализ 5-и систем показывает что для этих систем взлетит. Тем не менее абсолютно согласен что для некоторых систем автоматом работать не будет.Некоторые не будут работать вообще. Правда тоже есть свои варианты. Например можно возложить на разработчика задачу указывать какие запросы тяжелые идут на чтение. В зависимости от этого автоматом запросы на чтение перенаправлять, а если они таковыми не являются в качестве проверки можно генерить с помощью простейшей системы триггеров эксепшен по которому изменения будут откатываться(в эксепшене можно указывать сообщение для разработчика о объекте так и о строке кода,объект берется из триггера а строка кода - ее сам разработчик передает изначально в метод). Во второй раз по этой метке система будет понимать что этот запрос нужно выполнять на всех серверах.
24 май 11, 18:30    [10702211]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Правда такая система проверки тоже будет накладывать свои дополнительные накладные расходы. Потому как пепред каждым вызовом надо будет для сессии сохранить предпологаемый статус операции.(чтение или запись)Допустим таблица (spid,IDUser,Status)/ А затем нужно будет в триггере(простейшие триггеры на все таблицы) проверить а не были ли модифицированы данные и каким образом это соответсвует статусу. Плюс сгенерированный ексепшион в случае ошибки приведет к откату транзакции.
24 май 11, 18:37    [10702247]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
МуМу
При этом 95% нагрузки идет на операции чтения несмотря на то что есть серьезный трафик на изменение. Сейчас сделана система репликации и часть условно не оперативных запросов


MSSQL2011 поддерживает до 4 мирроред машин с возможность чтения с них
24 май 11, 21:20    [10702856]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Посмотрим когда это где нибудь заработает в промышленном масштабе. Про mirrored SQL 2005 уже была история... Мне интересно каким концептуальным образом будет устроена эта технология?
24 май 11, 23:39    [10703235]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
МуМу
Crimean. Я уже писал что у нас такое тоже работает. Вот только область применения в силу разных причин очень ограниченная.
Например у одного из клиентов. Казалось бы время обновления в среднем 30 секунд задержки, но иногда может достигать 10 минут.
(Почему 10 минут? Длинная транзакция - и ничего здесь не сделаешь. Многопоточность обмена тоже не всегда помогает.)
Все - область применения ограничивается. Уже 60 % запросов нельзя перенаправлять на другой сервер.


Так Вы эту транзакцию в 10мин хотите по разным серверам размазать?
Или Все-таки, поскольку это 1 транзакция, она пойдет на один сервер (который на запись)? Если да, то я не пойму в чем фишка и почему Вы решили, что что-то там будет быстрее?

А не тех серверах, куда направляются запросы на модификацию, там на каждом своя часть данных или как?
25 май 11, 12:27    [10705591]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
МуМу
Посмотрим когда это где нибудь заработает в промышленном масштабе. Про mirrored SQL 2005 уже была история... Мне интересно каким концептуальным образом будет устроена эта технология?


По принципу зеркалирования, но с использованием Win clustering.
Я почитала документацию -- мне очень понравилось. Во первых, 100% времени читабельное зеркало, во-вторых, для тех у кого решение состоит из нескольких БД, при сбое в одной базе произойдет failover всех (это можно настроить). В-третьих, если я ничего не путаю, с этих зеркал можно делать бэкап!
25 май 11, 12:41    [10705760]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
йцукенг-qwerty
Guest
Кудряшка
По принципу зеркалирования, но с использованием Win clustering.
Я почитала документацию -- мне очень понравилось.

Это хорошо выглядит, если не выходить за рамки Microsoft продуктов.

Честно говоря, давно ожидал от MSSQL большего, особенно после того, как несколько сотрудников Oracle перешли на работу в Microsoft и, спустя некоторое время, появился MSSQL 2005. Если его сравнивать с MSSQL 2000, то это совершенно разные СУБД.

Появление версионности в MSSQL 2005 оценивал, как развитие в правильном направлении.
Это было уже в 2005 году, но до сих пор используется блокировочный режим и админы сражаются с несовместимостью долгих SELECT и быстрых INSERT...

Также очевидно, что отсутствие кластерной FS, которую не напишешь за пару лет, сильно сказалось на всех остальных продуктах MS.
Начиная от "хитрой" кластеризации Hyper-V CSV диска, до горизонтального масштабирования БД с помощью дублирования баз данных... :(

Про старый девиз MS, что стоимость сопровождения продуктов MS дешевле, чем у конкурентов - уже никто и не вспоминает....
25 май 11, 16:38    [10708115]     Ответить | Цитировать Сообщить модератору
 Re: Создание онлайн кластерной системы для MSSQL, возможно ли?  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
йцукенг-qwerty
Это было уже в 2005 году, но до сих пор используется блокировочный режим и админы сражаются с несовместимостью долгих SELECT и быстрых INSERT...


Ну уж не знаю зачем они с ними сражаются.
Кстати, а что в Оракле при serializable писатели читателей не блокируют?...
А вообще - это тема для топика в "Сравнении СУБД" :)
25 май 11, 18:05    [10708845]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить