Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сервис-ориентированная архитектура, Преобразование старого проекта в SOA 
:(
    Опции темы
ShurikA
  Дата 18.4.2013, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



Псем привет, давно тут не был!

Ны работаем над проектом код которого в большенстве был разработан уже очень давно, и мягко скажем на сегодняшнуй день систем при нагрузке загибается. После многочисленных анализов и проб, мы пришли к выводу что пора нам двигаться в сторону сервис-ориентированной архитектуры. Много клиентов, множество не свазанных сервисов и т.д.
Сделали несколько пробных сервисов, что бы доказать работоспасобность.

Но мы воткнулись в следующий вопрос:
Вся аппликация разделяется на независимые (но потенциально связанные) функциональные области. На пример: сервис отвечающий за пользователей и сервис отвечающий за встречи это два независимых сервиса. Но дело в том что в том чесле есть требования знать какие пользователи подписались на какие встречи. Есественно, в сегодняшней ситуации это просто many-to-many связь через 3-ю таблицу, но то к чему мы хотим прийти, это максимальный разрыв, в том чесле разнести на разные базы данных. Какой самый удобный подход к такой ситуации?

Просо ныжен совет...

Спасибо.


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Fortop
Дата 20.4.2013, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(ShurikA @  18.4.2013,  00:52 Найти цитируемый пост)
Есественно, в сегодняшней ситуации это просто many-to-many связь через 3-ю таблицу, но то к чему мы хотим прийти, это максимальный разрыв, в том чесле разнести на разные базы данных. Какой самый удобный подход к такой ситуации?

Несколько не понял.
Что мешает разнести три таблицы по разным БД?

Ну кроме контроля целостности.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ShurikA
Дата 21.4.2013, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



Цитата(Fortop @ 20.4.2013,  20:53)
Цитата(ShurikA @  18.4.2013,  00:52 Найти цитируемый пост)
Есественно, в сегодняшней ситуации это просто many-to-many связь через 3-ю таблицу, но то к чему мы хотим прийти, это максимальный разрыв, в том чесле разнести на разные базы данных. Какой самый удобный подход к такой ситуации?

Несколько не понял.
Что мешает разнести три таблицы по разным БД?

Ну кроме контроля целостности.

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


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Fortop
Дата 23.4.2013, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(ShurikA @  21.4.2013,  02:25 Найти цитируемый пост)
Проблемы никакой, но как то не вижу болього смысла порождать целый сервис только для поддержи связи. 

Ну так можете верить в безбажность своего кода и не проверять целостность

А отдельная таблица не всегда означает отдельный сервис.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ShurikA
Дата 24.4.2013, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



Цитата(Fortop @ 23.4.2013,  12:35)
А отдельная таблица не всегда означает отдельный сервис.

Согласен... И это как раз то что я изначально и стросил, и привёл пример... В надежде что есть какие то другие решения.


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Farmazon
Дата 24.4.2013, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 7.7.2006

Репутация: нет
Всего: 5



Шардинг пробовали?(оно применимо к ваше специфике?)

условная репликация не катит(возможно не всей таблицы, вьюхи)?...  Очень неприятно отказываться от fk и join...  И это, конечно хуже, чем всё в одной бд(с точки зрения целостности)...

В чём именно затык в произвоительности? Объёмы данных? Или контекст у приложения долго поднимается?


Добавлено @ 00:18
ещё раз прочитал... Разрыв контекста сервисов благотворно на безопасности может скажется (если там в другом дырок нет), а тормозов добавит... Плюс дублирование схем данных, что тоже не хорошо... А с инкапсуляцией вполне себе пакеты справиться могут...

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

Напиши цель, чего ты хочешь добиться?

Добавлено @ 00:23
Да, по методологии... Советую повтыкать Фаулера (Шаблоны корпоративных приложений), конкретно идею 3слойной архитектуры. Слой работы с бд, Слой сервисов (выделяется по необходимости), слой человеческих посредников(веб странички, портлеты, формы)... А также посмотри работы Томаса Эрла, soa patterns.

Это сообщение отредактировал(а) Farmazon - 24.4.2013, 01:07


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
ShurikA
Дата 24.4.2013, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



Цитата(Farmazon @  23.4.2013,  23:10 Найти цитируемый пост)
В чём именно затык в произвоительности? Объёмы данных? Или контекст у приложения долго поднимается?

Затык главным образом в количестве запросов. У нас бешенное количество RPC запросов, и они приходят волнами. В результате в базе выстраивается очередь.


Цитата(Farmazon @  23.4.2013,  23:10 Найти цитируемый пост)
Разрыв контекста сервисов благотворно на безопасности может скажется (если там в другом дырок нет), а тормозов добавит... 

С такого сорта тормозами планируем совладать двумя слоями кеширования, так что думаю больших проблем не будет. Но самое главное сможем разгризить базу.


Цитата(Farmazon @  23.4.2013,  23:10 Найти цитируемый пост)
Плюс дублирование схем данных, что тоже не хорошо...

Что имеется в виду? почему дублирование схем данных? Под каждого клиента?  На самом деле это то что у нас сейчас и есть, добавлятся комплексность и дико дорого поддерживать.


Цитата(Farmazon @  23.4.2013,  23:10 Найти цитируемый пост)
Напиши цель, чего ты хочешь добиться?

То жего мы пытаемся добиться это производительность, масштабируемость, упростить поддержку и потенцияльно создать API для внутреннего пользования и партнёров.
На сегодняшний день:
    Много клиентов и их будет больше. Самая большая проблемма что не известно сколько, так как мы переходим на self delivery модел
    Большое количество баз данных. ООООЧЕНЬ сложно и дорого поддерживать
    Имплементация стиля 90х годов - одна большая каша
    Почти невозможно разширать функциолнальность без переделывания (что в принцепе не так плохо smile



--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Farmazon
Дата 24.4.2013, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 7.7.2006

Репутация: нет
Всего: 5



я сейчас нашару предлагать буду)

Цитата

Затык главным образом в количестве запросов. У нас бешенное количество RPC запросов, и они приходят волнами. В результате в базе выстраивается очередь.

round-robin из серверовс сервисами(nginx вроде могёт)  с репликацией бд (катит?) Если скорость исполнения единичных запросов приемлемая... Повторюсь про шардинг за одно, у вас данные по строчкам разбиваются в группы? Если да, то резать горизонтально можно, меньше по объёму бд - шустрее запросы.

Насчёт сильно сложно поддерживать несколько... фиг знает... честно.  Можно ведь все операции заскриптовать... накатывание обновлений, сбор бекапов и прочее... Ну а код особо не поменяется, если делать аккуратно...

Дублирование схем = несколько баз с своими схемами + возможно несколько маппингов(если у вас ОРМ езь), на поддержку больше сил уходит... Лучше одна хорошо продокументированная схема, чем несколько плохо... В конце концов на пакеты разрезать можно(вот тут у джанго можно посмотреть как они этого добиваются, надеюсь не расист?)...

Кеширование - поддерживаю, но только зачем для этого полностью сервисы изолировать?... И повсеместно кеширование тоже может не потребоваться... Смотреть надо. С кешами эксперементировать надо... Одно дело те, что живут мало, сложнее с теми, что больше... Они и память жрут, потому они выгружаться в внешнюю бд будут(файлы, редиска или мемкеш), а там и на диск могут... Подсасывание такого кеша может быть соизмеримо с запросом в бд.  Плюс возникнет проблема с консистентностью данных, кеширование и обновление кэша аккуратно планировать надо... Короче свой геморрой. Бывает, что от кешей вообще толку нет, если стараться предугадать запрос клиента и выдавать инфы с избытком на запрос(т.е. порции данных больше и избыточнее, переключений контекста меньше...). Опять же, сервисы можно заставить работать с пакетами команд, можно сделать ассинхронными...



Это сообщение отредактировал(а) Farmazon - 24.4.2013, 03:47


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
ShurikA
Дата 24.4.2013, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



Цитата(Farmazon @ 24.4.2013,  02:03)
я сейчас нашару предлагать буду

Спасибо, 

вариантов на самом деле множество, вот мы и эксперементируем и пытаемся от других научиться.


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Farmazon
Дата 24.4.2013, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 7.7.2006

Репутация: нет
Всего: 5



А вот не угадаешь... специфика. Я вот могу вспомнить 2 проекта своих сразу: в одном из них кеши давали прирост в 70% быстродействия, а в другом - 0 (ну или около 5%)...


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
baldina
Дата 24.4.2013, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Цитата(ShurikA @  18.4.2013,  00:52 Найти цитируемый пост)
сервис отвечающий за пользователей и сервис отвечающий за встречи это два независимых сервиса. Но дело в том что в том чесле есть требования знать какие пользователи подписались на какие встречи.

из этого следует, что они весьма зависимы (как минимум - встречи от пользователей). значит, даже разделяя на разные базы, потребуется связь между ними (не доп. сервис, а внутренний механизм). в отношении пользователей, например, можете организовать отдельный сервер аутентификации, через который все сервисы будут работать.
PM MAIL   Вверх
Fortop
Дата 24.4.2013, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(ShurikA @  24.4.2013,  00:06 Найти цитируемый пост)
Согласен... И это как раз то что я изначально и стросил, и привёл пример... В надежде что есть какие то другие решения. 

Я значит не понял

Вот у вас уже есть ситуация
Цитата(ShurikA @  18.4.2013,  00:52 Найти цитируемый пост)
Вся аппликация разделяется на независимые (но потенциально связанные) функциональные области. На пример: сервис отвечающий за пользователей и сервис отвечающий за встречи это два независимых сервиса. Но дело в том что в том чесле есть требования знать какие пользователи подписались на какие встречи. Есественно, в сегодняшней ситуации это просто many-to-many связь через 3-ю таблицу, но то к чему мы хотим прийти, это максимальный разрыв, в том чесле разнести на разные базы данных. Какой самый удобный подход к такой ситуации?


Других подходов к этому подходу нет.
Возможно есть другие варианты решения стоящей перед вами проблемы. Но о них никто не спрашивал.

Добавлено через 12 минут и 8 секунд
Цитата(ShurikA @  24.4.2013,  02:16 Найти цитируемый пост)
У нас бешенное количество RPC запросов, и они приходят волнами. В результате в базе выстраивается очередь.

RPC сам по себе не быстр. Т.е. вы же разрулили его обработку каким-то образом.

Они работают с одними и теми же данными?
Запросы какого рода приходят? Выборки, или апдейты/вставки?
Какую латентность они могут иметь?

Это все влияет на конечное решение в итоге.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.