НАСТРОЙКА И ОПТИМИЗАЦИЯ
J2EE ВЫСОКОНАГРУЖЕННЫХ ВЕБ-
ПРИЛОЖЕНИЙ НА ОСНОВАНИИ
ОПЫТА РАЗРАБОТКИ ПОРТАЛА
СБЕРБАНКА
Шамим Ахмед
Ведущий архитектор
AT Consulting
Настройка и оптимизация J2EE высоконагруженных веб-приложений на основании опыта
разработки портала Сбербанка
ПЛАН:
 Причины низкой производительности.
 Общие подходы и методология для оптимизации веб
приложения.
 Оптимизация Веб сервера.
 Оптимизация на стороне клиента.
 Оптимизация на стороне middleware, в том числе
сервер приложения.
 Оптимизация Базы Данных.
2
Настройка и оптимизация J2EE высоконагруженных веб-приложений на основании опыта
разработки портала Сбербанка
ОСОБЕННОСТИ ПОРТАЛА СБЕРБАНКА
 Быстрое внесение изменений в структуру портала,
добавление нового контента без установки релизов.
 Персонализация страницы для конечных пользователей.
 Таргетирование.
 Динамическое построение страниц портала в зависимости от
информации собранной о пользователе (таргетирование,
геолокация и др.).
 Единый портал с поддержкой всех устройств.
3
Настройка и оптимизация J2EE высоконагруженных веб-приложений на основании опыта
разработки портала Сбербанка
ПРИЧИНЫ НИЗКОЙ ПРОИЗВОДИТЕЛЬНОСТИ
 Священная война между контент-менеджерами,
маркетингом и эксплуатацией.
 Не достаточное понимание архитектуры своей системы.
 Технологические - узкие места производительности веб
сервера, сервер приложения и базы данных.
4
Общий проектный план
 Подготовка
к проекту
 Анализ
и разработка
Анализ текущей
ситуации
 Разработка
Разработка
рекомендаций
по оптимизации бизнес
процессов
 Консультации
 Презентация
результатов
7
1 3 5 7Этапы / Время, недели 2 4 6 8
Презентация
Фаза 1
Фаза 2
Фаза 2
9
Причина низкой производительности
ПРИМЕР СИСТЕМНЫХ ТРЕБОВАНИЙ
 Средняя численность активных пользователей > 25000.
 Максимальное TPS > 850.
 Средняя время загрузки страниц < 3 сек.
 Линейная масштабируемость системы.
 Отказоустойчивость.
 Доступность систем 24*7 (99,9%).
 Зашита от XSS и DDoS атак.
 Поддержка IE8 и Opera7.
8
Причина низкой производительности
КАК ЖЕ БЫТЬ В ТАКОЙ СИТУАЦИИ ?
 Дальновидение или one step further.
 Анализ и проектирование системных требования.
 Соглашение (coding convention, data convention).
 Автоматизированное тестирования (Browser acceptance,
Stress test).
9
Жизненный цикл разработки
10
Релиз в UAT Тестирование Верстка widget
Анализ и
подготовка ЧТЗ
Подготовка
дизайн макета
Разработка
widget
Разработка rest
сервиса
Заполнение контента
Причина низкой производительности
СВЯЩЕННАЯ ВОЙНА МЕЖДУ КОНТЕНТ-МЕНЕДЖЕРАМИ,
МАРКЕТИНГОМ И ЭКСПЛУАТАЦИЕЙ.
 Контент-менеджер: Больше usability для введения контента
 Маркетинг: Больше интерактивного контента
 Эксплуатация: Больше производительности портала
11
Причина низкой производительности
НЕ ДОСТАТОЧНОЕ ПОНИМАНИЕ АРХИТЕКТУРЫ
СВОЕЙ СИСТЕМЫ
12
Причина низкой производительности
АРХИТЕКТУРА ВЕБ ПРИЛОЖЕНИЯ
13
Настройка и оптимизация J2EE высоконагруженных веб-приложений на основании опыта
разработки портала Сбербанка
ОБЩИЕ ПОДХОДЫ И МЕТОДОЛОГИЯ ДЛЯ
ОПТИМИЗАЦИИ ВЕБ ПРИЛОЖЕНИЯ
 Определения основных факторов влияющие на
производительность.
 Кэширование всего, что возможно.
 Определение узких мест в ИС.
 Измерение производительности.
15
Общие подходы и методологию для оптимизации веб приложения
ОСНОВНЫЕ ФАКТОРЫ ВЛИЯЮЩИЕ НА
ПРОИЗВОДИТЕЛЬНОСТИ
16
- Время рендеринг страницы в браузер.
- Объём контента в странице.
- Расстояние дата центра от пользователя.
- Количества вызовов для каждой страницы.
T - Технологические или системные узкие места
Общие подходы и методологию для оптимизации веб приложения
КЭШИРОВАНИЕ ВСЕГО, ЧТО ВОЗМОЖНО
 Агрессивная политика кэширования.
 Виды кэширования:
 Кэширование статических ресурсов (js, css) в веб сервер через etag и cache control.
 Кэширование статические блоки в страницах при помощью SCSI.
 Кэширование результата запроса из БД на сервере приложения.
 Кэширование результата идемпотентных методов на сервере приложения.
 Кэширование ресурсов на контент серверах.
 Кэширование результат SQL запроса в БД.
17
Общие подходы и методологию для оптимизации веб приложения
УРОВЕНЬ КЭШИРОВАНИЯ НА ПОРТАЛЕ
СБЕРБАНКА
18
Кэширование статических ресурсов в Nginx
Кэширование шаблонов страницы для портала
Кэширование результатов вызова backend сервиса
Кэширование статических ресурсов на контент сервере
Кэширование hibernate l2
Кэширование таблицы и результатов SQL запроса в БД
Общие подходы и методологию для оптимизации веб приложения
ОПРЕДЕЛЕНИЕ УЗКИХ МЕСТ В ИС
 Путем мониторинга системы.
 Симптомы узких мест:
 Повышенное время отклика от сервера.
 Ошибки http (4хх, 5хх).
 Высокая загрузка ЦП.
 Много открытых соединений.
 Утечки памяти.
 Узкие места в ИС может быть в:
 Веб серверах.
 Сервере приложения.
 Сервере базы данных.
 Ширине канала связи.
