Pulsar: Действительно ли механизм обмена сообщениями нового поколения настолько мощный?

очередь сообщений Kafka
Pulsar: Действительно ли механизм обмена сообщениями нового поколения настолько мощный?

задний план

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

  • Дружественная облачная поддержка: потому что текущий язык рабочей лошадкиGo, и в то же время может быть достаточно простым в эксплуатации и обслуживании.
  • Официально поддерживает несколько языковSDK: осталось немногоPython,JavaСвязанные кодовые обслуживания.
  • Лучше всего иметь какие-то удобные функции, такие как: задержка новостей, очередь недоставленных писем, многосрочные домохозяйства и т.д.

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

Исходя из указанных выше условий фильтрации,Pulsarв поле нашего зрения.

так какApacheПроекты верхнего уровня ниже, вышеперечисленные функции могут быть хорошо поддержаны.

Ниже мы приходим к тому, что он превосходит.

Архитектура

Как видно из официальной диаграммы архитектурыPulsarВ основном он состоит из следующих компонентов:

  1. BrokerКомпонент без сохранения состояния, который можно масштабировать горизонтально, в основном используемый для соединений производителя и потребителя; аналогичный брокеру Kafka, но без возможностей хранения данных, поэтому его легче масштабировать.
  2. BookKeeperКластер: в основном используется для постоянного хранения данных.
  3. Zookeeperдля храненияbrokerа такжеBookKeeperметаданные.

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

PulsarХранение и вычисление разделены.Когда требуется расширение, это очень просто добавить напрямую.brokerТо есть другой умственной нагрузки нет.

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

та же операция,KafkaЭто сложнее.

характеристика

мульти аренды

Мультиарендность — это также просто необходимая функция, которая может изолировать данные разных компаний и команд в одном кластере.

persistent://core/order/create-order

Возьмите это название темы в качестве примера, вcoreЕсть один под этим арендаторомorderизnamespace, и в итогеcreate-orderизtopicимя.

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

Часто сравнения могут навредить.Как вы решаете проблемы такого типа в промежуточном ПО для обмена сообщениями без мультиарендности:

  1. Просто он не так сильно разделен, и все бизнес-направления смешаны вместе, когда команда маленькая, это может не быть проблемой, когда бизнес увеличится, им будет очень хлопотно управлять.
  2. Сделайте слой абстракции перед темой, но на самом деле это также по сути реализация мультитенантности.
  3. Каждая бизнес-команда поддерживает свой кластер, что, конечно, может решить проблему, но сложность эксплуатации и обслуживания, естественно, возрастет.

Вышеупомянутое очень интуитивно понятно, чтобы увидеть важность мультитенантности.

Расчет функциональной функции

PulsarОн также поддерживает упрощенные вычисления функций, такие как очистка данных и преобразование определенных сообщений, а затем публикация в другой теме.

Такое требование может написать простую функцию,Pulsarпри условииSDKДанные можно легко обработать и, наконец, опубликовать в официальном инструменте.brokerсередина.

Перед выполнением этого простого требования также может потребоваться обработка потока самим движком.

заявление

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

НапримерPulsarОн поддерживает четыре режима потребления:

  • Exclusive: Эксклюзивный режим, только один потребитель может одновременно запускать и потреблять данные;SubscriptionNameпомечен как один и тот же потребитель), сфера применения невелика.
  • FailoverРежим аварийного переключения: на основе эксклюзивного режима можно запустить несколько запусков одновременно.consumer, когдаconsumerПосле отбоя остальные можно быстро долить, но есть только одинconsumerРасходный материал; доступен в некоторых сценариях.
  • SharedОбщий режим: одновременно могут работать N потребителей, и сообщенияround-robinОпрос доставки каждомуconsumerв; когдаconsumerбез простоевack, сообщение будет доставлено другим потребителям. Этот режим потребления может улучшить мощность потребления, но сообщения не могут быть упорядочены.
  • KeySharedОбщий режим: основан на общем режиме; эквивалентен тому жеtopicСообщения в группе сгруппированы, и сообщения в одной группе могут потребляться только одним и тем же потребителем упорядоченным образом.

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

SDK

официально поддерживаетсяSDKОчень познавательно, я тоже в официальномSDKНа основе инкапсуляции внутренне используемогоSDK.

потому что мы использовалиdigТакая облегченная библиотека внедрения зависимостей, поэтому выглядит так:

	SetUpPulsar(lookupURL)
	container := dig.New()
	container.Provide(func() ConsumerConfigInstance {
		return NewConsumer(&pulsar.ConsumerOptions{
			Topic:            "persistent://core/order/create-order",
			SubscriptionName: "order-sub",
			Type:             pulsar.Shared,
			Name:             "consumer01",
		}, ConsumerOrder)

	})

	container.Provide(func() ConsumerConfigInstance {
		return NewConsumer(&pulsar.ConsumerOptions{
			Topic:            "persistent://core/order/update-order",
			SubscriptionName: "order-sub",
			Type:             pulsar.Shared,
			Name:             "consumer02",
		}, ConsumerInvoice)

	})

	container.Invoke(StartConsumer)

двое из нихcontainer.Provide()функция для инъекцийconsumerобъект.

container.Invoke(StartConsumer)удалит всеconsumerобъект и начать потреблять в то же время.

В это время с моим ограниченнымGoОпыт разработки также размышляет о проблеме, вGoНужна ли инъекция зависимостей?

Давайте посмотрим на использованиеDigПреимущества такой библиотеки:

  • Объект управляется контейнером, и очень удобно реализовать синглтон.
  • Когда предыдущие зависимости каждого объекта сложны, можно сократить объем кода для создания и получения объектов, а зависимости сделать более понятными.

К таким же недостаткам относятся:

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

для б/уSpringизJavaДля разработчиков он должен быть действительно ароматным, ведь это все же привычный вкус, а для тех, кто вообще никогда не сталкивался с подобными потребностямиGopherКажется, это не нужно.

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

Я считаю, что есть многоGopherочень противноJavaНекоторые сложные понятия вGo, но я думаю, что само внедрение зависимостей не ограничено языком, и разные языки имеют свои реализации, но Spring в Java — это не только фреймворк для внедрения зависимостей, но и множество сложных функций, которые многих разработчиков отпугивают.

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

назадSDKсам,GoизSDKВ настоящее время, чемJavaВ версии мало функций (точнее, толькоJavaверсия с наиболее богатыми функциями), но основные все доступны, что не влияет на повседневное использование.

Суммировать

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

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