Развёртывание IBM Lotus Connections: Настройка после установки

В этой статье, второй части серии из семи статей о развёртывании IBM Lotus Connections, основное внимание уделяется настройкам после установки, гарантирующим, что у развёрнутой вами системы не будет типичных проблем с производительностью.

Луис Бенитес, старший ИТ-специалист, IBM

Луис Бенитес - старший ИТ-специалист подразделения IBM Software Services for Lotus. С января 2007 г. он занимается развёртыванием Lotus Connections для первых клиентов, внедряющих этот продукт. Луис пришёл в IBM Software Services в начале 2004 г., а до этого работал в группах по разработке системных продуктов IBM Lotus LearningSpace и IBM Lotus Learning Management. Связаться с Луисом можно по адресу Luis_Benitez@us.ibm.com.



10.01.2008

В этой статье идёт речь о некоторых наиболее типичных операциях, которые необходимо выполнить после установки IBM Lotus Connections. Вкратце рассматриваются все компоненты, необходимые для работы Lotus Connections: база данных, LDAP-каталоги, Web-сервер и сервер приложений. В статье затрагиваются некоторые типичные параметры настройки, чтобы помочь заказчикам и ИТ-специалистам понять, какие атрибуты конфигурации могут повлиять на общую производительность системы.

Введение

Рассматриваемые в этой статье задачи выполнять после завершения установки необязательно – однако настоятельно рекомендуется их выполнить, поскольку в результате улучшается производительность развёрнутой системы Lotus Connections. В статье даются советы по индивидуальной настройке производительности различных компонентов инфраструктуры. Хотя в данной статье речь идёт о Lotus Connections, многие советы относятся к большинству Web-приложений J2EE.

Приведенные рекомендации показывают, как оптимизировать производительность Web-сервера, сервера приложений, LDAP-сервера и сервера базы данных.


Оптимизация производительности Web-сервера

В этом разделе содержатся различные рекомендации, направленные на то, чтобы HTTP-сервер не стал узким местом в развёрнутой системе Lotus Connections.

Оптимизация плагина

IBM WebSphere Application Server генерирует плагин для вашего Web-сервера. Например, в IBM HTTP Server этот файл обычно располагается по адресу \<IHS_INSTALL_ROOT>\Plugins\config\webserver1\plugin-cfg.xml. Две первые строки плагина должны быть похожи на код, приведённый в листинге 1.

Листинг 1. Оптимизация Plugin-cfg.xml
<Config ASDisableNagle="false" AcceptAllContent="false" AppServerPortPreference=
"HostHeader" ChunkedResponse="false" FIPSEnable="false" IISDisableNagle="false" 
IISPluginPriority="High" IgnoreDNSFailures="false" RefreshInterval="60"
ResponseChunkSize="64" VHostMatchingCompat="false">
     <Log LogLevel="Error"
Name="C:\IBM\HTTPServer\Plugins\logs\webserver1\http_plugin.log"/>

Обратите внимание на выделенные жирным шрифтом элементы листинга. Сначала параметр RefreshInterval информирует Web-сервер о том, как часто необходимо перезагружать плагин. Эта информация полезна, когда на нескольких серверах приложений развёртывается множество приложений. Если же развёртываемых приложений немного, следует изменить данный параметр соответствующим образом. По умолчанию это значение равно 60 секундам. В производственной системе оптимальным значением является 3600 секунд (т.е. один час).

Далее, параметр LogLevel сообщает Web-серверу о том, насколько подробным должен быть уровень регистрации событий. По умолчанию значение этого уровня - Error, и в производственной системе изменять его не следует. Значение Trace значительно ухудшает производительность Web-сервера, хотя и обеспечивает самый высокий уровень регистрации событий, что полезно при поиске и устранении ошибок.

Оптимизация регистрации событий

Если в качестве Web-сервера используется IBM HTTP Server, имейте в виду, что по умолчанию каждый файл, запрашиваемый с Web-сервера, регистрируется в файловой системе. Это означает, что каждый раз, когда пользователь посещает страницу, регистрируются все запросы изображений, CSS-файлов, JSP, HTML и т. д. По мере того, как всё большее число людей используют Lotus Connections, размер этого log-файла существенно увеличивается и он занимает всё больше места на диске, замедляя процесс доставки контента пользователям.

