Вход |  Регистрация

Все Тэги

Monitoring Java Segmentation

05.09.2013234 просм.

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

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

Все серверы приложений поддерживают пулы потоков, которые используются для обслуживания входящих запросов. В WebLogic эти пулы потоков называют потоками выполнения и они расположены в одной или нескольких очередях выполнения. А в WebSphere они так и называются – пулы потоков. Независимо от способа реализации, запрос, поступивший на сервер приложений, ставится в очередь ожидания или направляется непосредственно на обработку в поток выполнения. Когда поток доступен, он принимает запрос, выполняет некоторую бизнес-логику и направляет ответ отправителю запроса.

На большинстве серверов приложений, все приложения и компоненты по умолчанию обслуживаются одним и тем же пулом потоков. Эта модель приемлема, если все компоненты приложения одинаково ценны для бизнеса и один бизнес процесс готов ожидать неопределенное время, пока обрабатывается другой. Разумеется, на практике некоторые бизнес процессы представляют большую ценность, чем другие. Да и независимо от этого, выполнение одного процесса не должно мешать выполнению другого. Рассмотрим развёртывание следующего набора компонентов:

• Front-End магазина электронной коммерции;
• Компонент для заказа и биллинга в электронной коммерции;
• Административный компонент.

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

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

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

Ответ заключается в создании индивидуальных пулов потоков для каждого компонента. Размер каждого пула потоков должен быть настроен в соответствии с требованиями системы и пользовательской нагрузкой. Таким компонентам, как Front-End, к которым чаще нужен доступ, потребуется больше потоков, чем компоненту для заказа и биллинга, который, в свою очередь, скорее всего использует больше потоков, чем административный компонент. Даже если система находится под большой нагрузкой и Front-End работает на пределе, заказы на сайте всё равно будут размещаться, и управляющий магазином всегда сможет подключиться к административному компоненту.

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

Метки: ,

Добавить комментарий

Для отправки комментария вам необходимо авторизоваться.

Партнеры DevOpsHub и DevOpsWiki