Nano Hash - криптовалюты, майнинг, программирование

Рекомендации по (чрезмерному) использованию очередей Azure

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

Рекомендации, которые я видел для разработки приложения для Azure, включают в себя сведение к минимуму логики веб-роли и выполнение обработки в рабочих ролях, использование очередей для связи и своего рода внутреннее хранилище, такое как SQL Azure или Azure Tables. Мне это кажется хорошей идеей, поскольку я могу масштабировать одну или обе части приложения без каких-либо проблем. Однако мне любопытно, есть ли какие-либо передовые методы (или есть ли у кого-нибудь какой-либо опыт), когда лучше просто иметь веб-роль, чтобы напрямую общаться с хранилищем данных, а не отправлять данные по очереди?

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

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

11.03.2010

Ответы:


1

Я бы сказал, что для вставки не требуется рабочая роль. В любом случае у вас будет вставка в очередь, поэтому вы ничего не сохраните в веб-роли. Лучше всего было бы изолировать ваши вставки (и весь доступ к данным) в отдельный класс (или классы) в вашей веб-роли. Это позволит вам отделить остальную часть кода вашей веб-роли от конкретной системы хранения данных, которую вы используете. Это значительно упрощает изменение хранилища данных позже. Если ваши вставки в конечном итоге требуют дополнительной обработки, вы можете добавить очередь и рабочую роль, когда это необходимо, но я бы все же сказал, что вы хотите сделать вставку непосредственно в хранилище таблиц, а затем передать вычисления или другую бизнес-логику в роль работника. Затем эта рабочая роль может обрабатывать сообщения из очереди или просто запрашивать хранилище таблиц для новых (необработанных) записей.

Я вижу, что использование очереди для связи с рабочей ролью становится наиболее эффективным, когда есть вычисления или другая обработка, которую необходимо выполнить с данными. Тот, который я использовал чаще всего, на самом деле является одним из примеров в Azure SDK, который показывает, как создавать эскизы изображений. Моя веб-роль вставляет загруженное изображение в хранилище BLOB-объектов Azure, а связанное описание и другие поля — в хранилище таблиц Azure. Он также помещает в очередь сообщение, которое сообщает рабочей роли, что имеется новое изображение, для которого необходимо создать эскизы. На самом деле я создаю несколько разных размеров каждого изображения для использования в разных частях сайта. Рабочая роль просто создает эти миниатюры, и ей не нужно отправлять какие-либо уведомления веб-роли. Любое место, где используются изображения, имеет логику для использования исходной загрузки или других заполнителей, когда миниатюры еще недоступны.

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

Изменить в ответ на комментарий: когда я публиковал этот ответ, я сказал просто использовать изображение с полным разрешением в пользовательском интерфейсе, если миниатюра недоступна. Теперь я работаю над сайтом, который просто использует изображение миниатюры по умолчанию с надписью «обработка», пока сгенерированная миниатюра не станет доступной. Выбор за вами, и он действительно зависит от требований пользовательского интерфейса вашего приложения.

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

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

14.03.2010
  • Когда вы это делаете, что вы показываете пользователю? Многие пользователи ожидают увидеть миниатюру в пользовательском интерфейсе после загрузки фотографии, поэтому, хотя я вижу ценность в отделении создания миниатюр от рабочей роли, не остается ли у вас проблема с UX, связанная с тем, что отображать, пока обработка не будет завершена? полная, а как узнать когда она? 27.06.2012

  • 2

    Вот моя метафора, делай с ней что хочешь

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

    Администрация наняла несколько больших мясистых вышибал у дверей, чтобы разобраться с этим сбродом. Если ты идиот, ты не справишься. Расширяйте метафору сколько хотите.

    Если вы в порядке, то вас впускают в дверь, и вы присоединяетесь, да, к Очереди, чтобы заплатить в кассе, чтобы войти в настоящий клуб.

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

    So:

    • Вышибалы - веб-роли. Обрабатывайте входящий трафик, отклоняйте недействительные запросы и добавляйте действительные запросы в:
    • Очередь - Очередь!
    • Box Office - рабочие роли, выполняющие роль, отличную от веб-ролика.

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

    это моя метафора

    Тоби

    16.03.2010

    3

    Использование распределенных очередей (Azure, Amazon или что-то еще) довольно тонкое. Я разместил запись в блоге охватывающий часто встречающиеся тонкости Azure Queues. Итог: я предлагаю тщательно абстрагировать логику вашей инфраструктуры (поддерживающей очередь) от вашей бизнес-логики (контент и обработка очереди).

    17.03.2010
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

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

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..