Серия "Войдём на большой завод вместе" - основы очереди сообщений

интервью Java
Серия "Войдём на большой завод вместе" - основы очереди сообщений

Чем больше вы знаете, тем больше вы не знаете

Ставьте лайк и смотрите снова, формируйте привычку

GitHubоткрытый источникgithub.com/JavaFamilyЕсть карты мозга, личная контактная информация и группы по обмену талантами для интервью с заводами первого уровня.Добро пожаловать в Star and Perfect

болтовня

Этот вопрос изначально был подготовлен для всеобщего голосования, а затем вОсновы Javaиочередь сообщенийЯ выбрал одну для написания, но если подумать, то могу написать несколько статей об основах Java только для каждой коллекции.Основы надо писать несколько месяцев.А можно ли сначала написать короткую очередь сообщений?

мой мозгВспышка света, шлепнул по столу, и все!

Итак, вот этот эпизод, ха-ха.

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

Потому что нашла очень серьезный вопрос, если у меня в сотнях статей одинаковое начало и конец, вам не надоест в конце?

В любом случае, это предложение очень полезно для меня, или, если у вас есть какие-либо предложения по написанию, вы можете перейти кGitHub github.com/JavaFamilyВыше есть моя контактная информация, вы можете добавить меня в WeChatтихоСкажите мне.

Интервью начинается

Пришел к вам красивый мужчина средних лет в клетчатой ​​рубашке с поцарапанным макинтошем, посмотрел на свою светлую голову и подумал, что он, должно быть, топ-архитектор Нимы! Но мы видели серию теплого человека Ао Бина, и он полон поэзии и литературы, но он не пуст.

Молодой человек раньше так много спрашивал вас о знании Redis.Вы не только бегло ответили, но и так гладко можете объяснить решения, преимущества и недостатки каждого сценария.Вы читали серию "Повесить и избить интервьюера", написанную Ао Бинг?

шок! ! ! Откуда вы знаете, учитель, я не могу перестать смотреть его серию.

Хе-хе, Redis для вас не сложный, но если я попрошу новый стек технологий, боюсь, вам будет сложно? Я спрашиваю вас, вы использовали очереди сообщений в своем проекте? Почему вы используете очереди сообщений?

Пфф, это тоже называется проблемой? Может ли кто-то другой использовать его, я могу не использовать его? Я использую это, когда другие используют это, я использую это ради этого.

Просто бормоча в своем сердце, не говори этого, если скажешь, не говори, когда тебе не сделают предложение, этот подонок Ао Бин научил меня, что говорить!

Здравствуйте, интервьюер: Сама наша компания имеет небольшой объем бизнеса, поэтому мы напрямуюОдин шаттлВсе можно сделать, но объемы бизнеса в дальнейшем продолжают расширяться.Дизайнерское мышление микросервисов,Метод распределенного развертывания, поэтому многие услуги разделены.По мере увеличения объема и усложнения бизнес-сценариев технологического стека и промежуточного программного обеспечения одной машины во многих сценариях недостаточно, и удобство системы также снизилось.Наконец, do После долгой работы по техническому отбору мы решили представитьПО промежуточного слоя очереди сообщений.

Ой? Вы сказали, что бизнес-сценарии становятся все более и более сложными, в каких сценариях вы используете очереди сообщений?

Что ж, позвольте мне рассказать о сцене, которую я использую, с трех сторон.

Tip: Эти три сценария также являются классическими сценариями очередей сообщений, с которыми должен быть знаком каждый, то есть, когда вы говорите об очередях сообщений, вы должны думать о них.Асинхронный, отсечение пиков, развязка, своего рода условный рефлекс.

асинхронный:

В нашем предыдущем сценарии есть много шагов, которые необходимо выполнить в одном процессе, например, моя система заказов.Изначально наш бизнес был простым.После размещения заказа и его оплаты процесс завершается.

Но позже пришел менеджер по продукту и сделалкупонная система, ОК, это не большая проблема, есть дополнительные 100 мс в процессе, чтобы вычесть купон.