19
Общие подходы и методологию для оптимизации веб приложения
ИЗМЕРЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ
 Микро бенчмаркинг Java скрипт кода
 Микро бенчмаркинг rest сервисов, в т.ч. Java методов.
 Смотреть(мониторинг) execution plan sql запросов.
 Вычисление количества read/write операций в БД на каждый
http запрос.
 LOAD TEST, Test Early, Test Often.
20
Общие подходы и методологию для оптимизации веб приложения
ЗАКЛЮЧЕНИЯ:
 Анализируем и проектируем системных требования.
 Обращаем внимание на симптомы узких мест в архитектуре
веб приложения.
 Включаем агрессивное кэширования на всех уровнях.
 Чаще запускаем load test.
21
Настройка и оптимизация J2EE высоконагруженных веб-приложений на основании опыта
разработки портала Сбербанка
ОПТИМИЗАЦИЯ ВЕБ СЕРВЕРА
 Архитектурные решения:
1. Балансировка DNS
2. Использование CDN
3. Использование под домена для статических ресурсов
4. SSI для предоставления статических ресурсов
5. Предоставление всех статических ресурсов из RAM DISK
 Настройки NGINX:
1. Compress все ресурсы таких как js, html, css, img. Compress level 5-7 - оптимально
2. Предоставлять уже заранее сжатые файлы, позволяет быстро отдавать файлы и
также уменьшает нагрузку CPU на сервере nginx.
3. Использовать дистрибутивный кэш (Кэш кластера) если несколько веб серверов
находится на одном кластере
4. Конфигурация worker процесс зависит от количества CPU
22
Оптимизация веб сервера
АРХИТЕКТУРНЫЕ РЕШЕНИЯ
1. Балансировка DNS
23
Оптимизация веб сервера
АРХИТЕКТУРНЫЕ РЕШЕНИЯ
1. Балансировка DNS
2. Использование CDN
24
Оптимизация веб сервера
АРХИТЕКТУРНЫЕ РЕШЕНИЯ
1. Балансировка DNS
2. Использование CDN
3. Использование под домен для статических ресурсов
25
Оптимизация веб сервера
АРХИТЕКТУРНЫЕ РЕШЕНИЯ
1. Балансировка DNS
2. Использование CDN
3. Использование под домена для статических ресурсов (продолжение)
26
Оптимизация веб сервера
АРХИТЕКТУРНЫЕ РЕШЕНИЯ
1. Балансировка DNS
2. Использование CDN
3. Использование под домен для статических ресурсов (продолжение)
4. SSI для предоставления статических ресурсов
27
Оптимизация веб сервера
АРХИТЕКТУРНЫЕ РЕШЕНИЯ
SSI для предоставления статических ресурсов (продолжение)
28
Оптимизация веб сервера
АРХИТЕКТУРНЫЕ РЕШЕНИЯ
1. Балансировка DNS
2. Использование CDN
3. Использование под домен для статических ресурсов (продолжение)
4. SSI для предоставления статических ресурсов
5. Предоставление всех статических ресурсов из RAM DISK
RamDisk – это ПО, которое занимает часть ОЗУ сервера и использует его как
дисковой носитель. Позволяет уменьшать дисковые операции и предоставляет
быстрый доступ к ресурсам.
Альтернатив: SSD, memcache
29
Оптимизация веб сервера
НАСТРОЙКИ NGINX
1. Сжатие Gzip
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types image/svg+xml text/plain text/css application/json application/x-javascript text/xml
application/xml application/xml+rss text/javascript text/json application/javascript;
2. Доставка заранее сжатых gzip файлов
Уменьшает нагрузки на CPU
Увеличивает производительности
компиляции nginx с параметром --with-http_gzip_static_module
Включить параметр gzip_static on;
location ~ ^/(assets|images|javascripts|stylesheets|swfs|system)/
{
gzip_static on;
}
30
Оптимизация веб сервера
НАСТРОЙКИ NGINX (ПРОДОЛЖЕНИЕ)
3. Обработка соединений
Всего соединений = worker_processes x worker_connections
worker_processes auto;
# Определяет количество рабочих процессов. Его лучше устанавливать в auto в новых версиях.
# worker_processes = CPU core тоесть worker_processes = 4
worker_connections 1024;
# Устанавливает максимальное количество соединений одного рабочего процесса. Следует выбирать
значения от 1024 до 4096.
4. Обработка клиентов
Keepalive соединения позволяют избежать необходимости повторного создания
соединения между клиентом и сервером.
keepalive_timeout 30;
# Будет ждать 30 секунд перед закрытием keepalive соединения
keepalive_requests 100;
# Максимальное количество keepalive запросов от одного клиента
Если для страницы количества запросов большее 100, тогда следует увеличит оба эти
параметры, хотя бы во время load test
31
Оптимизация веб сервера
НАСТРОЙКИ NGINX (ПРОДОЛЖЕНИЕ)
5. Настройка операционной системы
6. Конфигурация cache control
32
Количество одновременно открытых файлов в OS:
Файл /etc/security/limits.conf.
* soft nofile 65535
* hard nofile 65535
Команда:
# ulimit –n 65535
Настройка стека:
# ulimit –s 256
location ~ ^/portalserver/static/sb-bundle/widgets/(.+)/css/(.+)(.css)$ {
expires 3h;
add_header 'Access-Control-Allow-Origin' '*’;
modern_browser unlisted;
ancient_browser "MSIE 6.0" "MSIE 7.0" "MSIE 8.0”;
if ($ancient_browser) {
rewrite ^/portalserver/static/sb-bundle/widgets/(.+)/css/(.+)(.css)$ /$2- ie8.css break;
root /mnt/ramdisk/static/sb-bundle/widgets/$1/css/;
} }
Оптимизация веб сервера
НАСТРОЙКИ NGINX (ПРОДОЛЖЕНИЕ)
5. Конфигурация cache control
33
Оптимизация веб сервера
НАСТРОЙКИ NGINX (ПРОДОЛЖЕНИЕ)
5. Конфигурация cache control
34
Оптимизация веб сервера
НАСТРОЙКИ NGINX (ПРОДОЛЖЕНИЕ)
6. Логирование
7. Прочее настройки
35
access_log off;
error_log /var/log/nginx/error.log crit;
#Информация о файлах
#nginx может кэшировать мета данных файлов
open_file_cache max=200000 inactive=20s;
#Если к таким файлам происходит много обращений,
кеширование может значительно ускорить этот процесс.
open_file_cache_valid 30s;
# Определяет через какое время информация будет удалена из
кеша
open_file_cache_min_uses 2;
# Будет кешировать информацию о тех файлах, которые были
использованы хотя бы 2 раза
Кофе-брейк
36
Перерыв на кофе 15 минут
Настройка и оптимизация J2EE высоконагруженных веб-приложений на основании опыта
разработки портала Сбербанка
ОПТИМИЗАЦИЯ НА СТОРОНЕ КЛИЕНТА
 Уменьшить запрос к серверу
 Уменьшить размер страницы
