Как избежать затопления в моем очень простом веб-приложении и сделать его масштабируемым? - PullRequest
4 голосов
/ 15 мая 2011

Я пытаюсь разработать очень простое веб-приложение на Java с использованием JSP и сервлетов.

1) На странице есть текстовое поле и кнопка отправки,
2) Пользователь вводит свое имя, скажем Джон, в текстовое поле и нажимает кнопку,
3) Строка пересылается моему сервлету,
4) В методе doPost моего сервлета я получаю доступ к опубликованной строковой переменной
5) В веб-службе, которую я буду использовать, есть метод sayHello, который принимает аргумент и возвращает "Hello " объединенный с аргументом,
6) Итак, я вызываю метод sayHello веб-службы, получаю возвращаемую переменную и пересылаю это в JSP, который в основном записывает Hello John,

У меня есть 2 вопроса:

1) Flooding: Как избежать переполнения запросов к моему сервлету?Как мне с этим бороться?Я думал о создании темы, чтобы связаться с веб-сервисом и сказать привет.Когда приходит запрос, я проверяю, работает ли поток / занят, если нет, я обрабатываю запрос.Поэтому я буду отвечать не более 1 запроса в единицу времени.Как это звучит?

2) Масштабируемость: Предположим, что сегодня вечером 1 000 000 миллионов человек достигнут моего веб-приложения и заставят мое приложение передать привет 10 раз каждый.Как мне убедиться, что это приложение будет хорошо масштабироваться?Что я могу сделать с частью JSP / Servlet, кроме аппаратного обеспечения, от которого зависит сервер?

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

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 15 мая 2011

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

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

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

Вертикальное масштабирование - это когда вы бросаете более быстрый процессор в проблему. Горизонтальный лучше.

Работа с самим сервисом - это ваша точка сбоя масштабируемости, поскольку именно там выполняется реальная работа. В этом случае у вас есть простой сервис, поэтому вы можете сделать то же самое с веб-сервисом, что и с сервлетом. Но если проблема "сложнее" - хорошо, именно здесь вы начинаете использовать JMS для предоставления асинхронных услуг, так что ваши поставщики услуг принимают запросы и предоставляют ответы , как только они могут . Это дает вам естественное место для добавления большего количества потребителей, поэтому, если вы обнаружите, что ваша служба JMS не может обрабатывать запросы, вы добавляете другого потребителя (другой сервер, прослушивающий очередь); если это не в состоянии не отставать, вымойте, ополосните, повторите.

Конечно, есть и облачные решения проблемы; Я работаю в GigaSpaces Technologies, которая предоставляет сервис горизонтальной масштабируемости для веб-сервисов, и мы работаем намного лучше, чем решение, которое я только что обрисовал. Чтобы узнать, как это работает, смотрите http://www.youtube.com/watch?v=YTEqFzrfVss.

2 голосов
/ 15 мая 2011
  1. Ваше решение может спасти день от наводнения, но будет иметь очень плохое влияние на доступность приложения. Основной причиной наводнения является слишком большое количество запросов, поступающих с одного компьютера со злонамеренными намерениями, чтобы заблокировать ваше приложение. Поэтому я бы предложил связать идентификаторы сеансов с идентификаторами потоков. Другими словами, вы будете обрабатывать только один запрос пользователя за раз. Следующий будет рассматриваться только тогда, когда первый будет сделан.

  2. Я предпочел бы пойти с решением @Joseph Ottinger

...