Затем к менеджеру по продукту пришла вспышка вдохновения, и он сказал, что мы можем сделатьСистема балловАх, да ладно, в процессе есть дополнительные 200 мс, чтобы увеличить или уменьшить баллы.

Позже король продуктов по соседству сказал: «После того, как заказ будет выполнен, мы отправим текстовое сообщение пользователю, так что давайте сделаем это и отправим текстовое сообщение в течение 100 мс».

после этого. . . (Ао Бин, ты еще не закончил!!!)

В любом случае, процесс немного похож на этот ↓

Вы можете видеть, что это только добавляет три, я могуРешительноЭто говорит вам, что реальный процесс заказа включает более 10 систем (основная электронная коммерция), чем больше, тем больше.

Эта ссылка выглядит так,партия длительного времени, пользователь обнаружит, что вам требуются десятки секунд, чтобы что-то купить, я не покупаю это у вас в мусорной электронной коммерции, но если это похоже наи xixiтак дешево,действительно ладан!

Но у нашей компании нет экономической мощи Xixi, поэтому мы можем только оптимизировать систему.

Совет: старой компании электронной коммерции, в которой я работал, требуются все интерфейсы.Rt(время отклика ResponseTime) в течение 200 мс, помимо всех оптимизаций, система QPS, за которую я в настоящее время отвечаю, также9W+просто встряхниСетевые кластеры могут поджаритьвроде,RTВ основном, это требуется, чтобы быть в пределах 50 мс.

Все чувствуют этот QPS.

Ну не плохо, ссылка становится медленной, когда она длинная, так как вы это решили?

Чем длиннее ссылка, тем медленнее она будет, но мы обнаружили, что описанный выше процесс на самом деле можетсделать и то, и другоеДа, после того, как ваш платеж будет успешным, я могу увеличить или уменьшить баллы при проверке купона, а также одновременно отправить текстовое сообщение.

Мы не можем добиться нормального процесса, что нам делать?асинхронный.

Если вы сравните его, вы можете найти, что для пользователя больше всего займет всего 100 миллисекунднов, чтобы пользователь мог знать, что заказ успешно. Что касается текстового сообщения, которое вы отправляете ему через несколько секунд, ему вообще не волнует, он вообще не волнует?

Вас прервал молодой человек, вы сказали асинхронный, тогда я пользуюсь потоком, пул потоков не тот?

о, интервьюерне волнуйся, я расскажу об этом позже, Сао и так далее.

Развязка:

Раз интервьюер спросил об этом, позвольте мне объяснить вам, почему мы не можем сделать это с помощью потоков, потому что, если вы сделаете это с потоками, вы хотите написать код?

У вас есть процесс заказа, вы вычитаете баллы, вычитаете купоны, отправляете текстовые сообщения и вычитаете инвентарь. . . В ожидании, когда так много компаний вызовут так много интерфейсов,Каждый раз, когда вы добавляете один, вы должны вызывать интерфейс, а затем повторно публиковать систему., Написать один или два раза нормально, но если напишешь слишком много, то скажешь: я ухожу!

А если уж все вместе написать, то дело не только в сопряжении, но и в устранении неполадок хлопотно. Проблема в любой части процесса может повлиять на другие моменты. Мой друг сказал, что у меня есть каждый процесс.try catchНет, поверьте мне, не делайте этого, такой код похож наБомба замедленного действия 💣, вы не знаете, когда он взорвется, обычно, когда вы не взорветесь, он взорвется, когда вы выполняете действия, вы получитеОшибка P0упаковать школьную сумкупойти домой раноБар.

Совет: P0-PN — это механизм, который интернет-компании часто используют для определения уровня аварийности, а P0 — самый высокий уровень.

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

О, что сказала Шуай Бин?

И послушайте, как я говорю:

