Презентация содержит информацию о том, как надо проектировать приложения, чтобы они могли выдержать свалившуюся на них славу и неожиданный поток клиентов. Показаны приемы вертикального и горизонтального масштабирования, преимущества и недостатки каждого подхода, узкие места и потенциальные проблемы. В том числе приведены примеры практической реализации обоих видов масштабирования в единственной облачной платформе хостинга Java в России — Jelastic
2. Дмитрий Лазаренко
Более 8 лет опыта разработки
на языке Java
Руководитель интеграционного
направления Jelastic, основное
направление деятельности –
предоставление облачного
хостинга для новых и уже
существующих Java и PHP
приложений
2
3. PaaS
• Глобальная автоматизация
• Простота управления
приложениями
• Масштабирование приложения
в зависимости от нагрузки
• Целостность и безопасность
данных приложения
PaaS значительно снижает
затраты времени и денег на
обслуживание
4. Jelastic– платформа облачного
хостинга следующего
поколения, позволяющая
запускать и масштабировать
ЛЮБЫЕ Java & PHP приложения
без необходимости
модифицировать их исходный код
5. Разработчики любят создавать приложения и ненавидят обслуживать
сервера
10:15 Установка ОС
11:20 Конфигурирование системы
12:05 Перерыв на кофе
13:05 Настройка безопасности
14:15 Конфигурация web сервера
15:40 Конфигурация базы данных
16:20 Пару бутербродов
16:50 Конфигурация брандмауэра
17:20 Разворачивание приложения
17:45 Звонок жене и извинения о позднем возращении
домой
18:00 Определение зависимостей библиотек
20:30 Обновление пакетов
22:15 Исправление неисправных зависимостей
23:50 Пару банок Red Bull
1:30 Запуск!!!
~ 16 часов ~ 2 дня
Одна история из жизни разработчика
Пример из жизни
2:05 ночи Окончание рабочего дня
6. 10:15 Выбрать тип и размер сервера
10:17 Выбрать доменное имя
10:20 Загрузить приложение
10:25 Запустить!!!
~ 10 минут
Та же история с использованием Jelastic
• Легко
• Быстро
• Удобно
• Экономия времени и денег
10 минут vs 2 дня = $$$$$$
7.
8.
9. Проблемы высоконагруженных приложений
• Высокое время отклика
• Низкая пропускная способность
• Высокая ресурсоемкость
• Высоковероятный выход из строя узлов
системы
• Часто производительность упирается в
железо
9
11. Особенности вертикального
масштабирования в Java
• Физическое потребление памяти JVM может
только увеличиваться
• Освободившаяся после работы GC память не
отдается обратно в операционную систему
• Разные GC по разному работают с большим
объемом памяти
• Большие паузы на больших объемах Heap
• Возможны утечки памяти
11
13. AZUL ZING
• Низкие задержки GC
• Возможность масштабирования одной
JVM до 500 GB Heap
• Поддержка вертикального
масштабирования вверх и вниз
• Только коммерческая лицензия
13
14. Вертикальное масштабирование в Jelastic
• Результат 6 месяцев исследований
• Обеспечивается автоматическое вертикального
масштабирования вверх и вниз для Java
приложений
• Работает в G1 и Serial GC
• Абсолютно прозрачно и выгодно для
пользователя
14
17. Проблемы вертикального
масштабирования в облаке
• Гипервизор резервирует память, хотя
приложение может ее и не использовать
• Деление процессорного времени (KVM, XEN)
• Быстрый рост потребления ресурсов одним из
приложений
• Достижение предела вертикального
масштабирования–performance упирается в
возможности железа
17
18. Контейнеры
• Parallels Virtuozzo Containers – виртуализация на уровне
ОС
• Самые низкие накладные расходы на виртуализацию
• Возможность вертикального масштабирования, Memory
Overcelling
• Пользователь не платит за потребление памяти и
процессора ядра ВМ
• Гибкие настройки потребления ресурсов
• Оптимальная утилизация дискового пространства
• Живая миграция
18
20. Горизонтальное масштабирование
Рост производительности приложения при
добавлении ещё одного узла.
• Дает возможность обойти пределы
вертикального масштабирования
• Увеличивает скорость работы программы за счет
распределения по разным физическим
машинам
20
21. Проблемы горизонтального
масштабирования
• Единые точки отказа (SPoF )
• Балансировка нагрузки(LB)
• Обеспечение высокой доступности (HA)
• Синхронизация кэша
• Общий доступ к файловым данным
• Межпроцессная координация
• Усложнение логики приложения
21
24. HA for Http level
• Реплицируются хотя бы на 1 сервер все http-
сессии (вместе с атрибутами)
• Реализация часто использует tcp multicasting
• Много паразитного траффика и перерасход
памяти
• Можно использовать СУБД либо сервер-
кэширования
• Некоторые J2EE сервера используют умную
репликацию
24
30. Общий доступ к файлам
• NFS
• GlusterFS
• Ceph
• Amazon S3
• Hadoop HDFS
• Openstack Swift
30
31. Сложности масштабирования вручную
• Много сетевых настроек
• Много рутинных операций при добавлении
нового узла
• Постоянная забота о существовании единых
точек отказа
• Отсутствие средств централизованного
мониторинга
• Высокая вероятность что-нибудь забыть
31
32. Что дает Jelastic для горизонтального
масштабирования
• Хитрые алгоритмы:
– Алгоритм равномерного размазывания контейнеров
одного окружения
– Алгоритм распределения новых контейнеров по
физическим машинам с учетом комплексного
показателя загрузки
• Обеспечение отсутствия SPoF на слое
приложения
• Стараемся избавиться от SPoF на слое данных и
балансировке
32
33. Упрощение масштабирования
приложений в Jelastic
• Быстрое и гибкое создание кластера
произвольного размера
• Адаптивное горизонтальное и
вертикальное
масштабирование, поддержка HA для
GlassFish, Tomcat, Jetty
• Удобные средства мониторинга
33
34. Масштабирование в Jelastic -
Ближайшие планы
• Terracotta
• High Availability out of box support for
MySql, PostgreSQL, MongoDB
• Distributed File Storage
34