Чтобы избежать этой проблемы, выполните следующие шаги:

  1. Войдите на Web-сервер под учетной записью администратора.
  2. Откройте каталог с настройками IHS (например, /opt/IBMHttpServer/conf).
  3. Сделайте копию файла httpd.conf.
  4. Откройте httpd.conf каким-нибудь текстовым редактором.
  5. Найдите следующую строку:
    CustomLog logs/access.log common и измените её на:
    #CustomLog logs/access.log common

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

Перемещение статических элементов на Web-сервер

Каждый сервер в развёрнутой вами системе служит конкретной цели. В Lotus Connections LDAP-каталог используется исключительно для хранения данных, необходимых для других корпоративных приложений. Сервер баз данных нужен только для хранения данных приложения. Web-сервер, в свою очередь, применяется исключительно для обслуживания статического контента, а также служит прокси-сервером для сервера приложений.

На сервере приложений (в данном случае это WebSphere Application Server) работает ядро Lotus Connections; здесь содержатся все приложения и бизнес-логика. С сервера приложений выполняются запросы к базе данных, он же осуществляет манипулирование данными и их представление. На сервере приложений также находится логика, динамически создающая представления данных. Она может потреблять значительные процессорные ресурсы.

Тем не менее сервер приложений часто используется для обслуживания статического контента (то есть контента, который не изменяется), например изображений, каскадных таблиц стилей, файлов JavaScript и т.д. В идеале статический контент должен обслуживаться Web-серверами, поскольку он неизменен, а Web-серверы предназначены специально для хранения и обработки статического сетевого контента.

Если статический контент находится на сервере приложений, тратится драгоценная пропускная способность сети. В этом случае статический контент необходимо переслать с сервера приложений на Web-сервер, а затем Web-сервер будет передавать этот контент пользователю. Здесь нет необходимости использовать Web-сервер в качестве посредника.

Следовательно, чтобы улучшить производительность, переместите статический Web-контент на Web-сервер. Как альтернативу можно использовать кэширующий прокси-сервер, чтобы не доставлять каждый раз статические элементы с сервера приложений.

Lotus Connections распределяет свой статический контент как часть каждой функции (например, Profiles). В следующих подразделах объясняется, как переместить статический контент на Web-сервер для каждой функции Lotus Connections в случае, когда не используется кэширующий прокси-сервер. Предполагается, что сервер приложений и Web-сервер установлены на двух отдельных физических серверах. В противном случае нижеописанные шаги не приведут к сколько-нибудь значительному увеличению производительности.


Статический контент для функции Activities

Чтобы переместить статический контент для функции Activities с сервера приложений на Web-сервер, выполните следующие шаги:

  1. Войдите на Web-сервер под учетной записью администратора.
  2. Откройте каталог IBM HTTP Server DocumentRoot (например, /opt/IBMHttpServer/htdocs/en_US).
  3. Создайте каталог с именем activities.
  4. В этом новом каталоге создайте подкаталог с именем nav. Структура каталогов должна быть примерно такой:
    /opt/IBMHttpServer/htdocs/en_US/activities/nav
  5. Скопируйте каталоги images и templates с сервера приложений
    /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Activities.ear/sn-nav.war
    в папку /activities/nav, которую вы создали на шаге 4. Также скопируйте все HTML и GIF-файлы, находящиеся в каталоге sn-nav.war, как показано на рисунке 1.