Вы делаете заказ, вы получаетеСообщение об успешном платеже сообщает другим системам, они получают его и обрабатывают его. Вам нужно только пройти свой собственный процесс и отправить свое сообщение. Затем к какой системе подключиться просто, и вы можете напрямую подписаться на сообщение об успешном платеже, отправленное вами. Ваш платеж успешен .Просто монитор.

Тогда ваш процесс завершен, вас не волнует, добьются ли успеха другие? Например, если вы делаете заказ, но баллы не начисляются, а купоны не списываются, что делать?

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

Tip: Тем не менее, это на самом деле недостаток использования очередей сообщений, включающихРаспределенная транзакцияочки знаний, о которых я упомяну ниже.

Пиковое отсечение:

Возьмем, к примеру, seckill, который я написал в прошлом выпуске (имеется в виду, что новые студенты читают мой последний выпуск), ваш трафик обычно очень низок, но когда вы проводите мероприятие seckill в 00:00, трафик будет сумасшедшим, ваш сервер ,Redis,MySQLТолерантность у всех разная, вы прямоВесь трафик по счетуДолжна быть проблема, поэтому я просто вешаю трубку.

Что делать тогда?

Просто, поставь запрос в очередь, а дальше сколько запросов потребляется в секунду зависит от твоего собственноговычислительная мощность сервера, вы можете обрабатывать 5000QPS, и вы будете потреблять так много, это может быть немного медленнее, чем обычно, ноНе вешайте сервер, Когда пик трафика снизится, ваш сервис не будет испытывать нагрузки.

Посмотрите на Double Eleven Али в 12:00, когда мгновенно льется столько трафика: иногда он немного замедляется, но не вешает трубку или понижает рейтинг, чтобы дать вам дружественную страницу напоминания, и когда пик проходит, это еще один молодец.

为了这个图特意打高一台服务的流量
Для этой картинки намеренно увеличен трафик сервиса

Я слышал, что вы так много говорите, и все это хорошо.Тогда я спрашиваю вас, что не так с использованием очереди сообщений?

Эй, я прочитал статью, которую написал ранееталантЗнаешь, я всегда говорю,Технологии — это палка о двух концах!

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

Тот самый теплый человек, основные его недостатки тоже представляю из трех пунктов:

сложность системы

Это была очень простая система.Я могу написать любой код.Теперь вы подключаете промежуточное программное обеспечение из воздуха.Должен ли я рассматривать его обслуживание, и должен ли я учитывать различные вопросы в процессе его использования,такие как сообщенияПовторное потребление,сообщение потеряно,последовательное потребление сообщенийПодождите, это все равно раздражает после его использования.

Позвольте мне вставить, можете ли вы рассказать о вышеуказанных проблемах (дублированное потребление, потеря сообщений, последовательное потребление) и как их решить?

не хотеть!Я уже сказал, что Ао Бин напишет в следующей главе?

не совсемтеплый человекЯ не хочу здесь писать, я думал над этими тремя вопросами, все ониMQизключевые вопросы, одного вынимать - это статья,Это слишком долго, я представлю их одну за другой в следующей главе.

согласованность данных

На самом деле это проблема, которая существует в самом распределенном сервисе.Больше, чем просто проблема с очередью сообщений, но поместите его здесь, потому что проблема использования очереди сообщений будет раскрыта более серьезно.

Как я сказал в начале, услуга, которую вы размещаете заказ, гарантирует, что ваша логика будет успешно обработана, и вы успешно отправите сообщение, но существует так много систем, таких как система купонов, система баллов и т. д.,Вам не все равно, если они преуспеют или потерпят неудачу?

Я сказал, что хорошо убедиться, что ваши бизнес-данные верны, но на самом деле это относительно безответственное заявление.Как отморозок, без шаблона,Таким образом, ваш путь будет уже и уже.

Только если все услуги выполнены успешно, этот заказ можно считать успешным., как мы можем обеспечить согласованность данных?

Распределенная транзакция: Ставьте заказы, купоны, баллы. . . Все они помещены в транзакцию: если вы хотите добиться успеха, вы добьетесь успеха вместе, а если вы хотите потерпеть неудачу, вы потерпите неудачу вместе.

