Чем больше вы знаете, тем больше вы не знаете
Ставьте лайк и смотрите снова, формируйте привычку
GitHubоткрытый источникgithub.com/JavaFamilyЕсть карты мозга, личная контактная информация и группы по обмену талантами для интервью с ведущими производителями.Добро пожаловать в Star and Perfect
рыба
В предыдущем выпуске краткое введениеочередь сообщенийБазовые знания MQ, включающие в себя сценарии применения очередей сообщений и проблемы, которые могут возникнуть после использования, но я не ответил, как решать эти проблемы в прошлом выпуске, т.к. мне нужно контролировать пространство (очевидно, я думаю, что MQ не могу написать много выпусков, мне нужно больше выпусков) Вышел первый выпуск!Отморозок)
Кхм, давайте к делу, друзья, кто не видел, посмотрите, это поможет чтению этого номера:
Серия "Повесить интервьюера" - Основы очереди сообщений
Интервью начинается
Пришел к вам красивый мужчина средних лет в клетчатой рубашке с поцарапанным макинтошем, посмотрел на свою светлую голову и подумал, что он, должно быть, топ-архитектор Нимы! Но мы видели серию теплого человека Ао Бина, и он полон поэзии и литературы, но он не пуст.
Верно, это все еще я, в прошлый раз, когда вы остановились на середине предложения, на этот раз я должен задать вам вопрос.
Хороший интервьюер, потому что в прошлый раз я торопился, серия Ао Бин была обновлена, поэтому я поспешил домой, чтобы посмотреть ее!
Я вам верю, давайте начнем.В прошлый раз я говорил о повторном потреблении сообщений в очереди сообщений.Можете ли вы рассказать мне, что из себя представляет сцена?
ИнформацияПовторное потреблениеЭто проблема, которую необходимо учитывать после использования очереди сообщений, и это также серьезная и распространенная проблема.Шуай БингВ процессе разработки всякий раз, когда используется очередь сообщений, первое, что я рассматриваю, этоПовторное потреблениеПроблема.
Например, есть такой сценарий: после того, как пользователь успешно сделал заказ, мне нужно перейти на страницу события, чтобы добавить его ему.GMV(Общий объем продаж) и, наконец, наградить его в соответствии с его GMV.Это очень распространенный способ деятельности в области электронной коммерции.
Подобно градиенту кумулятивной суммы заказа, какой градиент дает вам вознаграждение за какой градиент.
Я могу рассказать вам только о страницах событий, подобных этой.10000%используетсяасинхронныйПерейдите, чтобы добавить его (не спрашивайте меня, почему, потому что бэкенд этого действия выполняется Ao Bing), в противном случае, если вы хотите добавить его пользователю при размещении заказа, это означает, что вам нужно добавить его к этому столу.Оперируйте его, сколько раз вы думаете о работе этого стола на Double Eleven? Эта база данных или кеш не выдерживает.
И у всех должен быть одинаковый опыт.Вы переходите на страницы некоторых событий сразу после оформления заказа.Иногда он доступен сразу,а иногда задерживается на долгое время.Почему? эта скоростьЗависит от скорости потребления очереди сообщений, я увижу это позже, когда потребление будет медленным.
вы размещаете заказоплата прошла успешноПросто отправьте сообщение, и разработчик нашего события выше будетмонитортвойСообщение об успешной оплате, я услышал новость о том, что ваш заказ успешно оплачен, тогда я добавлю ее вам в свой список активности GMV, все могут услышать это здесьчувствовать себя логичным.
ноЯ говорю вам об использовании общих очередей сообщений, у всех нас естьмеханизм повторной попыткиДа, это означает, что мой нисходящий бизнес ненормальный, я сделаю исключение и попрошу васрепост.
Здесь есть ошибка в моей деятельности, и абсолютно нормально, если вы запросите повторную отправку. но всеподумай об этомВ чем проблема?
Да, ты не один слушаешь эту новость,Есть другие службы прослушивания,тоже будут провалы.При провале он тоже просит повторную отправку,но у вас тут собственно успех.Если переслать,то не добавляете ли вы дважды свои деньги?
правильно? ? ? Это правда? ? ?
Все еще не понимаете? смотреть вниз↓
Как и выше, нашОшибка обработки системы балловТеперь его система должна требовать от васОтправитьКак только эта новость верна, система баллов успешно получена и обработана, но действия других людей, купоны и другие услугитоже прослушал это сообщениеАга, неужели система событий дважды добавляет ему GMV и дважды списывает купон?
В реальной ситуации повторная попытка является нормальным явлением, и службасетевой джиттер,Ошибки кода разработчика,а такжепроблема с даннымиМожно обрабатывать сбои и запрашивать повторные передачи.
Ну, парень очень тщательно проанализировал это, так как вы гарантировали это в процессе разработки?
Обычно мы называем этот вид обработки интерфейсом.идемпотент.
Идемпотент (идемпотент, идемпотентность)это понятие математики и информатики, обычно используемое в абстрактной алгебре.
Характерной чертой идемпотентной операции в программировании является то, что любое ее многократное выполнение имеет тот же эффект, что и однократное выполнение.
Идемпотентная функция или идемпотентный метод — это функция, которая может многократно выполняться с одними и теми же параметрами и достигать одного и того же результата. Эти функции не влияют на состояние системы, и не нужно беспокоиться, что повторное выполнение вызовет изменения в системе.
Например, функция setTrue() является идемпотентной функцией, т.е.Независимо от того, сколько раз он выполняется, результат один и тот же.Идемпотентность более сложных операций гарантирована при использовании уникальных номеров транзакций (серийных номеров).
Популярно высказывание, что это ты.Я вызываю этот интерфейс с одними и теми же параметрами, и независимо от того, сколько раз я его вызываю, результат один и тот же., если вы добавляете GMV к одному и тому же номеру заказа, сколько вам стоит добавить его один раз и сколько стоит N раз добавления.
но еслине идемпотент, если вы звоните несколько раз для заказа, деньги будут добавлены несколько раз.Точно так же, если вы возвращаете несколько звонков, деньги будут уменьшены в несколько раз.
Общий алгоритм обработки выглядит следующим образом:
Как это гарантировать?
в целомШуай БингВот мой ответ:
Привет красавчик интервьюер, генералидемпотент,Я могуРассмотрим сценарии,выглядит какСильный чеквсе ещеСлабая контрольная сумма, Например, сценарии, связанные с деньгами, очень важны, поэтому выполняйте строгую проверку и не выполняйте слабую проверку в менее важных сценариях.
Сильная проверка:
Например, если вы отслеживаете сообщение о том, что пользователь успешно оплатил, и отслеживаете, хотите ли вы вызвать интерфейс добавления денег для добавления GMV, то вызовите другой интерфейс для добавления воды из трубопровода ниже интерфейса добавления денег.Два в одной сделке, успех и неудача вместе.
Каждый раз, когда приходит сообщение, я должен принять егоУникальный идентификатор, такой как номер заказа + бизнес-сценарий(Например, событие Tmall Double Eleven) Подойдите к счетчику проточной воды, чтобы увидеть, есть ли такая проточная вода. Если есть, просто вернитесь напрямую и не выполняйте следующий процесс. Если нет, выполните следующую логику.
зачем использоватьводомер, потому что это связано с такими действиями, как деньги, если у вас есть какие-либо проблемы, вы можете пойти к счетчику воды позжепримирение, чтобы помочь разработчикам найти проблему.
Некоторые друзья все еще могут быть немного сбиты с толку, и тогдаГруппа обмена талантамиМой друг также сказал, что некоторые примеры можно поместить в немного псевдокода, поэтому я также напишу часть кода, который можно использовать в этом выпуске.
Tip:GItHub github.com/JavaFamilyЕсть способы входа в группу и личные контактные данные.Честно говоря, в этой группе, даже если вы не говорите, вы можете узнать что-то, просто просмотрев записи чата (Meituan Wang Zhuang, Sanwei (Java3y) и Xixi и другие воротилы присутствуют).
Слабая проверка:
Это просто: для некоторых неважных сценариев, например, кому отправлять текстовые сообщения, я буду использовать этот идентификатор + уникальный идентификатор сценария в качествеRedisключ, поместите его в кеш, и время истечения срока действия зависит от вашего сценария.в течение определенного времениНовости отправятся на суд Redis.
Использование KV, даже если сообщение потеряно, может не иметь значения в таком сценарии, в любом случае сообщение потерянобезобидный(Вы смеете говорить, что у вас нет кода подтверждения и текстовое сообщение потеряно?).
Есть также слабая проверка многих компанийtokenАх, или что-то, трюков в любом случае много, ноВажные сценарии должны быть тщательно проверены, на диске нет постоянных данных, когда вы на самом деле проверяете проблему, и ваше сердце все еще пусто, точно так же, как состояние вашего сердца, когда вы и ваша девушка разлучены. (Откуда мне знать это чувство, когда я один? Угадай)
Вы когда-нибудь сталкивались с такими сценариями, как последовательное потребление сообщений? Как вы это гарантировали?
нет! над!
Хорошо, ты не можешь сказать нет, у тебя действительно этого нет, ты видел этоАо ШуайбинСтатьи должны сказать да!
Tip: Но если честнопоследовательное потреблениеТут сложно представить.С прошлой недели по эту спрашивал у многих братьев вокруг себя.Таких сценариев в процессе разработки не много.С Санваем тоже несколько раз обсуждал.Больше всего в инете про синхронизацию бинлога , кажется, что есть еще Сцена ушла.
в целомСообщения о разных операциях в одном и том же бизнес-сценарии проходят одновременно, сам заказ правильный, но когда вы отправляете его одновременно, он искажается, когда вы его потребляете, поэтому возникает проблема.
Я делал такой пример в деятельности электронной коммерции раньше.Все мы знаем, что давление синхронизации данных все еще очень велико, когда объем данных велик.Иногда таблицы с большими объемами данных должны синхронизировать сотни миллионов данных. (Это не синхронизация ведущий-ведомый. Если задержка ведущий-ведомый велика, возникнут проблемы. Она может быть синхронизирована из базы данных или главной базы данных вСтоять рядом с)
В этом случае мы все идем в очередь, а потом потребляем медленно, и тогда возникает проблема: мы добавляем, изменяем и удаляем данные идентификатора в базе данных одновременно, но ваше сообщение отправляется в прошлое. При потреблении это становится изменением, удалением и добавлением, поэтому данные неверны.
Изначально часть данных должна быть удалена, но она все равно у вас есть, это небольшая проблема!
Два результата совершенно разные?↑
Итак, как решить эту проблему?
Кратко скажу, что мы используемRocketMQПростая реализация в нем.
Tip: зачем использоватьRocketMQНапример, эта штука в открытом доступе у Alibaba.Я спрашивал своих друзей, что многие компании используют ее, поэтому, если у читателя есть большая вероятность этого, я буду использовать этот пример.Конкретные подробности я опубликую позже.RocketMQа такжеKafkaсоответствующие главы.
Если производителям и потребителям обычно необходимо обеспечить последовательные сообщения, это может быть в бизнес-сценарии, таком как создание заказа, оплата, доставка и получение.
Это номер заказа? Заказ должен быть номером заказа, это просто.
Под темой несколько очередей, чтобы обеспечить упорядоченную доставку,RocketMQпри условииMessageQueueSelectorМеханизм выбора очереди, у него есть три реализации:
мы можем использоватьМетод хеширования по модулю, пусть тот же заказ будет отправлен в ту же очередь, а затем использовать синхронную отправку, успешно отправляется только сообщение о создании того же заказа, а затем отправляется сообщение об оплате. Таким образом, мы гарантируем упорядоченную доставку.
RocketMQМеханизм очереди в теме может гарантировать, что хранилище соответствуетFIFO(First Input First Output просто относится к принципу «первым поступил — первым вышел»), а остальным нужно, чтобы потребители потребляли только последовательно.
RocketMQГарантируется только заказная доставка, а заказное потребление гарантируется потребительским бизнесом!!!
Здесь легко понять.Отправляя заказ, вы ставите его в очередь.Если вы хэшируете тот же номер заказа, будет ли он иметь тот же результат?Он должен быть потреблен потребителем.Гарантирован ли заказ?
Реальное последовательное потребление разного мидлвара имеет свою различную реализацию, я приведу здесь пример, и все его поймут.
Tip: Когда я писал это, некоторые люди в группе талантов также спрашивали меня, если очередь выходит упорядоченно, а потребитель плохо потребляет, я хочу сказать, чтоПотребители являются многопоточнымиДа, ваши сообщения передаются ему упорядоченно, можете ли вы гарантировать, что он будет обрабатывать их упорядоченно? Тем не менее успешное потребление, а затем отправить следующийбезопасно.
Вы можете поговорить со мной о распределенных транзакциях?
Распределенная транзакцияЭто почти необходимо в современных распределенных системах развертывания повсюду.
Давайте поговорим о том, что естьдела?
Распределенная транзакция,Уровень изоляции транзакции,ACIDЯ считаю, что все знакомы с этими вещами, так что же такое бизнес?
концепция:
Обычно относится к чему-то, что нужно сделать или сделать.
С компьютерной точки зрения, блок выполнения программы, который обращается к различным элементам данных в базе данных и, возможно, обновляет их.
Транзакции обычно вызываются выполнением пользовательских программ, написанных на языках манипулирования базами данных высокого уровня или языках программирования (таких как SQL, C++ или Java), и используются в видеbegin transactionа такжеend transactionоператор (или вызов функции), чтобы разграничить его.
Транзакция запускается транзакцией (begin transaction) и конец транзакции (end transaction) состоит из всех операций, выполняемых между ними.
характеристика:
Транзакция является базовой единицей восстановления и управления параллелизмом.
Транзакция должна иметь 4 свойства:Атомарность, согласованность, изоляция, долговечность. Эти четыре свойства часто называютКИСЛОТНЫЕ свойства.
атомарность: транзакция — это неотделимая единица работы, и операции, включенные в транзакцию, либо выполняются, либо не выполняются.
последовательность: транзакция должна перевести базу данных из одного согласованного состояния в другое. Непротиворечивость и атомарность тесно связаны.
изоляция: выполнение транзакции не может быть нарушено другими транзакциями. То есть операции внутри транзакции и используемые данные изолированы от других параллельных транзакций, и одновременно выполняемые транзакции не могут мешать друг другу.
Долговечность:Постоянство также называют постоянством, что означает, что после фиксации транзакции ее изменения в данных в базе данных должны быть постоянными. Другие операции или сбои, которые следуют, не должны иметь никакого влияния на это.
Некоторые ученики до сих пор этого не понимают. Ао Бин, я резюмировал это следующим образом:Транзакция — это последовательность операций, которые либо завершаются успешно, либо терпят неудачу в одно и то же время.затем из сделкиACIDхарактеристика(Атомарность, Последовательность, Изоляция, Долговечность) Расширить повествование.
Транзакция должна гарантировать, что ряд операций может быть выполнен нормально, она должна удовлетворять обоим требованиям.ACIDхарактеристика.
Так что же такое распределенная транзакция?
Вы можете подумать об этом, ваш процесс заказа может включать более 10 ссылок.Вы успешно разместили заказ и оплатили его, но вы не смогли вычесть купоны и не добавили баллы.Первая компания будет разгромлена,вторая Пользователи будут недовольны, ноЭто все в разных сервисах, как мы можем гарантировать, что все будут успешными??
Умный,Распределенная транзакция, глядишь, поспешишь с ответом!
Tip: Реальный сценарий приложения может быть в несколько раз сложнее представленного мной сценария, я просто привел очень простой пример, чтобы всем было понятно.
Распределенные транзакции, с которыми я связался и о которых узнал, можно условно разделить на:
- 2шт (двухэтапная подача)
- 3шт (трехступенчатая подача)
- TCC (попробовать, подтвердить, отменить)
- уведомление о лучших усилиях
- XA
- Локальная таблица сообщений (разработана ebay)
- Полусообщение/в конечном счете согласованное (RocketMQ)
Здесь я представлю самый простой2шт (двухэтапный), и те, которые вы можете использовать чаще в будущемтранзакция полусообщениято естьокончательная согласованность, цель состоит в том, чтобы позволить всем понять внутреннюю часть распределенных транзакций.Роль промежуточного программного обеспечения сообщений, остальные дела аналогичны, плюсов много.
Конечно естьРазличные недостатки:
НапримерБлокировка ресурсов базы данных на длительное время, заставляя системуне отвечает,Параллелизм не может подняться.
происходит дрожание сетирасколотый мозгситуация, в результате которой участники сделки не могут хорошо выполнять указания координатора, в результате чегонесогласованность данных.
единая точка отказа: Например, если координатор вещей выходит из строя в определенный момент, хотя новый лидер может быть сформирован через механизм выборов, в этом процессе неизбежно возникнут проблемы, и TCC, только сильная техническая команда может поддержать разработку,стоимость слишком высока.
Не так много BB, давайте начнем знакомить вас с этими двумя вещами.
2шт (двухэтапная подача) :
2шт (двухэтапная подача)Можно сказать, что это первое появление распределенных транзакций, очень похожих насваха, то есть координировать несколько систем с помощью промежуточного программного обеспечения сообщений, блокировать ресурсы, но не фиксировать транзакцию, когда две системы обрабатывают транзакцию, ждать, пока обе они будут готовы, сообщать об этом промежуточному программному обеспечению сообщений, а затем отправлять транзакцию отдельно.
Но я не знаю, видите ли вы проблему?
Да, вы, возможно, обнаружили, что если транзакция системы A успешно отправлена, но сеть колеблется во время отправки системы B или отправка не выполняется по разным причинам, она все равно не будет выполнена.
окончательная согласованность:
На протяжении всего процесса мы можем гарантировать, что:
Если локальная отправка транзакции активной деловой стороной не удалась, пассивная деловая сторона не получит доставку сообщения.
Пока локальная транзакция бизнес-активной стороны успешно выполняется, служба сообщений доставляет сообщение нижестоящей бизнес-пассивной стороне и, наконец, гарантирует, что бизнес-пассивная сторона может успешно использовать сообщение (успешное или неудачное потребление, т. е. , должно быть конечное состояние).
Но технология такая.Мы должны учитывать все виды экстремальных ситуаций, трудно найти идеальное решение, поэтому решений так многотрехступенчатый,TCC,уведомление о лучших усилияхВ ожидании схемы распределенных транзакций всем нужно только знать, зачем это делать, каковы преимущества и недостатки этого, просто обратите на это внимание в реальной разработке,Система спроектирована по бизнес-сценарию, технология без бизнеса бессмысленна, а бизнес без технологии не вызывает доверия.
Опять таки:Не существует идеальной системы, есть только наиболее подходящая система.
Интервью окончено
Парень не видит, есть еще что-то, на эти пункты отвечают хорошо, можешь завтра поговорить со мной о RocketMQ?
Ао Бин потратил так много времени на эту главу, что я не уверен, сможет ли он ее закончить, и мне его жаль. Я хочу дать ему этоподобнокакие,откат сообщенияДавайте также представим его, когда мы будем отдельно представлять промежуточное программное обеспечение для сообщений.Эта глава немного длинная.
Суммировать
Я на самом деле написал эту главу в то времяДольше, чем предыдущий всплеск,так какПоследовательное сообщение этой сценыЯ не знаю, как объяснить это легко, чтобы все поняли.Наконец, я сослался на Интернет.Реальные сценарии применения последовательных сообщений не так обширны, как другие.Пообщавшись с 3y несколько раз, я, наконец, остановился на этом бинлоге сценарий.
ВкратцеТворческий источник этого выпуска немного суховат, Эту главу действительно сложно писать, в том числе и то, что распределенные транзакции тоже очень сложны в реальном процессе разработки. Когда это нужно, проектирование занимает много времени. В любом случае, моя блок-схема выглядит как лошадь.
я всегда хочу писатьЛегко понятьОдин момент, даже если это так, я не думаю, что эту статью легко понять, но сцена новостей такая, и если вы добавите меня, не спрашивайте меня много деталей, как только ты подходишь,Подумайте больше сами, я думаю, это может помочь намного лучше, чем я скажу вам ответ?
болтовня
На этой неделеесть картыйо, наCSDNСписок Force Project, а бонус достигает 50 юаней! ! !
У меня не так много денег, но я очень счастлив. Когда я разговаривал с мамой, она тоже чувствовала, что я очень успешен. Это был ее день рождения. Раньше мы были такой семьей, которая не дни рождения. Но да, я работаю в этом году, иесть картыБонус, который я получил, очень важен, я втайне сказал своей двоюродной сестре, чтобы та тихонько покупала ей торты и подарки🎁, хи-хи, счастлива. 🎂
DISS
ЭтоПользователь сети в саду блогаКомментарий под моей статьей, честно не знаюКак вы думаетеДа, я просто хочу сказать: хе-хе! тупой*
Я не знаю, что такое годы опыта, я не собирался говорить об этом, потому что я обнаружил, что многие из моей группы еще не закончили учебу.СтудентыилиВыпускники, предполагая, что у моих читателей гораздо больше таких учеников, все онинет социального опытаБоюсь, что такие люди вводят их в заблуждение.
Помню, я сказал в группе:
Я могу сказать вам с 80% уверенностью, что его мнение — чушь собачья, а остальные 20% — это я.согласен с его скромностью,ноРазве смирение не должно быть нашим основным отношением к вещам?
нопритворяться глупымэтот вид? что ещенет никого сильнее тебяэтот вид? Я считаю, что есть также интервьюеры, которые также читают мои статьи для технических специалистов.Когда вы проводите собеседование, я хочу встретить влиятельных людей, которые стремятся нанять их и взимать плату за себя.
а такжеобычное интервьюНа тот момент у вас был 1-3 года стажа.В основном вас брали на собеседования более 3-х лет,а потом выдвигали по очереди.Конечно,есть и много очень сильных лидеров(лидер моего бывшего хозяина был в 95 лет, а определённая продуктовая линейка ByteDance очень хороша.Сильные Лидер96'ы и т.д.) Когда все работают, найдётся что-тонет времени накапливатьВы не можете научиться этому, все, что вам нужно сделать, это делать это шаг за шагом.
Эти люди, молодые или нет, могут сидеть там и брать у вас интервью.для него должна быть причина, то какой у тебя талант, тыпостарайся,у него нет такой метрики,чтобы приспособиться к вашему мастерству.В такую компанию идти не стоит,но таких технарей действительно мало.Программисты-это группа людей,которые восхищаются своими способностями.
такНа собеседовании хвастаешься всем, что у тебя есть, хвастаешься своими талантами на полную катушку, ветер есть, ты просто летишь.
Благодарность
Когда дело доходит до распределенных транзакций, я ссылаюсь на своего бывшего коллегу:ЛюбаньТехнический обмен (имя цветка), я очень благодарен за идеи, данные его статьей, а также анализ проблемы!
Каждый раз, когда я пишу, я спрошу всех в группе.В следующий раз каждый в моей группе по обмену может высказать мне больше мнений, спасибо.
Как видите, это очень демократично. (Ао Бин, подонок, ба, не пиши, если не умеешь!)
Tip:GItHub github.com/JavaFamilyЕсть способы входа в группу и личные контактные данные.Честно говоря, в этой группе, даже если вы не говорите, вы можете узнать что-то, просто просмотрев записи чата (Meituan Wang Zhuang, Sanwei (Java3y) и Xixi и другие воротилы присутствуют).
Обратите внимание, не потеряйтесь
Хорошо всем, вышеизложенное является полным содержанием этой статьи. Люди, которые могут видеть это здесь, всеталант.
Каждую неделю я буду обновлять несколько статей, связанных с интервью и общими технологическими стеками ведущих интернет-компаний, большое спасиботалантМы можем видеть здесь, если эта статья хорошо написана, я думаю, что «Ао Бин» ячто-тоеслиПожалуйста, лайкните 👍 Пожалуйста, следите за ❤️ поделитесь пожалуйста 👥Это правда для меняочень полезно! ! !
Проституция нехороша, творить нелегко,Ваша поддержка и признание — самая большая мотивация для моего творчества, увидимся в следующей статье!
Ао Бин | Текст [Оригинал]
Если в этом блоге есть какие-либо ошибки, пожалуйста, критикуйте и советуйте, это очень ценится!
Статья постоянно обновляется каждую неделю, вы можете искать в WeChat "Третий принц Ао Бин"Читать и запрашивать обновления в первый раз (на одну-две статьи раньше, чем в блоге), эту статьюGitHub github.com/JavaFamilyОн был включен, есть карта разума точек интервью заводов первого уровня, а также я организовал много своих документов. Добро пожаловать в Звезду и совершенствуйтесь. Каждый может обратиться в тестовый центр для ознакомления. Надеюсь мы можем иметь что-то вместе.