tag:blogger.com,1999:blog-458002489272917533.post8467813757561189861..comments2024-02-14T14:07:38.890+05:00Comments on Блог Александра Бындю: Integration Patterns: Репликация и очередь сообщенийAlexander Byndyuhttp://www.blogger.com/profile/14185486842573956085noreply@blogger.comBlogger26125tag:blogger.com,1999:blog-458002489272917533.post-5889268681768185642014-01-13T13:25:54.842+06:002014-01-13T13:25:54.842+06:00Боюсь, что только во внутренней документации :)Боюсь, что только во внутренней документации :)Daria Ratnikovanoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-45667861276218202552014-01-13T13:00:36.637+06:002014-01-13T13:00:36.637+06:00Это интересно, вы где-то описывали ваш подход?Это интересно, вы где-то описывали ваш подход?Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-75056619582972329362014-01-13T12:59:34.865+06:002014-01-13T12:59:34.865+06:00Понятно.
Приоритетность очередей действительно на ...Понятно.<br />Приоритетность очередей действительно на SB реализовать довольно проблематично (хотя реализуемо), а вот "управляемый код" и разбор данных мог бы быть и на обработчике сообщения SB, разве что количество SB-очередей могло бы вырасти в результате.<br />В нашей системе широко используется и SB, и RabbitMQ (только при "внешних" источниках событий), поэтому было очень Daria Ratnikovanoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-78921700629520212782014-01-13T12:29:29.344+06:002014-01-13T12:29:29.344+06:00Дарья, уже где-то было в комментариях, напишу еще ...Дарья, уже где-то было в комментариях, напишу еще раз :) На схеме есть квадратик "Сервис обработки событий изменений". Там на самом деле ряд сервисов с логикой. Раньше вся эта логика была в треггерах, теперь она управляемом коде. БД шлет в шину всё подряд, но не все данные нужны и не все данные должны попасть в сервисы в "сыром" виде. Плюс этот квадратик распределяет поток Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-32403323066942352682014-01-13T12:25:09.890+06:002014-01-13T12:25:09.890+06:00А по какой причине в варианте 3 сохранили шину Rab...А по какой причине в варианте 3 сохранили шину RabbitMQ? Почему не хватило очереди на ServiceBroker-е?<br />Теоретически полностью sql-ными (точнее sb-шными) механизмами можно было переносить данные на конечные БД пользователей, раз и источник события, и приемник - это БД.Daria Ratnikovanoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-77175208786442806562013-12-28T15:47:25.918+06:002013-12-28T15:47:25.918+06:00> Я полагал как раз наоборот - два различных пр...> Я полагал как раз наоборот - два различных процесса не могли бы друг другу помешать<br /><br />Нет, представьте себе два потока событий с отметкой о версии. Если версия события устарела, то она просто будет проигнорирована.<br /><br />> Неважно, главное что база временно недоступна<br /><br />Сообщения для нее будут копиться в очереди<br /><br />> Если работают несколько сервисов, то Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-842876898722452872013-12-28T15:40:34.422+06:002013-12-28T15:40:34.422+06:00>Процесс вставки данных для начальной работы и ...>Процесс вставки данных для начальной работы и поток сообщений через очередь никак не могут друг другу помешать, т.к. пишут данные они в одни и те же таблицы.<br /><br />Я полагал как раз наоборот - два различных процесса не могли бы друг другу помешать, если бы писали в разные, никак не связанные между собой таблицы. А так надо предпринимать какие-то меры, иначе могут быть проблемы - от Денисnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-49415564079753127382013-12-28T11:57:25.422+06:002013-12-28T11:57:25.422+06:00> Как надёжно подключить эту новую базу к работ...> Как надёжно подключить эту новую базу к работе<br /><br />БД создается под пользователя с нужной ему аналитикой. Процесс вставки данных для начальной работы и поток сообщений через очередь никак не могут друг другу помешать, т.к. пишут данные они в одни и те же таблицы. Новая БД создается и заполняется примерно 5-10 минут. Сообщения, которые сформируются за это время могут ее только Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-66767359317654045762013-12-28T11:29:04.947+06:002013-12-28T11:29:04.947+06:00Продукт на рынке B2B. Его заказчиком может стать т...Продукт на рынке B2B. Его заказчиком может стать только большая корпорация или гос. структура. Ориентировочная база клиентов 300-400 компаний/учреждений. Исходя из этого и делалось такое решение.<br /><br /><br />Обновление происходит через FluentMigrator, который дописали для работы с несколькими одинаковыми БД. Все БД названы по конвенции, зная UserId, который лежит в основной БД, можно легко Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-78527110419866547832013-12-28T04:00:38.161+06:002013-12-28T04:00:38.161+06:00Александр, расскажи, пожалуйста, чуть подробнее пр...Александр, расскажи, пожалуйста, чуть подробнее про создание новой пользовательской БД.<br /><br />Как надёжно подключить эту новую базу к работе, чтобы сообщения для неё:<br />а) не потерялись<br />б) не обрабатывались повторно<br /><br />По всей видимости, первоначальная заливка выполняется долго.<br />Можно (наверное) использовать Snaphot изоляцию для чтения данных из основной БД проекта, но Денисnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-25598012195074165602013-12-28T00:58:10.137+06:002013-12-28T00:58:10.137+06:00Спасибо, просто интересно - насколько накладно буд...Спасибо, просто интересно - насколько накладно будут отдельные базы при тысячах или десяти тысячах пользователей. И как происходит обновление схемы данных на всех базах?Юрийnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-83743861615122675552013-12-28T00:41:33.892+06:002013-12-28T00:41:33.892+06:00Это БД, которая состоит из нескольких денормализов...Это БД, которая состоит из нескольких денормализованных таблиц. Эти таблицы созданы с одной целью, самая быстрая выборка данных с помощью SQL-запросов.<br /><br /><br />Пользователи появляются не часто, сервис не публичный, для доступа к нему нужно изначально заплатить. Это делают только те, кто знают продукт и компанию. Называть его не могу по NDA.<br /><br /><br />Для БД пользователя есть Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-12139621787147068032013-12-28T00:26:06.397+06:002013-12-28T00:26:06.397+06:00Можно подробнее про отдельную БД для каждого польз...Можно подробнее про отдельную БД для каждого пользователя? Новая бд создается автоматически или вручную? Сервис публичный или закрытый? Юрийnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-83344588257823754262013-12-27T23:59:05.573+06:002013-12-27T23:59:05.573+06:00Политика заказчика состояла в покупке одного-двух ...Политика заказчика состояла в покупке одного-двух мощных серверов и размещении их в дата-центрах. Поэтому мы ориентировались не на распределенную облачную инфраструктуру, а на конкретные ограничнные ресурсы. 1-е, 2-е и 3-е решения были запущены на идентичных серверах.<br />Увеличение производительность произошло только за счет изменения архитектуры, без какого-либо наращивания можности железа.Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-4455082829841380582013-12-27T23:00:49.136+06:002013-12-27T23:00:49.136+06:006. Она не лучше, она просто другая. Мы ничего не п...6. Она не лучше, она просто другая. Мы ничего не предрасчитывали, а считали всё налету. С момента, когда данные изменились, до момента, когда пользователь им может пользоваться, могло пройти всего 5-10 секунд при нормальной загрузке.<br />На схеме еще нет сторонних сервисов, включающих полнотектстовый поиск, я не хочу сейчас вдавать в подробности, но результаты поиска по сути нельзя было Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-51677805163424434902013-12-27T22:58:49.519+06:002013-12-27T22:58:49.519+06:00Очень хорошие вопросы :) То, что я упустил в расск...Очень хорошие вопросы :) То, что я упустил в расскаже сейчас всплывет здесь.<br />1. Предрасчет был фактически OLAP-кубом. В последних версиях не было никаких предрасчетов, мы научились писать запросы и стоить индексы так, чтобы все запросы укладывались в 1-5 секунд. Поэтому при постоянном потоке новых данных пользователь видел самую актуальную картику в аналитике. Денормализация в Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-47090954851278755702013-12-27T22:57:05.277+06:002013-12-27T22:57:05.277+06:006. Я все же не понимаю как была решена проблема пе...6. Я все же не понимаю как была решена проблема перестроения куба. Вы по идее программным путем делаете то же самое, т.е. я хочу сказать, что в общем смысле массив данных как-то нужно "ворочить" в обоих случаях. Так чем же ваша реализация лучше?Oleg Karpovnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-26808574063943093102013-12-27T22:49:37.531+06:002013-12-27T22:49:37.531+06:00Да, я понял :)
У меня осталась еще пара вопросов
1...Да, я понял :)<br />У меня осталась еще пара вопросов<br />1. Если предрасчет и денормализация разные процессы, то на поздних версиях проекта куда делся предрасчет, т.е. собственная реализация кубов?<br />2. Почему БД пользователя несколько и почему несколько сервисов денормализации?Oleg Karpovnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-16563392913216478652013-12-27T22:35:11.037+06:002013-12-27T22:35:11.037+06:00Со сторонней БД работает еще множество других прое...Со сторонней БД работает еще множество других проектов и там много чего "исторически сложилось". Отчасти в этом проекте была борьба с legacy инфраструктурой и подгонка необходимой архитектуры для реализации нашего проекта.Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-78019218036941257542013-12-27T22:33:01.950+06:002013-12-27T22:33:01.950+06:00прочитал про Версию 2.0. 1-ый вопрос снимается. :)...прочитал про Версию 2.0. 1-ый вопрос снимается. :)Oleg Karpovnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-39862991799174579662013-12-27T22:30:43.395+06:002013-12-27T22:30:43.395+06:001. Это часть необходимых для проекта данных
2. Точ...1. Это часть необходимых для проекта данных<br />2. Точно не скажу, не мы настривали<br />3. Ясно, я так и подумал, решил уточнить. Справоников почти нет.<br />6. Точнее скажу, что невозможно выделить необходимые изменения для куба, чтобы могла насчитаться аналитика. Плюс перестроение куба при изменении данных занимает время, которое не соизмеримо с требованиями.<br />7. Да<br /><br /><br />Надо Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-3525669133946063062013-12-27T22:24:07.351+06:002013-12-27T22:24:07.351+06:001. раз схема одинакова, то БД ~600Гб - это мини-ко...1. раз схема одинакова, то БД ~600Гб - это мини-копия сторонней БД? А зачем она нужна?<br />2. тип merge или transaction?<br />3. нормативно-справочная информация. термин из КИС, ERP. По-сути, справочники, контрагенты. <br />6. Не понял в чем ограничение OLAP-кубов? Если фильтры не детерминированы и строятся на основе запросов пользователей, то есть AMO http://msdn.microsoft.com/en-us/library/Oleg Karpovnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-89638124246298123652013-12-27T21:26:57.283+06:002013-12-27T21:26:57.283+06:00Спасибо за вопросы, система действительно большая ...Спасибо за вопросы, система действительно большая и я уверен, что уточнения нужны:<br />1. MSSQL с идентичной схемой<br />2. Типичный механимз. Замены репликации не было, вы можете об этом прочитать и увидеть на схемах с первой по третью версию<br />3. <br />5. Нет, связь односторонняя<br />6. Дело в том, что не все фильтры детерменированы (например, может быть введен произвольный текст, в в Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-66368925845409574682013-12-27T21:15:36.118+06:002013-12-27T21:15:36.118+06:00Александр, привет!
Я пока напишу вопросы по 1-ой ...Александр, привет!<br /><br />Я пока напишу вопросы по 1-ой версии, т.к. трудно понять ее особенности, чтобы осознать плюсы перехода к след. версиям вашего проекта:<br />1. Какая БД используется в сторонней системе и в проекте?<br />2. Тип репликации между БД сторонней системы и БД проекта? Стандартный механизм или если свое, то в чем преимущества, какую проблему решил "свой" механизм?<Oleg Karpovnoreply@blogger.comtag:blogger.com,1999:blog-458002489272917533.post-27114927772133330562013-12-27T20:57:40.659+06:002013-12-27T20:57:40.659+06:00Сторонная БД была MSSQL и репликация самая обычная...Сторонная БД была MSSQL и репликация самая обычная.Alexander Byndyuhttp://www.byndyu.ru/noreply@blogger.com