Tip:Распределенная транзакцияЭто очень распространено в интернет-компаниях, и я не буду его здесь представлять, а расскажу о нем позже.

Доступность

В построении самой системы нет ничего плохого, но вот вы вдруг подключаетесь к мидлвару и ставите его туда, а вдруг он зависнет? я размещаю заказMQ зависает, купоны не будут списаны, и баллы не будут уменьшены.Это не то, что можно сделать, убив программиста.Ощущение, что убили одного.

Что касается того, как обеспечить высокую доступность, я не буду здесь обсуждать это предложение, я напишу его позже, как и написаниеRedisНаписано так.

Не волнуйся, Ао Бин, я не подонок, я обязательно буду за тебя отвечать. как!

Я не вижу, у вас что-то есть, тогда позвольте спросить, как вы делали технический отбор?

В настоящее время основное промежуточное ПО очереди сообщений на рынке в основном включает:Кафка, ActiveMQ, RabbitMQ, RocketMQПодожди этих.

Но что я хочу сказать об Ао Бин, так это то,ActiveMQиRabbitMQЭти две причины связаны с тем, что пропускная способность иGitHubПричина высокой активности сообщества в том, что все крупные интернет-компании практически исчезли, останутся компании со средним объемом бизнеса, но все больше компаний предпочитаютRocketMQТакое промежуточное ПО сообщений.

KafkaиRocketMQОни всегда сияли в своих областях знаний, но когда я писал эту статью, я спросил друзей из Ant Financial, ByteDance и Meituan, Кажется, что все используют немного по-разному, все они должны быть своим промежуточным программным обеспечением, возможно, модифицированным, это также может бытьСамостоятельное изучениеда, в основномнет открытого исходного кода.

так как наша компания основана наKafkaиRocketMQИх преимущества заключаются в самостоятельно разработанном промежуточном программном обеспечении очереди сообщений, которое обладает значительной пропускной способностью, надежностью и своевременностью.

Вернемся к основной теме, здесь я использую сравнительную таблицу, которую нашел в Интернете, чтобы все видели, где разрыв:

На самом деле все сразу видят разницу, просто возьмитепропускная способностьВ первые дни более активноActiveMQиRabbitMQВ принципе, не противник последних двух, в эпоху больших данных, как сейчас.пропускная способность очень важна.

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

Кроме того, приток этих пользователей на просмотр ваших новостей породил серию случайного трафика, как вы справляетесь с этими данными?Во многих сценариях выход из очереди сообщений в принципе нецелесообразен..

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

Давай поговорим сноваRabbitMQЭто промежуточное ПО на самом деле хорошо, но язык разработки этой штуки на самом делеerlang, осмелюсь сказать, что большинство инженеров точно не будут специально учить язык для мидлвара.О затратах на разработку и сопровождение можно не думать.Если есть проблема, то долго проверять.

Что касаетсяRocketMQ(Alibaba с открытым исходным кодом), активность git в порядке. По сути, вы выдвинули свою собственную ошибку и подтвердили, что, если есть проблема, Али попытается ответить на нее и исправить ее вместе с вами. Это то, что я лично рекомендую. Его архитектурный дизайн также является открытым исходным кодом Али.RPCРама действительно похожа(Dubbo) может быть потому, что учитель не из той же школы.

Подсказка:Dubboподожди пока я напишуRPCЯ буду вдаваться в подробности.

KafkaЯ скажу в конце, вы также должны знать, что финал - это старший брат. В области больших данных сбор журналов компании, вычисления в реальном времени и другие сценарии неотделимы от его присутствия. Он в основномПервоклассный эталонный тест очередей сообщений.

Это лишь некоторые из моих собственныхличное мнение, настоящий отбор еще впередиУглубленное изучениеДа, иначе ваша компания будет заряжать 1000 УФ в день, скажите, что вы собираетесь это использоватьKafkaВсе, что я могу сказать, это то, что у вас достаточно еды.