Рисунок 1. Статический контент навигационной панели Activities, скопированный на Web-сервер
Статический контент навигационной панели Activities, скопированный на Web-сервер
  1. Откройте файл plugin-cfg.xml, обычно расположенный по адресу /<IHS_INSTALL_ROOT>/Plugins/config/webserver1.
  2. Найдите следующую строку:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/activities/nav/*"/>


    и замените её кодом из листинга 2.
Листинг 2. Элементы Plugin-cfg.xml, отвечающие за оптимизацию навигационной панели Activities
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/nav/header.js"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/nav/custom.css"/>
  1. Статические файлы для навигационной панели (navbar) Activities теперь скопированы на Web-сервер. Для остального статического контента Activities необходимо выполнить аналогичные шаги.
  2. Скопируйте следующие каталоги: activities_help, activities_help_old, images, images_old, javascript, javascript3, movie, rte и stylesheet с сервера приложений /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Activities.ear/oawebui.war в папку /activities, которую вы создали на шаге 4.
  3. Откройте файл plugin-cfg.xml, обычно расположенный по адресу /<IHS_INSTALL_ROOT>/Plugins/config/webserver1.
  4. Найдите следующую строку:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/activities/*"/>

    и замените её кодом из листинга 3.
Листинг 3. Элементы Plugin-cfg.xml, отвечающие за оптимизацию приложения Activities
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/j_security_check"/>

<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/*.jsp"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/auth/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/bookmarklets/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/email/*"/>
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/error/*"/>
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/firefox/*"/>
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/notesplugin/*"/>
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/templates/*"/>
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/service/*"/>

Теперь весь статический контент Activities скопирован на Web-сервер, как показано на рисунке 2. Плагин настроен на передачу серверу приложений только определённого трафика (например, *.jsp). Для других функций Lotus Connections требуется аналогичная процедура, что рассматривается в следующих разделах.

Рисунок 2. Статический контент Activities, скопированный на Web-сервер
Статический контент Activities, скопированный на Web-сервер

Статический контент для функции Blogs

Чтобы переместить статический контент для функции Blogs с сервера приложений на Web-сервер, выполните следующие шаги:

  1. Создайте каталог с именем blogs в корне документа Web-сервера.
  2. В этом новом каталоге создайте подкаталог с именем nav. Структура каталогов должна быть примерно такой: /opt/IBMHttpServer/htdocs/en_US/blogs/nav.
  3. Скопируйте каталоги images и templates с сервера приложений
    /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Blogs.ear/sn-nav.war
    в папку /blogs/nav, которую вы создали на шаге 2. Также скопируйте все HTML и GIF-файлы, находящиеся в каталоге sn-nav.war.
  4. Откройте файл plugin-cfg.xml, обычно расположенный по адресу /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 .
  5. Найдите следующую строку:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/blogs/nav/*"/>

    и замените её кодом из листинга 4.
Листинг 4. Элементы Plugin-cfg.xml, отвечающие за оптимизацию навигационной панели Blogs
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/nav/header.js"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/nav/custom.css"/>
  1. Скопируйте каталоги images, roller-ui, theme и themes с сервера приложений
    /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Blogs.ear/blogs.war
    в папку /blogs, которую вы создали на шаге 2. Кроме того, скопируйте файлы favicon.ico и robots.txt из каталога blogs.war.
  2. Откройте файл plugin-cfg.xml, обычно расположенный по адресу /<IHS_INSTALL_ROOT>/Plugins/config/webserver1.
  3. Найдите следующий код:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/blogs/*"/>

    и замените его кодом из листинга 5.
Листинг 5. Элементы Plugin-cfg.xml, отвечающие за оптимизацию приложения Blogs
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/j_security_check"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/home/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/services/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/*.jsp"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/*.do"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/comments/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/language/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/resources/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/rsd/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/flavor/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/rss/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/atom/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/page/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/search/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/xmlrpc/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/editor/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/admin/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/planetrss/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/*.jsp"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/authoring/preview/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/authoring/previewresource/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/authoring/thumbnail/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/authoring/userdata/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/blog/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/myblogs/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/rendering/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-services/*"/>

Статический контент для функции Communities

Чтобы переместить статический контент для функции Communities с сервера приложений на Web-сервер, выполните следующие шаги:

  1. Создайте каталог с именем communities в корне документа Web-сервера.
  2. В этом новом каталоге создайте подкаталог с именем nav. Структура каталогов должна быть примерно такой:
    /opt/IBMHttpServer/htdocs/en_US/communities/nav.
  3. Скопируйте каталоги images и templates с сервера приложений
    /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Communities.ear/sn-nav.war
    в папку /communities/nav, которую вы создали на шаге 2. Также скопируйте все HTML и GIF-файлы, находящиеся в каталоге sn-nav.war.
  4. Откройте файл plugin-cfg.xml, обычно расположенный по адресу /<IHS_INSTALL_ROOT>/Plugins/config/webserver1.
  5. Найдите следующую строку:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/communities/nav/*"/>

    и замените её кодом из листинга 6.
Листинг 6. Элементы Plugin-cfg.xml, отвечающие за оптимизацию навигационной панели Communities
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/communities/nav/header.js"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/nav/custom.css"/>
  1. Скопируйте каталоги help, images, javascript, movies, rte и stylesheets с сервера приложений
    /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Communities.ear/tango.web.ui.war
    в папку /communities, которую вы создали на шаге 2.
  2. Откройте файл plugin-cfg.xml, обычно расположенный по адресу /<IHS_INSTALL_ROOT>/Plugins/config/webserver1.
  3. Найдите следующую строку:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/communities/*"/>

    и замените её кодом из листинга 7.
Листинг 7. Элементы Plugin-cfg.xml, отвечающие за оптимизацию приложения Communities
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/j_security_check"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/*.jsp"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/*.do"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/service/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/javlin/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/xmlProxy/*"/>

Статический контент для функции Dogear

Чтобы переместить статический контент для функции Dogear с сервера приложений на Web-сервер, выполните следующие шаги:

  1. Создайте каталог с именем dogear в корне документа Web-сервера.
  2. В этом новом каталоге создайте подкаталог с именем nav. Структура каталогов должна быть примерно такой: /opt/IBMHttpServer/htdocs/en_US/dogear/nav.
  3. Скопируйте каталоги images и templates с сервера приложений
    /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Dogear.ear/sn-nav.war
    в папку /dogear/nav, которую вы создали на шаге 2. Также скопируйте все HTML и GIF-файлы, находящиеся в каталоге sn-nav.war.
  4. Откройте файл plugin-cfg.xml, обычно расположенный по адресу /<IHS_INSTALL_ROOT>/Plugins/config/webserver1.
  5. Найдите следующую строку:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/dogear/nav/*"/>

    и замените её кодом из листинга 8.
Листинг 8. Элементы Plugin-cfg.xml, отвечающие за оптимизацию навигационной панели Dogear
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/dogear/nav/header.js"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/dogear/nav/custom.css"/>
  1. Скопируйте каталоги favicon, h3, misc, rte, script, scriptaculous и tools с сервера приложений
    /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Dogear.ear/dogear.webui.war
    в папку /dogear, которую вы создали на шаге 2. Также скопируйте файл favicon.ico из папки dogear.webui.war.
  2. Откройте файл plugin-cfg.xml, обычно расположенный по адресу /<IHS_INSTALL_ROOT>/Plugins/config/webserver1.
  3. Найдите следующую строку:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/dogear/*"/>

    и замените её кодом из листинга 9.
Листинг 9. Элементы Plugin-cfg.xml, отвечающие за оптимизацию приложения Dogear
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/j_security_check"/> 
	  <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
	  Name="/dogear/auth/j_security_check"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/*.jsp"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/logout/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/post/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/delete/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/html/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tabtags/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tabpeople/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tabsubs/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/toolbox/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/about/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/help/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/linkroll/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/click/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/atom/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/atomclick/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/json/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/xbel/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/snippet/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/jsclick/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/lisnippet/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/api/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/export/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/count/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tagsets/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tags/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tagslike/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/peoplelike/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/favicon/*"/>

Статический контент для функции Profiles

Чтобы переместить статический контент для функции Profiles с сервера приложений на Web-сервер, выполните следующие шаги:

  1. Создайте каталог с именем profiles в корне документа Web-сервера.
  2. В этом новом каталоге создайте подкаталог с именем nav. Структура каталогов должна быть примерно такой: /opt/IBMHttpServer/htdocs/en_US/profiles/nav.
  3. Скопируйте каталоги images и templates с сервера приложений
    /opt/WAS/profiles/<profileName>/installedApps/<cellName>/peoplepages.ear/sn-nav.war
    в папку /profiles/nav, которую вы создали на шаге 2. Также скопируйте все HTML и GIF-файлы, находящиеся в каталоге sn-nav.war.
  4. Откройте файл plugin-cfg.xml, обычно расположенный по адресу /<IHS_INSTALL_ROOT>/Plugins/config/webserver1.
  5. Найдите следующую строку:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/profiles/nav/*"/>

    и замените её кодом из листинга 10.
Листинг 10. Элементы Plugin-cfg.xml, отвечающие за оптимизацию навигационной панели Profiles
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid"
 Name="/profiles/nav/header.js"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/nav/custom.css"/>
  1. Скопируйте каталоги css, demo_movie, help, images и javascript с сервера приложений
    /opt/WAS/profiles/<profileName>/installedApps/<cellName>/peoplepages.ear/peoplepages.war
    в папку /profiles, которую вы создали на шаге 2.
  2. Откройте файл plugin-cfg.xml, обычно расположенный по адресу /<IHS_INSTALL_ROOT>/Plugins/config/webserver1.
  3. Найдите следующую строку:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/profiles/*"/>

    и замените её кодом из листинга 11.
Листинг 11. Элементы Plugin-cfg.xml, отвечающие за оптимизацию приложения Profiles
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/j_security_check"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/*.jsp"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/*.do"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/html/*"/>

Оптимизация производительности WebSphere Application Server

Одним из наиболее сложных в настройке производительности компонентов инфраструктуры является сервер приложений. Каждая конкретная система используется по-разному, и каждой для достижения оптимальной производительности сервера требуются разные настройки. Обычно перед вводом в эксплуатацию рекомендуется провести тест на нагрузку, проверяющий работу продукта при конкретном наборе вариантов использования. Часто для мониторинга различных ресурсов (например, пула потоков, пула JDBC-соединений, использования памяти и т. д.) применяется IBM Tivoli Performance Viewer. После нескольких успешных прогонов сервер приложений считается настроенным.

Начиная с шестой версии WebSphere Application Server компонент Tivoli Performance Viewer встраивается в административную консоль сервера. Информацию по использованию Tivoli Performance Viewer см. в Информационном центре по WebSphere Application Server.

В этом разделе приведены некоторые основные рекомендации по достижению максимальной эффективности сервера приложений. Вы можете рассматривать эти рекомендации как отправную точку. В разделе Ресурсы приведены ссылки на документацию, написанную специально с целью помочь вам в настройке WebSphere Application Servers.

Использование памяти

Если вы запускаете все пять функций Lotus Connections на одном узле (то есть на одном физическом сервере), но на разных экземплярах сервера приложений, убедитесь, что каждому серверу приложений выделено достаточно памяти, иначе сервисы могут мешать друг другу. Например, на сервере с 4 ГБ оперативной памяти выделите максимум 512 МБ оперативной памяти на каждый сервис. Внутреннее тестирование показало, что при превышении этого значения производительность ухудшается, так как виртуальная машина Java (JVM) тратит большую часть времени на сборку мусора, а не на другие задачи.

Чтобы это сделать, зайдите в WebSphere Application Server Administrative Console (например, http://yourserver.acme.com:9060/ibm/console) и выберите Application Servers - <имя сервера> - Java and Process Management - Process Definition - Java Virtual Machine. Кроме того, чтобы избежать ненужной сборки мусора, введите в поля Initial Heap Size и Maximum Heap Size одинаковые значения, как показано на рисунке 3.

Рисунок 3. Настройки виртуальной машины Java для ActivitiesServer
Настройки виртуальной машины Java для ActivitiesServer

Выполните эти операции для каждого сервера приложений.

Пул соединений

Если вы замечаете, что приложение реагирует медленно, но при этом загрузка процессора низкая, возможно, приложению не хватает соединений для выполнения запроса к базе данных. По умолчанию максимальное количество соединений на базу данных равно 10. В зависимости от того, как используется развёрнутая вами система Lotus Connections, может потребоваться увеличение максимального количества соединений для конкретной функции.

Например, если вы ожидаете, что с определённой функцией будет одновременно работать большое число пользователей, необходимо изменить соответствующий источник данных JDBC, увеличив максимальное количество соединений. Начать можно с 30 максимальных соединений при нагрузке в 100 - 500 одновременно работающих пользователей. Если ожидается 1000 пользователей, этому параметру следует задать значение 50. Лучший способ установить, нужно ли менять это значение - прибегнуть к Tivoli Performance Viewer.

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

Для изменения этого значения войдите в WebSphere Application Server Administrative Console и выберите Resources - JDBC - Data Sources - <dsName> - Connection pool properties. См. рисунок 4.

Рисунок 4. Настройки пула JDBC-соединений для источника данных activities
Настройки пула JDBC-соединений для источника данных activities

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

Пул потоков

Если время отклика низкое, несмотря на невысокую загрузку процессора, возможно, у сервера недостаточно потоков для обработки входящих запросов. Если количество одновременно работающих пользователей большое (например, 2000), можно начать со значения 100 для максимального числа потоков. Это значение должно быть как минимум равно значению максимального размера пула JDBC-соединений. Чтобы задать размер пула потоков, войдите в WebSphere Application Server Administrative Console и выберите Application Servers - <имя сервера> - Thread Pools - Web Container.

Рисунок 5. Настройки пула потоков для Web-контейнера ActivitiesServer
Настройки пула потоков для Web-контейнера ActivitiesServer

Примечание: У Web-сервера также можно настраивать пул потоков, и настройки обоих серверов должны быть согласованы. В противном случае можно столкнуться с ситуацией, когда сервер приложений готов обрабатывать больше запросов, а у Web-сервера недостаточно потоков для пересылки трафика серверу приложений, или наоборот. В IBM HTTP Server этот параметр называется ThreadsPerChild и настраивается в файле httpd.conf.


Оптимизация производительности LDAP

Чтобы понять, какие факторы влияют на производительность вашего сервера LDAP, необходимо сначала разобраться, как Lotus Connections использует LDAP-сервер. Различные функции используют каталог LDAP для аутентификации пользователей и получения информации о них. Lotus Connections кэширует пользовательскую информацию локально, в соответствующей базе данных. Такая методика улучшает производительность, поскольку Lotus Connections не нужно поддерживать прямое соединение с LDAP-сервером при получении информации о пользователе, например его имени, фамилии и адреса электронной почты.

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

Индексирование атрибутов для импорта Profiles

Функция Profiles зависит от LDAP-сервера в большей степени, чем любая другая функция Lotus Connections. По умолчанию информация о пользователях периодически импортируется в базу данных Profiles с LDAP-сервера. Функция Profiles использует IBM Tivoli Directory Integrator Assembly Line, которая извлекает информацию о пользователе с LDAP-сервера с поисковым фильтром. Поисковый фильтр вводится в поисковый механизм LDAP и определяет предмет поиска.

Например, поисковый фильтр может выглядеть таким образом:

(&(ou=Americas)(objectclass=inetOrgPerson).

При наличии такого поискового фильтра Tivoli Directory Integrator осуществляет поиск по всем объектам в репозитории LDAP и возвращает те объекты, у которых имеются атрибуты ou=Americas и objectclass=inetOrgPerson. В этом случае важно, чтобы ваш репозиторий LDAP индексировался для атрибутов, указанных в поисковом фильтре. Поиск в LDAP выполняется гораздо медленней, если индекса для этих атрибутов не существует.

Более подробную информацию по настройке и созданию индексов для конкретных атрибутов вашего сервера LDAP можно найти в документации производителя.

Индексирование атрибутов для входа в систему

Ещё один важный атрибут для индексирования – учетные имена пользователей, в качестве которых обычно используются идентификаторы или адреса электронной почты. Индексирование этих атрибутов ускоряет процесс входа в систему.

Более подробную информацию по настройке и созданию индексов для конкретных атрибутов вашего сервера LDAP можно найти в документации производителя.


Оптимизация производительности базы данных

У каждой базы данных имеются весьма специфичные параметры настройки, зависящие от операционной системы, на которой запускается база данных. Вот несколько советов, о которых следует помнить при развёртывании баз данных Lotus Connections:

  • Пул соединений. Проследите, чтобы ваша база данных была способна обрабатывать количество соединений, указанных в пуле соединений источника данных. По умолчанию каждый источник данных настроен на использование максимум 10 соединений. Если все базы данных для всех функций расположены на сервере базы данных, убедитесь, что она может обрабатывать по меньшей мере 50 соединений.
  • Использование жёсткого диска. Кроме того, если для всех функций используется один и тот же сервер базы данных, возможно, есть смысл рассмотреть возможность развёртывания каждой базы данных на отдельном физическом жёстком диске.

В разделе Ресурсы приведены ссылки на документацию, написанную специально для настройки баз данных DB2 и Oracle.


Заключение

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

Ресурсы

Научиться

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Lotus
ArticleID=281329
ArticleTitle=Развёртывание IBM Lotus Connections: Настройка после установки
publish-date=01102008