37
Оптимизация на стороне клиента
 Гибридный подход для рендеринга страницы.
1. Часть widget рендерить в браузере и часть в backend (JSP)
2. Поисковой движок плохо сканирует страницы на client side rendering
3. Гибридный подход уменьшает нагрузки на browser
 Lazy loading вызов сервисов из widget.
 Client Side должен заниматься только отображением
данных.
1. Избежать лишних сортировок или фильтраций данных на сервере.
 Уменьшение загрузки не нужных js библиотека в
landing page.
38
Оптимизация на стороне клиента
 Не вызвать rest сервис с параметром current date
time, результат такого запроса не кэшируется.
 Избавится от микро атомарных вызов сервисов,
использовать монолит сервис для получения всех
данных для одного widget.
 Не использовать post запрос, так как результат не
кэшируется – если использование post запроса
обязательно, то формируйте хэш от запроса и
передавать в параметре запроса.
 Minify js и css скриптов.
39
Оптимизация на стороне клиента
 Склеивайте js и css.
 CSS спрайты.
 Группируйте js и css файлов в разных файлах зависит
от группы страниц.
 Используйте асинхронную загрузку JS и CSS.
 Оптимизиция изображения.
40
Оптимизация на стороне клиента
ОПТИМИЗАЦИЯ ИЗОБРАЖЕНИЯ
 Примерно 70% объем страницы занимает изображения.
41
Оптимизация на стороне клиента
ОПТИМИЗАЦИЯ ИЗОБРАЖЕНИЯ
 Формат фотографией:
 JPEG - уменьшение качества путем уменьшения детализации изображения.
 WebP - разработанный специально для обслуживания изображений в Web’e,
значительно лучше сжимает фотки, чем JPEG.
 PNG и GIF - PNG изображения сохраняются без потери качества и лучше всего
подойдут для иконок и графики. Формат GIF имеет ограниченную палитру, однако
поддерживает анимацию.
42
Оптимизация на стороне клиента
ОПТИМИЗАЦИЯ ИЗОБРАЖЕНИЯ
 Удалить все метаданные. Иногда объем такой инфы может
составлять больше половины веса самого изображения.
 Инструменты:
 ImageMagick.
 GraphicsMagick.
 Jpegtran.
 Cwebp - Утилита позволяет преобразовать изображение в формат Webp.
43
Оптимизация на стороне клиента
ОПТИМИЗАЦИЯ ИЗОБРАЖЕНИЯ
 Поддержка WebP формата:
 Создаем версии каждого изображения для формата webp.
 Определяем версия браузера посетителя и раздаем изображения.
44
Оптимизация на стороне клиента
ИНСТРУМЕНТЫ
 Google speed test
 Pingdom
 http://www.webpagetest.org/
 Jmeter
 HP Load runner
45
Настройка и оптимизация J2EE высоконагруженных веб-приложений на основании опыта
разработки портала Сбербанка
ОПТИМИЗАЦИЯ НА MIDDLEWARE
 Особое внимания при проектирование rest сервиса:
 Rest сервисы будут доступно из internet
 Единый дата сервис для получения данных из всех справочников
через параметр rest сервиса не лучший вариант.
 Каждый rest сервис должен проверять входные параметры на null,
если все параметры с значениям null не возвращаем данных.
 http://beta.sberbank.ru/portalserver/content/atom/contentRepository/qu
ery?q=SELECT+*+FROM+cmis%3Afolder&searchAllVersions=false&include
AllowableActions=false&includeRelationships=none&maxItems=1000&ski
pCount=0 -- НЕ ДОПУСТИМА
46
Оптимизация на Middleware
 Предоставлять обертку монолит сервисов.
 Ограничивать данные через pagination.
 Сервис должен сортировать и фильтровать данные
для client side, а не наоборот.
 Применять дистрибутивный кэш (ehcache, memcahce
а также hazelcast) для хранения результата запроса из
БД.
47
Оптимизация на Middleware
 Кэшировать результат вызова идемпотентных
сервисов.
 Пользуйтесь CPU L1-L3 cache эффективно.
 Пользуйтесь offheap ОЗУ если массивы данных
большие.
 Пользуйтесь высоко производительный Stax или
VTDXML на месте DOM или SAX.
48
Оптимизация на Middleware
 Применяйте единый framework для логирования или
SL4j фасад.
 Пользуйтесь профилированием для выявления и
устранения блокировки.
 Увеличивайте время сканирования изменения на
log4j2 или logback.xml.
 Конфигурируйте сервер приложения.
49
Оптимизация на Middleware
КОНФИГУРАЦИЯ СЕРВЕР ПРИЛОЖЕНИЯ
 Настройка Http Session
 Настройка Thread pool
 Настройка JDBC Connection pool
 Настройка Java Heap и GC
50
Оптимизация на Middleware
НАСТРОЙКА HTTP SESSION
 Включить cookie.
 Максимальное количество сессий в памяти.
 Session Timeout.
51
Оптимизация на Middleware
НАСТРОЙКА THREAD POOL
 Настройка WebContainer.
 Min и Max Size.
