Варианты развертывания веб-сервиса Java

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

Мне нужно было добавить некоторые серверные функции в приложение для Android, которое у меня есть на рынке. Большая часть моего прошлого опыта связана с работой с веб-сервисами .Net и MSSQL, однако, поскольку Android использует Eclipse и Java, я решил создать этот веб-сервис с использованием аналогичных технологий.

Используя несколько различных руководств, я разработал (снизу вверх) веб-службу с использованием оси 2 и mySQL, и она довольно успешно взаимодействует с локальным экземпляром на Tomcat7.

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

В настоящее время у приложения около 500 000 пользователей, каждый из которых может делать запросы к серверу, скажем, примерно каждые 30 секунд. Таким образом, в настоящее время ожидается самый большой трафик.

Веб-служба выполняет запрос выбора в базе данных sql, выполняет некоторые вычисления, а затем отправляет ответ — запись в базу данных вообще не выполняется. Ожидаемое время отклика составляет около 1-10 секунд, в зависимости от сложности расчета.

Честно говоря, я понятия не имею о возможностях загрузки Tomcat, веб-службы Java или mySQL, и поиск ответов в Google ничего не дал. Но это, вероятно, больше из-за того, что я не знал точно, что искать из-за отсутствия опыта.

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

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

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


person Jon    schedule 07.06.2011    source источник
comment
Кэшируются ли ваши запросы? Я полагаю, что это самый важный вопрос, который нужно задать себе. Многие решения для кэширования не зависят от базового стека.   -  person Rom1    schedule 07.06.2011
comment
Нет. Каждый запрос будет другим, я не думаю, что есть способ реализовать решение для кэширования. Я рассматривал возможность загрузки таблицы mySQL в память при запуске, но это более 200 000 записей, тогда как оператор select может отфильтровать это в соответствии с требованиями запроса.   -  person Jon    schedule 07.06.2011


Ответы (1)


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

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

  • Бросьте на него больше оборудования
  • Настройте свои запросы, чтобы обеспечить максимально быстрое завершение вызова веб-службы.
  • Профилируйте приложение для поиска узких мест в памяти и производительности.
  • Поместите уровень кеша (см. Ehcache) перед вашей БД, чтобы ускорить чтение.
person Sean    schedule 07.06.2011
comment
Я планировал провести нагрузочное тестирование с помощью некоторых бета-тестеров, а также выполнить поэтапное развертывание, чтобы попытаться выявить проблемы, прежде чем все развалится в кричащую кучу, выполняя это вживую. SoapUI выглядит для меня отличным решением для поиска ответов, которые мне нужны, поскольку, вероятно, нет однозначного ответа, который кто-то может дать. Спасибо за вашу помощь, я посмотрю, какие еще ответы появятся, но думаю, что я отмечу это как лучшее решение. - person Jon; 07.06.2011
comment
Вы захотите взглянуть на максимальное количество потоков, которые tomcat будет создавать за раз. Я полагаю, что значение по умолчанию равно 200. Как только у вас будет больше запросов, чем максимальное количество потоков, у вас будут резервные копии пользователей и ожидание. Найдите свою золотую середину с помощью инструмента нагрузочного тестирования - person Sean; 07.06.2011
comment
Это скорее ответ, который я ожидал увидеть (и надеялся избежать). По умолчанию кажется, что я мог бы увеличить его, будучи выделенным сервером, поэтому я посмотрю, как пройдет нагрузочное тестирование, и изучу его оттуда. Я думаю, что мои алгоритмы максимально оптимизированы, по крайней мере, для моего IQ, но быстрое чтение об ehcache кажется хорошим решением, позволяющим избежать траты времени и памяти на все вызовы БД, если я обнаружу проблему. - person Jon; 07.06.2011