задний план
В настоящее время мы занимаемся выбором технологий для нового бизнеса, который включает в себя выбор промежуточного программного обеспечения для сообщений; в сочетании с нашей реальной ситуацией мы надеемся, что он сможет удовлетворить следующие требования:
- Дружественная облачная поддержка: потому что текущий язык рабочей лошадки
Go
, и в то же время может быть достаточно простым в эксплуатации и обслуживании. - Официально поддерживает несколько языков
SDK
: осталось немногоPython
,Java
Связанные кодовые обслуживания. - Лучше всего иметь какие-то удобные функции, такие как: задержка новостей, очередь недоставленных писем, многосрочные домохозяйства и т.д.
Конечно, есть и некоторые функции, такие как горизонтальное расширение, пропускная способность и низкая задержка.Излишне говорить, что почти все зрелые промежуточные программы для сообщений могут соответствовать этим требованиям.
Исходя из указанных выше условий фильтрации,Pulsar
в поле нашего зрения.
так какApache
Проекты верхнего уровня ниже, вышеперечисленные функции могут быть хорошо поддержаны.
Ниже мы приходим к тому, что он превосходит.
Архитектура
Как видно из официальной диаграммы архитектурыPulsar
В основном он состоит из следующих компонентов:
-
Broker
Компонент без сохранения состояния, который можно масштабировать горизонтально, в основном используемый для соединений производителя и потребителя; аналогичный брокеру Kafka, но без возможностей хранения данных, поэтому его легче масштабировать. -
BookKeeper
Кластер: в основном используется для постоянного хранения данных. -
Zookeeper
для храненияbroker
а такжеBookKeeper
метаданные.
В целом кажется, что у него больше компонентов, чем у Kafka, что действительно усложняет систему, но те же преимущества очевидны.
Pulsar
Хранение и вычисление разделены.Когда требуется расширение, это очень просто добавить напрямую.broker
То есть другой умственной нагрузки нет.
Когда хранилище становится узким местом, его нужно только расширитьBookKeeper
, нет необходимости в искусственной перебалансировке,BookKeeper
автоматически загрузится.
та же операция,Kafka
Это сложнее.
характеристика
мульти аренды
Мультиарендность — это также просто необходимая функция, которая может изолировать данные разных компаний и команд в одном кластере.
persistent://core/order/create-order
Возьмите это название темы в качестве примера, вcore
Есть один под этим арендаторомorder
изnamespace
, и в итогеcreate-order
изtopic
имя.
На практике арендаторы обычно делятся на бизнес-группы.namespace
Это другой бизнес в нынешней команде, таким образом, тема может управляться очень четко.
Часто сравнения могут навредить.Как вы решаете проблемы такого типа в промежуточном ПО для обмена сообщениями без мультиарендности:
- Просто он не так сильно разделен, и все бизнес-направления смешаны вместе, когда команда маленькая, это может не быть проблемой, когда бизнес увеличится, им будет очень хлопотно управлять.
- Сделайте слой абстракции перед темой, но на самом деле это также по сути реализация мультитенантности.
- Каждая бизнес-команда поддерживает свой кластер, что, конечно, может решить проблему, но сложность эксплуатации и обслуживания, естественно, возрастет.
Вышеупомянутое очень интуитивно понятно, чтобы увидеть важность мультитенантности.
Расчет функциональной функции
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, и друзья с соответствующим опытом также могут оставить свое мнение в области комментариев.