52
Оптимизация на Middleware
КЛЮЧЕВЫЕ МОМЕНТЫ ПРИ НАСТРОЙКЕ
THREAD POOL
 Правило “большее- лучшее” здесь не уместно, потоки
требуют памяти и системных ресурсов.
 Среднее количество потоков = максимальное количество
RPS/количество серверов, threads = 850/16~54.
53
Оптимизация на Middleware
НАСТРОЙКА JDBC CONNECTION POOL
 Одна из важнейших настроек сервера приложения.
 Производительность сильно зависит от данной настройки.
54
Оптимизация на Middleware
НАСТРОЙКА JDBC CONNECTION POOL
 Connection timeout: интервал времени до которого
соединение остается активным.
 Min и Max Connection: Минимальное и максимальное число
соединения в пул.
Max connection * max number of Node in cluster < max connection in DB
 Unused timeout: Максимальное время, в течение
которого не использующееся соединение может
оставаться в пуле.
 Purge policy: всегда оставляем EntirePool, при
возникновении ошибки в соединении весь пул
очищается, это позволяет избавится от неожиданных
ошибок.
55
Оптимизация на Middleware
НАСТРОЙКА JDBC CONNECTION POOL (STUCK)
 Stuck connection: Застрявшие соединение является активным
соединением, которое не отвечает или не возвращался
обратно в пул соединений.
56
Оптимизация на Middleware
НАСТРОЙКА JDBC CONNECTION POOL (STUCK)
 Stuck time interval: Интервал времени, определяет как часто
необходимо проверять stuck соединения.
 Stuck time: если соединение ожидает ответа более 240 сек,
она считается зависшим.
 Stuck threshold: пороговое значения, после которого весь пул
соединения считается зависшим.
57
Оптимизация на Middleware
НАСТРОЙКА JAVA HEAP И GC ПОЛИТИКА
 ONE SIZE DOESN’T FIT ALL.
 Выделить 50% физической оперативной памяти на Java Heap
Size.
 Initial Heap size = Maximum heap size, на пример Xms=16G;
Xmx=16G.
 garbage collection policy :
- gencon
- optthruput
- optavgpause
- subpool
58
Оптимизация на Middleware
ОТКЛЮЧИТЬ НЕНУЖНЫЕ КОМПОНЕНТЫ ИЗ
СЕРВЕР ПРИЛОЖЕНИЯ
 JMS.
 JMX.
 OSGI.
 CDI или ejb3.
 Mail.
59
Оптимизация на MiddleWare
ИНСТРУМЕНТЫ
 Netbeans profiler
 Yourkit
 VisualVM
 JITWatch
 IBM performance monitoring
60
Настройка и оптимизация J2EE высоконагруженных веб-приложений на основании опыта
разработки портала Сбербанка
ОПТИМИЗАЦИЯ БАЗЫ ДАННЫХ
 Выделить справочники для кэширования, например
сущность «Регион» - хороший кандидат для кэширования.
 Настройка Result Cache.
61
sql> show user;
USER is SYS
sql> show parameter result;
NAME TYPE VALUE
-------------------------------------- ----------- ------------------------------
client_result_cache_lag big integer 3000
client_result_cache_size big integer 0
result_cache_max_result integer 5
result_cache_max_size big integer 6560K
result_cache_mode string MANUAL
result_cache_remote_expiration integer 0
Оптимизация Базы данных
 result_cache_max_size: объем памяти, резервируемой для результирующего
набора кэша. По документации Oracle, значение этого параметра не должно
превысить 75% из общего размера shared pool. Рекомендуется выделить 50% памяти
из общего Shared pool.
 result_cache_max_result: параметр указывает, какой процент
result_cache_max_size может использовать один результат запроса. По умолчанию
значение равно 5%.
62
sql> alter system set result_cache_max_size=1024M;
sql> show parameter result;
NAME TYPE VALUE
-------------------------------------- ----------- ------------------------------
client_result_cache_lag big integer 3000
client_result_cache_size big integer 0
result_cache_max_result integer 5
result_cache_max_size big integer 1024M
result_cache_mode string MANUAL
result_cache_remote_expiration integer 0
Оптимизация Базы данных
 alter table TABLE_NAME RESULT_CACHE(MODE FORCE): результат
запроса кэшируется в shared pool, LRU.
 alter table TABLE_NAME cache: кэширует данные таблицы в общем
буферном кэше и не гарантирует что кэш может долго остаться не изменим. Если
появиться новые кэшированные данные система может переписать данную кэш.
 Alter table emp storage (buffer_pool Keep) : кэширует таблицу в пул
буфера и сохраняет дольшее всех
63Результат без кэширования
Оптимизация Базы данных
 Результат после использования alter table TABLE_NAME
RESULT_CACHE(MODE FORCE)
64
Оптимизация Базы данных
ORACLE DATABASE CHANGE NOTIFICATION
 Получить уведомление об DML и DDL операции в объектах
базы данных.
http://docs.oracle.com/cd/E11882_01/java.112/e16548/dbchgn
f.htm#JJDBC28815
 Доступно с релиза 11g
 Хорошо подходит для очистка и обновления result query
cache в middleware.
 Пример использования
http://frommyworkshop.blogspot.ru/2011/01/clearing-
hazelcast-data-grid-cache-with.html
65
Настройка и оптимизация J2EE высоконагруженных веб-приложений на основании опыта
разработки портала Сбербанка
ЗАКЛЮЧЕНИЯ
 При проектирование ИС, необходимо учитывать системные
требования.
 Необходимо мониторит ИС и анализировать симптомы на
низкие производительности.
 При необходимости оптимизировать следующие
прикладные ПО:
 Веб сервер.
 Сервер приложения.
 Клиентская часть.
 Базы данных.
66
67
Обратная связь
bsha@at-consulting.ru
Blog: http://www.frommyworkshop.blogspot.ru
68
Reference
 http://habrahabr.ru/post/95613/ настройка SSI
 http://frommyworkshop.blogspot.ru
 http://www.ruhighload.com
 Google speed test
 http://www.redbooks.ibm.com/abstracts/sg247347.html
 http://habrahabr.ru/company/io/blog/257533/
