Вопрос по дизайну баз данных и middleware
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Вопрос по дизайну баз данных и middleware
Нужна помощь клуба, чегой-то я торможу...
Имеется N DB-серваков.
Хочется следующего:
1.Синхронно писать на все серваки одни и те же данные, типа репликации такой.
2. Надо добавить новый (N+1) не прерывая сервиса, в крайнем случае можно использовать рабочих серваков отключив его от реплицирования.
3. middleware будет писаться мной, так что любые идеи приветствуются.
Или может существуют уже готовые решения, было бы интересно обсудить как там это делается.
Имеется N DB-серваков.
Хочется следующего:
1.Синхронно писать на все серваки одни и те же данные, типа репликации такой.
2. Надо добавить новый (N+1) не прерывая сервиса, в крайнем случае можно использовать рабочих серваков отключив его от реплицирования.
3. middleware будет писаться мной, так что любые идеи приветствуются.
Или может существуют уже готовые решения, было бы интересно обсудить как там это делается.
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
search: distributed transaction service...
Про майсиквел не помню наверняка есть в виде отдельного проекта, для постгреса ето Slony-I например.
Как ты собираешься писать промежуточный уровень? Сокеты? XML CORBA? Тебе нужна только репликация или кластер с лоад балансингом?
Если хочешь кинь тз поподробнее завтра пороюсь в своих архивах, я когда то мультиплексер писал, ето тот который запрос распаралеливает по разным базам данным а потом ответы в кучку собирает, уже естсественно не очень хорошо помню но порыться наверняка можно.
Про майсиквел не помню наверняка есть в виде отдельного проекта, для постгреса ето Slony-I например.
Как ты собираешься писать промежуточный уровень? Сокеты? XML CORBA? Тебе нужна только репликация или кластер с лоад балансингом?
Если хочешь кинь тз поподробнее завтра пороюсь в своих архивах, я когда то мультиплексер писал, ето тот который запрос распаралеливает по разным базам данным а потом ответы в кучку собирает, уже естсественно не очень хорошо помню но порыться наверняка можно.
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
Re: Вопрос по дизайну баз данных и middleware
тебе на майсиквел? тады ой...Marmot писал(а):Нужна помощь клуба, чегой-то я торможу...
Имеется N DB-серваков.
Хочется следующего:
1.Синхронно писать на все серваки одни и те же данные, типа репликации такой.
2. Надо добавить новый (N+1) не прерывая сервиса, в крайнем случае можно использовать рабочих серваков отключив его от реплицирования.
3. middleware будет писаться мной, так что любые идеи приветствуются.
Или может существуют уже готовые решения, было бы интересно обсудить как там это делается.
-
- Маньяк
- Сообщения: 4203
- Зарегистрирован: 08 мар 2006, 15:45
- Откуда: Ричмонд
Re: Вопрос по дизайну баз данных и middleware
Ну скажи как для мс. мне будет интересно узнать...
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Ок, попробую спросить по другому 
The middleware для клиента выглядит как write-only DB, к мне приходят INSERTs/UPDATEs/DELETEs а я делаю простейшее мультиплексирование и tranaction management/coordination на N DBs. Если хотя бы на одной возникают проблемы, то вся операция инвалидируется.
Все это уже описано в многих местах и сделать это можно без проблем.
Теперь представим ситуацию: все работает, все хорошо... и вдруг появилась необходимость добавить в кластер на ходу, не прерывая потока INSERTs/UPDATEs/DELETEs еще один сервак.
Вот тут-то у меня затык....
Единственное что приходит в голову это остановить записи на один сервак, и сразу начать писать все записи в лог.
Сдлать копию DB на новый сервак и начать проигрывать лог на обоих серваках. А лог при этом продолжает расти с головы, btw...
А тут уже совсем затык, как переключится с лога на real-time updates ?