Помните, что нет лучшей технологии, есть только самая подходящая технология, не используйте ее ради нее самой..

Интервью окончено

Что ж, пацан неплохой, анализ на месте, тогда не помните ли вы рассказать о высокой доступности очередей сообщений, повторном потреблении, потере сообщений, порядке сообщений, распределенных транзакциях и других проблемах в следующем выпуске?

Хм, хороший интервьюер, но не уверен, что справлюсь на одном дыхании, ведь Ао Бин еще не начал писать, а читатели могут проституировать зря, так что мотивации не обязательно достаточно.

Хм, это проблема, но все люди, которые смотрят, обязательно поставят вам большой палец вверх!

Я так думаю.

Суммировать

Основы очереди сообщенийСначала я расскажу так много.Очередь сообщений — это в основном то, что я написал передо мной в интервью.RedisТо же самое надо спросить.

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

Интервьюер не понравилсяуметь только пользоватьсяДа, что делать, если проблема с антенной, которой пользуешься только ты? Вы молитесь Будде рядом с вами?

Я напишу много позжеФактический процесс разработки более сложенСитуация в принципе обязательный вопрос на собеседовании.Надеюсь вы возьмете небольшой блокнот и запишете.Не запоминай, пойми,Меня спросили в группе по обмену талантами, как я перенес эти очки знаний?

Tip:GItHub github.com/JavaFamilyЕсть групповой доступ и личная контактная информация

Ты уверен, что не шутишь? Вы все вернулись, вы прошли собеседование, что вы делаете, когда разрабатываете и пишете код? Он все еще запоминает код? Не смейтесь над братьями, понимание важнее всего.

И вообще, интервьюер, у которого за плечами реальный опыт разработки, как правило, знает, когда вы об этом спрашиваете, он точно лучше вас знает, есть ли какие-то подводные камни: если сможете, то ответите или не ответите честно.

Помните,Брюшная поэзия и газ из Китая, мы учимся и развиваемся вместе.

Благодарность

В предыдущей статье меня многие добавили, а потом кто-то сказал, что это онМуравей ФинансовыйРекомендованный мною ведущий, я вдруг понял, что аудитория моей статьи как бы постепенно расширяется, и тогда неточные моменты следует отсеивать.

Итак, после моей статьичасто естьНебольшой партнер Review большой фабрики также надеется помочь мне лучше контролировать мои статьи.

На этот раз компания электронной коммерции, основанная на Alibaba, провела со мной группу мероприятий.ПейнПомоги мнеReviewстатья, спасибо!

Обратите внимание, не потеряйтесь

Хорошо всем, вышеизложенное является полным содержанием этой статьи. Люди, которые могут видеть это здесь, всеталант.

Каждую неделю я буду обновлять несколько статей, связанных с интервью и общими технологическими стеками ведущих интернет-компаний, большое спасиботалантМы можем видеть здесь, если эта статья хорошо написана, я думаю, что «Ао Бин» ячто-тоеслиПожалуйста, лайкните 👍 Пожалуйста, следите за ❤️ поделитесь пожалуйста 👥Это правда для меняочень полезно! ! !

Проституция нехороша, творить нелегко,Ваша поддержка и признание — самая большая мотивация для моего творчества, увидимся в следующей статье!

Ао Бин | Текст [Оригинал]

Если в этом блоге есть какие-либо ошибки, пожалуйста, критикуйте и советуйте, это очень ценится!


Статья постоянно обновляется каждую неделю, вы можете искать в WeChat "Третий принц Ао Бин"Читать и запрашивать обновления в первый раз (на одну-две статьи раньше, чем в блоге), эту статьюGitHub github.com/JavaFamilyОн был включен, есть карта разума точек интервью заводов первого уровня, а также я организовал много своих документов. Добро пожаловать в Звезду и совершенствуйтесь. Каждый может обратиться в тестовый центр для ознакомления. Надеюсь мы можем иметь что-то вместе.