69
Вопросы
Спасибо

Tuning HighLoad J2EE web application

  • 1.
    НАСТРОЙКА И ОПТИМИЗАЦИЯ J2EEВЫСОКОНАГРУЖЕННЫХ ВЕБ- ПРИЛОЖЕНИЙ НА ОСНОВАНИИ ОПЫТА РАЗРАБОТКИ ПОРТАЛА СБЕРБАНКА Шамим Ахмед Ведущий архитектор AT Consulting
  • 2.
    Настройка и оптимизацияJ2EE высоконагруженных веб-приложений на основании опыта разработки портала Сбербанка ПЛАН:  Причины низкой производительности.  Общие подходы и методология для оптимизации веб приложения.  Оптимизация Веб сервера.  Оптимизация на стороне клиента.  Оптимизация на стороне middleware, в том числе сервер приложения.  Оптимизация Базы Данных. 2
  • 3.
    Настройка и оптимизацияJ2EE высоконагруженных веб-приложений на основании опыта разработки портала Сбербанка ОСОБЕННОСТИ ПОРТАЛА СБЕРБАНКА  Быстрое внесение изменений в структуру портала, добавление нового контента без установки релизов.  Персонализация страницы для конечных пользователей.  Таргетирование.  Динамическое построение страниц портала в зависимости от информации собранной о пользователе (таргетирование, геолокация и др.).  Единый портал с поддержкой всех устройств. 3
  • 4.
    Настройка и оптимизацияJ2EE высоконагруженных веб-приложений на основании опыта разработки портала Сбербанка ПРИЧИНЫ НИЗКОЙ ПРОИЗВОДИТЕЛЬНОСТИ  Священная война между контент-менеджерами, маркетингом и эксплуатацией.  Не достаточное понимание архитектуры своей системы.  Технологические - узкие места производительности веб сервера, сервер приложения и базы данных. 4
  • 5.
    Общий проектный план Подготовка к проекту  Анализ и разработка Анализ текущей ситуации  Разработка Разработка рекомендаций по оптимизации бизнес процессов  Консультации  Презентация результатов 7 1 3 5 7Этапы / Время, недели 2 4 6 8 Презентация Фаза 1 Фаза 2 Фаза 2 9
  • 6.
    Причина низкой производительности ПРИМЕРСИСТЕМНЫХ ТРЕБОВАНИЙ  Средняя численность активных пользователей > 25000.  Максимальное TPS > 850.  Средняя время загрузки страниц < 3 сек.  Линейная масштабируемость системы.  Отказоустойчивость.  Доступность систем 24*7 (99,9%).  Зашита от XSS и DDoS атак.  Поддержка IE8 и Opera7. 8
  • 7.
    Причина низкой производительности КАКЖЕ БЫТЬ В ТАКОЙ СИТУАЦИИ ?  Дальновидение или one step further.  Анализ и проектирование системных требования.  Соглашение (coding convention, data convention).  Автоматизированное тестирования (Browser acceptance, Stress test). 9
  • 8.
    Жизненный цикл разработки 10 Релизв UAT Тестирование Верстка widget Анализ и подготовка ЧТЗ Подготовка дизайн макета Разработка widget Разработка rest сервиса Заполнение контента
  • 9.
    Причина низкой производительности СВЯЩЕННАЯВОЙНА МЕЖДУ КОНТЕНТ-МЕНЕДЖЕРАМИ, МАРКЕТИНГОМ И ЭКСПЛУАТАЦИЕЙ.  Контент-менеджер: Больше usability для введения контента  Маркетинг: Больше интерактивного контента  Эксплуатация: Больше производительности портала 11
  • 10.
    Причина низкой производительности НЕДОСТАТОЧНОЕ ПОНИМАНИЕ АРХИТЕКТУРЫ СВОЕЙ СИСТЕМЫ 12
  • 11.
  • 12.
    Настройка и оптимизацияJ2EE высоконагруженных веб-приложений на основании опыта разработки портала Сбербанка ОБЩИЕ ПОДХОДЫ И МЕТОДОЛОГИЯ ДЛЯ ОПТИМИЗАЦИИ ВЕБ ПРИЛОЖЕНИЯ  Определения основных факторов влияющие на производительность.  Кэширование всего, что возможно.  Определение узких мест в ИС.  Измерение производительности. 15
  • 13.
    Общие подходы иметодологию для оптимизации веб приложения ОСНОВНЫЕ ФАКТОРЫ ВЛИЯЮЩИЕ НА ПРОИЗВОДИТЕЛЬНОСТИ 16 - Время рендеринг страницы в браузер. - Объём контента в странице. - Расстояние дата центра от пользователя. - Количества вызовов для каждой страницы. T - Технологические или системные узкие места
  • 14.
    Общие подходы иметодологию для оптимизации веб приложения КЭШИРОВАНИЕ ВСЕГО, ЧТО ВОЗМОЖНО  Агрессивная политика кэширования.  Виды кэширования:  Кэширование статических ресурсов (js, css) в веб сервер через etag и cache control.  Кэширование статические блоки в страницах при помощью SCSI.  Кэширование результата запроса из БД на сервере приложения.  Кэширование результата идемпотентных методов на сервере приложения.  Кэширование ресурсов на контент серверах.  Кэширование результат SQL запроса в БД. 17
  • 15.
    Общие подходы иметодологию для оптимизации веб приложения УРОВЕНЬ КЭШИРОВАНИЯ НА ПОРТАЛЕ СБЕРБАНКА 18 Кэширование статических ресурсов в Nginx Кэширование шаблонов страницы для портала Кэширование результатов вызова backend сервиса Кэширование статических ресурсов на контент сервере Кэширование hibernate l2 Кэширование таблицы и результатов SQL запроса в БД
  • 16.
    Общие подходы иметодологию для оптимизации веб приложения ОПРЕДЕЛЕНИЕ УЗКИХ МЕСТ В ИС  Путем мониторинга системы.  Симптомы узких мест:  Повышенное время отклика от сервера.  Ошибки http (4хх, 5хх).  Высокая загрузка ЦП.  Много открытых соединений.  Утечки памяти.  Узкие места в ИС может быть в:  Веб серверах.  Сервере приложения.  Сервере базы данных.  Ширине канала связи. 19
  • 17.
    Общие подходы иметодологию для оптимизации веб приложения ИЗМЕРЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ  Микро бенчмаркинг Java скрипт кода  Микро бенчмаркинг rest сервисов, в т.ч. Java методов.  Смотреть(мониторинг) execution plan sql запросов.  Вычисление количества read/write операций в БД на каждый http запрос.  LOAD TEST, Test Early, Test Often. 20
  • 18.
    Общие подходы иметодологию для оптимизации веб приложения ЗАКЛЮЧЕНИЯ:  Анализируем и проектируем системных требования.  Обращаем внимание на симптомы узких мест в архитектуре веб приложения.  Включаем агрессивное кэширования на всех уровнях.  Чаще запускаем load test. 21
  • 19.
    Настройка и оптимизацияJ2EE высоконагруженных веб-приложений на основании опыта разработки портала Сбербанка ОПТИМИЗАЦИЯ ВЕБ СЕРВЕРА  Архитектурные решения: 1. Балансировка DNS 2. Использование CDN 3. Использование под домена для статических ресурсов 4. SSI для предоставления статических ресурсов 5. Предоставление всех статических ресурсов из RAM DISK  Настройки NGINX: 1. Compress все ресурсы таких как js, html, css, img. Compress level 5-7 - оптимально 2. Предоставлять уже заранее сжатые файлы, позволяет быстро отдавать файлы и также уменьшает нагрузку CPU на сервере nginx. 3. Использовать дистрибутивный кэш (Кэш кластера) если несколько веб серверов находится на одном кластере 4. Конфигурация worker процесс зависит от количества CPU 22
  • 20.
    Оптимизация веб сервера АРХИТЕКТУРНЫЕРЕШЕНИЯ 1. Балансировка DNS 23
  • 21.
    Оптимизация веб сервера АРХИТЕКТУРНЫЕРЕШЕНИЯ 1. Балансировка DNS 2. Использование CDN 24
  • 22.
    Оптимизация веб сервера АРХИТЕКТУРНЫЕРЕШЕНИЯ 1. Балансировка DNS 2. Использование CDN 3. Использование под домен для статических ресурсов 25
  • 23.
    Оптимизация веб сервера АРХИТЕКТУРНЫЕРЕШЕНИЯ 1. Балансировка DNS 2. Использование CDN 3. Использование под домена для статических ресурсов (продолжение) 26
  • 24.
    Оптимизация веб сервера АРХИТЕКТУРНЫЕРЕШЕНИЯ 1. Балансировка DNS 2. Использование CDN 3. Использование под домен для статических ресурсов (продолжение) 4. SSI для предоставления статических ресурсов 27
  • 25.
    Оптимизация веб сервера АРХИТЕКТУРНЫЕРЕШЕНИЯ SSI для предоставления статических ресурсов (продолжение) 28
  • 26.
    Оптимизация веб сервера АРХИТЕКТУРНЫЕРЕШЕНИЯ 1. Балансировка DNS 2. Использование CDN 3. Использование под домен для статических ресурсов (продолжение) 4. SSI для предоставления статических ресурсов 5. Предоставление всех статических ресурсов из RAM DISK RamDisk – это ПО, которое занимает часть ОЗУ сервера и использует его как дисковой носитель. Позволяет уменьшать дисковые операции и предоставляет быстрый доступ к ресурсам. Альтернатив: SSD, memcache 29
  • 27.
    Оптимизация веб сервера НАСТРОЙКИNGINX 1. Сжатие Gzip gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types image/svg+xml text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript text/json application/javascript; 2. Доставка заранее сжатых gzip файлов Уменьшает нагрузки на CPU Увеличивает производительности компиляции nginx с параметром --with-http_gzip_static_module Включить параметр gzip_static on; location ~ ^/(assets|images|javascripts|stylesheets|swfs|system)/ { gzip_static on; } 30
  • 28.
    Оптимизация веб сервера НАСТРОЙКИNGINX (ПРОДОЛЖЕНИЕ) 3. Обработка соединений Всего соединений = worker_processes x worker_connections worker_processes auto; # Определяет количество рабочих процессов. Его лучше устанавливать в auto в новых версиях. # worker_processes = CPU core тоесть worker_processes = 4 worker_connections 1024; # Устанавливает максимальное количество соединений одного рабочего процесса. Следует выбирать значения от 1024 до 4096. 4. Обработка клиентов Keepalive соединения позволяют избежать необходимости повторного создания соединения между клиентом и сервером. keepalive_timeout 30; # Будет ждать 30 секунд перед закрытием keepalive соединения keepalive_requests 100; # Максимальное количество keepalive запросов от одного клиента Если для страницы количества запросов большее 100, тогда следует увеличит оба эти параметры, хотя бы во время load test 31
  • 29.
    Оптимизация веб сервера НАСТРОЙКИNGINX (ПРОДОЛЖЕНИЕ) 5. Настройка операционной системы 6. Конфигурация cache control 32 Количество одновременно открытых файлов в OS: Файл /etc/security/limits.conf. * soft nofile 65535 * hard nofile 65535 Команда: # ulimit –n 65535 Настройка стека: # ulimit –s 256 location ~ ^/portalserver/static/sb-bundle/widgets/(.+)/css/(.+)(.css)$ { expires 3h; add_header 'Access-Control-Allow-Origin' '*’; modern_browser unlisted; ancient_browser "MSIE 6.0" "MSIE 7.0" "MSIE 8.0”; if ($ancient_browser) { rewrite ^/portalserver/static/sb-bundle/widgets/(.+)/css/(.+)(.css)$ /$2- ie8.css break; root /mnt/ramdisk/static/sb-bundle/widgets/$1/css/; } }
  • 30.
    Оптимизация веб сервера НАСТРОЙКИNGINX (ПРОДОЛЖЕНИЕ) 5. Конфигурация cache control 33
  • 31.
    Оптимизация веб сервера НАСТРОЙКИNGINX (ПРОДОЛЖЕНИЕ) 5. Конфигурация cache control 34
  • 32.
    Оптимизация веб сервера НАСТРОЙКИNGINX (ПРОДОЛЖЕНИЕ) 6. Логирование 7. Прочее настройки 35 access_log off; error_log /var/log/nginx/error.log crit; #Информация о файлах #nginx может кэшировать мета данных файлов open_file_cache max=200000 inactive=20s; #Если к таким файлам происходит много обращений, кеширование может значительно ускорить этот процесс. open_file_cache_valid 30s; # Определяет через какое время информация будет удалена из кеша open_file_cache_min_uses 2; # Будет кешировать информацию о тех файлах, которые были использованы хотя бы 2 раза
  • 33.
  • 34.
    Настройка и оптимизацияJ2EE высоконагруженных веб-приложений на основании опыта разработки портала Сбербанка ОПТИМИЗАЦИЯ НА СТОРОНЕ КЛИЕНТА  Уменьшить запрос к серверу  Уменьшить размер страницы 37
  • 35.
    Оптимизация на сторонеклиента  Гибридный подход для рендеринга страницы. 1. Часть widget рендерить в браузере и часть в backend (JSP) 2. Поисковой движок плохо сканирует страницы на client side rendering 3. Гибридный подход уменьшает нагрузки на browser  Lazy loading вызов сервисов из widget.  Client Side должен заниматься только отображением данных. 1. Избежать лишних сортировок или фильтраций данных на сервере.  Уменьшение загрузки не нужных js библиотека в landing page. 38
  • 36.
    Оптимизация на сторонеклиента  Не вызвать rest сервис с параметром current date time, результат такого запроса не кэшируется.  Избавится от микро атомарных вызов сервисов, использовать монолит сервис для получения всех данных для одного widget.  Не использовать post запрос, так как результат не кэшируется – если использование post запроса обязательно, то формируйте хэш от запроса и передавать в параметре запроса.  Minify js и css скриптов. 39
  • 37.
    Оптимизация на сторонеклиента  Склеивайте js и css.  CSS спрайты.  Группируйте js и css файлов в разных файлах зависит от группы страниц.  Используйте асинхронную загрузку JS и CSS.  Оптимизиция изображения. 40
  • 38.
    Оптимизация на сторонеклиента ОПТИМИЗАЦИЯ ИЗОБРАЖЕНИЯ  Примерно 70% объем страницы занимает изображения. 41
  • 39.
    Оптимизация на сторонеклиента ОПТИМИЗАЦИЯ ИЗОБРАЖЕНИЯ  Формат фотографией:  JPEG - уменьшение качества путем уменьшения детализации изображения.  WebP - разработанный специально для обслуживания изображений в Web’e, значительно лучше сжимает фотки, чем JPEG.  PNG и GIF - PNG изображения сохраняются без потери качества и лучше всего подойдут для иконок и графики. Формат GIF имеет ограниченную палитру, однако поддерживает анимацию. 42
  • 40.
    Оптимизация на сторонеклиента ОПТИМИЗАЦИЯ ИЗОБРАЖЕНИЯ  Удалить все метаданные. Иногда объем такой инфы может составлять больше половины веса самого изображения.  Инструменты:  ImageMagick.  GraphicsMagick.  Jpegtran.  Cwebp - Утилита позволяет преобразовать изображение в формат Webp. 43
  • 41.
    Оптимизация на сторонеклиента ОПТИМИЗАЦИЯ ИЗОБРАЖЕНИЯ  Поддержка WebP формата:  Создаем версии каждого изображения для формата webp.  Определяем версия браузера посетителя и раздаем изображения. 44
  • 42.
    Оптимизация на сторонеклиента ИНСТРУМЕНТЫ  Google speed test  Pingdom  http://www.webpagetest.org/  Jmeter  HP Load runner 45
  • 43.
    Настройка и оптимизацияJ2EE высоконагруженных веб-приложений на основании опыта разработки портала Сбербанка ОПТИМИЗАЦИЯ НА MIDDLEWARE  Особое внимания при проектирование rest сервиса:  Rest сервисы будут доступно из internet  Единый дата сервис для получения данных из всех справочников через параметр rest сервиса не лучший вариант.  Каждый rest сервис должен проверять входные параметры на null, если все параметры с значениям null не возвращаем данных.  http://beta.sberbank.ru/portalserver/content/atom/contentRepository/qu ery?q=SELECT+*+FROM+cmis%3Afolder&searchAllVersions=false&include AllowableActions=false&includeRelationships=none&maxItems=1000&ski pCount=0 -- НЕ ДОПУСТИМА 46
  • 44.
    Оптимизация на Middleware Предоставлять обертку монолит сервисов.  Ограничивать данные через pagination.  Сервис должен сортировать и фильтровать данные для client side, а не наоборот.  Применять дистрибутивный кэш (ehcache, memcahce а также hazelcast) для хранения результата запроса из БД. 47
  • 45.
    Оптимизация на Middleware Кэшировать результат вызова идемпотентных сервисов.  Пользуйтесь CPU L1-L3 cache эффективно.  Пользуйтесь offheap ОЗУ если массивы данных большие.  Пользуйтесь высоко производительный Stax или VTDXML на месте DOM или SAX. 48
  • 46.
    Оптимизация на Middleware Применяйте единый framework для логирования или SL4j фасад.  Пользуйтесь профилированием для выявления и устранения блокировки.  Увеличивайте время сканирования изменения на log4j2 или logback.xml.  Конфигурируйте сервер приложения. 49
  • 47.
    Оптимизация на Middleware КОНФИГУРАЦИЯСЕРВЕР ПРИЛОЖЕНИЯ  Настройка Http Session  Настройка Thread pool  Настройка JDBC Connection pool  Настройка Java Heap и GC 50
  • 48.
    Оптимизация на Middleware НАСТРОЙКАHTTP SESSION  Включить cookie.  Максимальное количество сессий в памяти.  Session Timeout. 51
  • 49.
    Оптимизация на Middleware НАСТРОЙКАTHREAD POOL  Настройка WebContainer.  Min и Max Size. 52
  • 50.
    Оптимизация на Middleware КЛЮЧЕВЫЕМОМЕНТЫ ПРИ НАСТРОЙКЕ THREAD POOL  Правило “большее- лучшее” здесь не уместно, потоки требуют памяти и системных ресурсов.  Среднее количество потоков = максимальное количество RPS/количество серверов, threads = 850/16~54. 53
  • 51.
    Оптимизация на Middleware НАСТРОЙКАJDBC CONNECTION POOL  Одна из важнейших настроек сервера приложения.  Производительность сильно зависит от данной настройки. 54
  • 52.
    Оптимизация на Middleware НАСТРОЙКАJDBC CONNECTION POOL  Connection timeout: интервал времени до которого соединение остается активным.  Min и Max Connection: Минимальное и максимальное число соединения в пул. Max connection * max number of Node in cluster < max connection in DB  Unused timeout: Максимальное время, в течение которого не использующееся соединение может оставаться в пуле.  Purge policy: всегда оставляем EntirePool, при возникновении ошибки в соединении весь пул очищается, это позволяет избавится от неожиданных ошибок. 55
  • 53.
    Оптимизация на Middleware НАСТРОЙКАJDBC CONNECTION POOL (STUCK)  Stuck connection: Застрявшие соединение является активным соединением, которое не отвечает или не возвращался обратно в пул соединений. 56
  • 54.
    Оптимизация на Middleware НАСТРОЙКАJDBC CONNECTION POOL (STUCK)  Stuck time interval: Интервал времени, определяет как часто необходимо проверять stuck соединения.  Stuck time: если соединение ожидает ответа более 240 сек, она считается зависшим.  Stuck threshold: пороговое значения, после которого весь пул соединения считается зависшим. 57
  • 55.
    Оптимизация на Middleware НАСТРОЙКАJAVA HEAP И GC ПОЛИТИКА  ONE SIZE DOESN’T FIT ALL.  Выделить 50% физической оперативной памяти на Java Heap Size.  Initial Heap size = Maximum heap size, на пример Xms=16G; Xmx=16G.  garbage collection policy : - gencon - optthruput - optavgpause - subpool 58
  • 56.
    Оптимизация на Middleware ОТКЛЮЧИТЬНЕНУЖНЫЕ КОМПОНЕНТЫ ИЗ СЕРВЕР ПРИЛОЖЕНИЯ  JMS.  JMX.  OSGI.  CDI или ejb3.  Mail. 59
  • 57.
    Оптимизация на MiddleWare ИНСТРУМЕНТЫ Netbeans profiler  Yourkit  VisualVM  JITWatch  IBM performance monitoring 60
  • 58.
    Настройка и оптимизацияJ2EE высоконагруженных веб-приложений на основании опыта разработки портала Сбербанка ОПТИМИЗАЦИЯ БАЗЫ ДАННЫХ  Выделить справочники для кэширования, например сущность «Регион» - хороший кандидат для кэширования.  Настройка Result Cache. 61 sql> show user; USER is SYS sql> show parameter result; NAME TYPE VALUE -------------------------------------- ----------- ------------------------------ client_result_cache_lag big integer 3000 client_result_cache_size big integer 0 result_cache_max_result integer 5 result_cache_max_size big integer 6560K result_cache_mode string MANUAL result_cache_remote_expiration integer 0
  • 59.
    Оптимизация Базы данных result_cache_max_size: объем памяти, резервируемой для результирующего набора кэша. По документации Oracle, значение этого параметра не должно превысить 75% из общего размера shared pool. Рекомендуется выделить 50% памяти из общего Shared pool.  result_cache_max_result: параметр указывает, какой процент result_cache_max_size может использовать один результат запроса. По умолчанию значение равно 5%. 62 sql> alter system set result_cache_max_size=1024M; sql> show parameter result; NAME TYPE VALUE -------------------------------------- ----------- ------------------------------ client_result_cache_lag big integer 3000 client_result_cache_size big integer 0 result_cache_max_result integer 5 result_cache_max_size big integer 1024M result_cache_mode string MANUAL result_cache_remote_expiration integer 0
  • 60.
    Оптимизация Базы данных alter table TABLE_NAME RESULT_CACHE(MODE FORCE): результат запроса кэшируется в shared pool, LRU.  alter table TABLE_NAME cache: кэширует данные таблицы в общем буферном кэше и не гарантирует что кэш может долго остаться не изменим. Если появиться новые кэшированные данные система может переписать данную кэш.  Alter table emp storage (buffer_pool Keep) : кэширует таблицу в пул буфера и сохраняет дольшее всех 63Результат без кэширования
  • 61.
    Оптимизация Базы данных Результат после использования alter table TABLE_NAME RESULT_CACHE(MODE FORCE) 64
  • 62.
    Оптимизация Базы данных ORACLEDATABASE CHANGE NOTIFICATION  Получить уведомление об DML и DDL операции в объектах базы данных. http://docs.oracle.com/cd/E11882_01/java.112/e16548/dbchgn f.htm#JJDBC28815  Доступно с релиза 11g  Хорошо подходит для очистка и обновления result query cache в middleware.  Пример использования http://frommyworkshop.blogspot.ru/2011/01/clearing- hazelcast-data-grid-cache-with.html 65
  • 63.
    Настройка и оптимизацияJ2EE высоконагруженных веб-приложений на основании опыта разработки портала Сбербанка ЗАКЛЮЧЕНИЯ  При проектирование ИС, необходимо учитывать системные требования.  Необходимо мониторит ИС и анализировать симптомы на низкие производительности.  При необходимости оптимизировать следующие прикладные ПО:  Веб сервер.  Сервер приложения.  Клиентская часть.  Базы данных. 66
  • 64.
  • 65.
    68 Reference  http://habrahabr.ru/post/95613/ настройкаSSI  http://frommyworkshop.blogspot.ru  http://www.ruhighload.com  Google speed test  http://www.redbooks.ibm.com/abstracts/sg247347.html  http://habrahabr.ru/company/io/blog/257533/
  • 66.
  • 67.