The middleware для клиента выглядит как write-only DB, к мне приходят INSERTs/UPDATEs/DELETEs а я делаю простейшее мультиплексирование и tranaction management/coordination на N DBs. Если хотя бы на одной возникают проблемы, то вся операция инвалидируется.
Все это уже описано в многих местах и сделать это можно без проблем.
Теперь представим ситуацию: все работает, все хорошо... и вдруг появилась необходимость добавить в кластер на ходу, не прерывая потока INSERTs/UPDATEs/DELETEs еще один сервак.
Вот тут-то у меня затык....
Единственное что приходит в голову это остановить записи на один сервак, и сразу начать писать все записи в лог.
Сдлать копию DB на новый сервак и начать проигрывать лог на обоих серваках. А лог при этом продолжает расти с головы, btw...
А тут уже совсем затык, как переключится с лога на real-time updates ?
- aldep
- Маньяк
- Сообщения: 1593
- Зарегистрирован: 18 фев 2003, 08:06
- Откуда: Toronto
- Контактная информация:
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
У меня во все базы пишется одно и тоже, клиенты читают напрямую из случайной DB.aissp писал(а):search: distributed transaction service...
Про майсиквел не помню наверняка есть в виде отдельного проекта, для постгреса ето Slony-I например.
Как ты собираешься писать промежуточный уровень? Сокеты? XML CORBA? Тебе нужна только репликация или кластер с лоад балансингом?
Если хочешь кинь тз поподробнее завтра пороюсь в своих архивах, я когда то мультиплексер писал, ето тот который запрос распаралеливает по разным базам данным а потом ответы в кучку собирает, уже естсественно не очень хорошо помню но порыться наверняка можно.
Общатся будем по сокетам, нах мне всякие там обертки...
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Ну ето делается довольно просто. Логика примерно такая, как только ты начинаешь "медленную" репликацию ты заводишь очередь которая копит инсерты апдаты. Как только репликация закончилась, ты заводишь воторую очередь, которая копит запросы на изменения, а первую раскручиваешь, как первая раскрутилась вся, ты меняешь очереди местами теперь раскручивается вторая а первая пополняется новыми. Процесс продолжается до тех пор пока на момент переключения очередей в той которая копит не будет ни одной записи. Так примерно устроено переключение процессов в 2.6 ядре.
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
напиши "монитор". транзакции гони через него. в нем сделай очередб которая в обычной ситуациц "курит". как только пришло вермя бобавить сервак дергаешь свитч -- изменения пошли в очередь... в это время спокойно добавляешь сервак. дергаешь свитч назад... монитор добивает транзакции в базу.Marmot писал(а):Неа, под записью я тут имею ввиду SQL statement-ы а так же записи в логе. SQL statement-ы могут быть какие угодно, в то числе работающие с множественными записями в таблицах.aldep писал(а):У тебя есть дата последнего обновления записи?
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Ндаа... похоже что может сработать, проблема в том что очередь надо будет держать на диске, а не в памяти, на случай внезапной смерти...aissp писал(а):Ну ето делается довольно просто. Логика примерно такая, как только ты начинаешь "медленную" репликацию ты заводишь очередь которая копит инсерты апдаты. Как только репликация закончилась, ты заводишь воторую очередь, которая копит запросы на изменения, а первую раскручиваешь, как первая раскрутилась вся, ты меняешь очереди местами теперь раскручивается вторая а первая пополняется новыми. Процесс продолжается до тех пор пока на момент переключения очередей в той которая копит не будет ни одной записи. Так примерно устроено переключение процессов в 2.6 ядре.
Хммм, recovery случае краша в момент синхронизации я пожалуй затрахаюсь отлаживать....

Ну да ладно, надо будет посмотреть как оно разложится в коде...
А еще какие идеи у кого есть?
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Файл те нужен тока для внезапной смерти, и пишешь ты всегда тока в конец файла никаких практически страниц и навигации - писать в конец читать с начала. А в целом конечно надо нагрузку смотреть - величина базы данных и мошность потока обновлений, а то могет получиться так что никогда не реплицируешь 
Ать да забыл сказать - тебе нафиг не надо делать рековери в случае креша, заново повторяешь процесс синхронизации.

Ать да забыл сказать - тебе нафиг не надо делать рековери в случае креша, заново повторяешь процесс синхронизации.
Последний раз редактировалось aissp 23 янв 2007, 09:49, всего редактировалось 1 раз.
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Мне надо сначала новый сервак наполнить данными, а откуда их брать в этом случае ?папа Карло писал(а): напиши "монитор". транзакции гони через него. в нем сделай очередб которая в обычной ситуациц "курит". как только пришло вермя бобавить сервак дергаешь свитч -- изменения пошли в очередь... в это время спокойно добавляешь сервак. дергаешь свитч назад... монитор добивает транзакции в базу.
Не забывай, клиенты хотят видеть свои апдэйты сразу, я не могу откладывать writes на те серваки с которых клиенты читают в момент синхронизации...
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
- Проф. Преображенский
- Графоман
- Сообщения: 20276
- Зарегистрирован: 08 ноя 2006, 11:10