Constantin
устройства чего?
Общения праймари и секондари, и какие RPC между ними ходят
yopp
https://github.com/mongodb/mongo/wiki/Replication-Internals
yopp
нет никакого rpc
yopp
есть дубовый wire protocol
yopp
и не очень дубовый мезанизм консенсуса топологии
yopp
вам это зачем вообще?
yopp
в 99.9% случаев это не стоит читать вообще :)
yopp
монга по сути делает mongorestore из соседней ноды, это всё что стоит об этом знать
yopp
предложите закачику экономить время и деньги
Constantin
вам это зачем вообще?
Мне нужно сделать репликацию журнала в одном проекте, без внешних зависимостей
Constantin
репликацию оплога?
Не, внутренней структуры данных. Я почти сделал Raft, но мне не хотелось бы хранить весь журнал, чтобы при подключении нод его на них реплицировать. Мне стало интересно, как это сделано в MongoDB, но в документации не нашел. Не додумался на Github зайти Да и в целом интересно, как оно там все внутри работает. Благодаря вам, узнал немного нового.
pinelover
Подскажите плс по проду для небольшого проекта со средней нагрузкой, нормальная ли практика использовать один инстанс монги с разными БД, или сделать отдельные инстансы на критически важные данные? Архитектура микросервисная, возможности делать технически сложный деплой нет.
pinelover
это я понял, но не понял что имеется в виду под БД - инстанс монги, или БД?
Alexander
Здравствуйте. Использую Mongoose. Мне нужно найти все документы с определенным кошельком компании, и изменить его. Я сейчас попробовал вот такую функцию. await this.updateMany({ company_wallet: wallet_to_change }, { company_wallet: company_wallet.toLowerCase(), $push: { company_wallets: company_wallet.toLowerCase() } }, { new: true }) Но кажется updateMany не подходит, он не изменил документы. Какой метод мне следует использовать для массового обновления документов?
pinelover
сейчас так и есть - на каждый сервис идет отдельный монго контейнер, но не ту мач ли это?
Constantin
рафт это же механизм консенсуса, а не репликации
Консенсус предполагает реплкацию журнала действий внутри автомата. То есть по сути есть состояние, мы реплицируем действия на Folower'ов, они меняют состояние внутри себя также, как и Leader
pinelover
Можно сделать один инстанс (или репликасет) на все.
спасибо, развеяли мои сомнения) читал про репликасет - ужасно сложно на первый взгляд
Constantin
спасибо, развеяли мои сомнения) читал про репликасет - ужасно сложно на первый взгляд
Разложить приложение по куче контейнеров сложнее. Монга может даже не жить в контейнерах
Constantin
рафт это же механизм консенсуса, а не репликации
Там несколько частей: Leader Election, Log replication, и safety
yopp
потому что делать свою репликацию, это путь вникуда. оно конечно прикольно, но сделать это надёжным это сотни человеколет
yopp
а нафига нужна репликация, которая ненадёжная
yopp
либо любую другую подходящую базу или зукипера или что-то ещё, что работает
Constantin
либо любую другую подходящую базу или зукипера или что-то ещё, что работает
Это мини-сервис, где лишнюю зависимость не хочется тянуть. Raft как раз решает много проблем с репликацией, мне хочется уложиться в килобайты, а не мегабайты.
Nick
сейчас так и есть - на каждый сервис идет отдельный монго контейнер, но не ту мач ли это?
задайте себе вопрос - возможна ли такая ситуация, что конкретно одна база, среди 10 на инстансе требует обновления БД, а остальыне не допускают даунтайма. Если такое может произойти - вам на каждуй микросервис - свой инстанс монги
yopp
синхронизация состояний в распределенных системах это одна из самых сложных технических задач
yopp
на уровне токомавка
pinelover
задайте себе вопрос - возможна ли такая ситуация, что конкретно одна база, среди 10 на инстансе требует обновления БД, а остальыне не допускают даунтайма. Если такое может произойти - вам на каждуй микросервис - свой инстанс монги
да, такое возможно. а как лучше деплоить такое количество инстансов тогда, какой best practice? если еще и реплику на особоважные делать - это же крышеснос будет
Constantin
синхронизация состояний в распределенных системах это одна из самых сложных технических задач
Тем интереснее попрактиковаться в ее решении. Это же спортивный интерес скорее.
pinelover
если это дял вас сложно - то тогда пилите монолит
для монолита уже поздно, все готово)
yopp
Тем интереснее попрактиковаться в ее решении. Это же спортивный интерес скорее.
если это какое-то продуктивное решение, этого не стоит делать. примерно как свою криптографию
Nick
для монолита уже поздно, все готово)
вообще деплой и все остальное это нужно у народа спрашивать, тут я особо не помогу
Constantin
если это какое-то продуктивное решение, этого не стоит делать. примерно как свою криптографию
Да так-то да. Можно взять Consul, у него реализованный Raft с репликацией журнала из коробки
pinelover
вообще деплой и все остальное это нужно у народа спрашивать, тут я особо не помогу
в любом случае спасибо! буду искать решение для множества инстансов
Constantin
вот как раз тоже консул собираюсь использовать
Это я не вам писал, но похвально =)
Constantin
в любом случае спасибо! буду искать решение для множества инстансов
Попробуйте на «бумаге» схематично изобразить. Выберите сервисы для которых может быть одна монга, выберете те, для которых нужна разная. Когда разобьете на категории, станет проще. Можно UML Deploy диаграммой изобразить, я обычно с этого начинаю в таких «затупах»
Constantin
Спасибо, попробую!
Можете в чат к девопсерам сходить @ru_devops и @devops_ru, это скорее задача из их области
pinelover
Можете в чат к девопсерам сходить @ru_devops и @devops_ru, это скорее задача из их области
Спасибо, да, вопросов по проду очень много конечно. Жалко в сети немного готовых решений на основе которых можно было бы учиться. В основном всё подразумевает доработку.
Constantin
Спасибо, да, вопросов по проду очень много конечно. Жалко в сети немного готовых решений на основе которых можно было бы учиться. В основном всё подразумевает доработку.
Никогда не будет готовых универсальных решений, если только речь не о блоге на Wordpress. Никто не знает внутренностей вашего проекта лучше вас. Нужно больше уверенности и смелости. Если проект еще небольшой, пользователей не очень много и не понятно выстрелит или нет, цена ошибки в проде маленькая.
Oleg
db.getCollection('payments').aggregate([ { "$match": {status: 'paid'} }, { "$group": { "_id": null, "total": {"$sum": ["$amount", "$credentials.WMI_COMMISSION_AMOUNT"]} } } ]) Как вывести общую сумму оплат с вычетом комиссии, которая находится в credentials.WMI_COMMISSION_AMOUNT? При таком запросе ошибка: Error: Assert: command failed: { "ok" : 0, "errmsg" : "aggregating group operators are unary ($sum)", "code" : 15953 } : aggregate failed
Oleg
Andrey
Добрый день! подскажите плз, хочу использовать реплика сет впервые, но не могу определиться с выбором дистрибутива linux
Andrey
какой лучше всео подойдет?
Maksim
Andrey
хороший ответ
Maksim
Дебиан убунту центось
Maksim
Разницы нету
Andrey
Maksim
Убунту проще всего лтс
Andrey
ну я думаю 18,04 ставить
Maksim
Хороший выбор
Andrey
Хороший выбор
спасибо за совет!
Anonymous
парни, можно про МОнгуз вопрос?
Andrey
парни, можно про МОнгуз вопрос?
я думаю в этой группе это не возбраняется. зачем вообще из одного вопроса делать два?
Заур
А как одним запросом обновить несколько документов и вернуть эти обновленные документы?
Aga
Ребята, какого хрена find depreciated?
Aga
Как можно find depriciate сделать
Заур
updateMany()?
Он же только количество вощвращает
Заур
Обновленных
Vova
Ребята, какого хрена find depreciated?
findOne findMany по ходу😂
Aga
Странно, оч
Oleg
Ребята, какого хрена find depreciated?
mongoose.connect(Config.mongodb, { useNewUrlParser: true, useCreateIndex: true, useFindAndModify: false })
Andrey
Есть тут кто tokumx юзает в репликах?