5. Хранилище
Основная задача
‐ долговременноехранение
Худшее,чтоможетслучиться
‐ потеряданных
Время жизни данных
‐ годы
Операционная модель
‐ “база данных”
Распределённый кэш
Основная задача
‐ высокая доступность сервиса
‐ малоевремядоступакданным
Худшее,чтоможетслучиться
‐ возврат неактуальных данных
Время жизни данных
‐ до перезапуска
Операционная модель
‐ “модуль приложения”
Кэши и хранилища
6. Распределённость кэша
Ёмкость
до единиц TiB
Времядоступа
сетевые задержки + 0.5 ms
Request per Second
линейная масштабируемость
по серверам и по ядрам
Когерентность данных
Проблема гидрации
java.util.HashMap
100GiB – легко
1M RPS – легко
Хранение данных
в памяти одного
процесса зачастую
на порядок
эффективнее
распределенного
Может быть полезно, иногда
Killer feature !!!
7. Кэш и бизнес логика
Кэш API должен органично стыковаться с
языком бизнес логики
Один язык
“Толстая” библиотека
Rich API
Client side features: L1 caching, etc
Хранение Java объектов
Yet another serialization for Java
8. Кэш и сквозное чтение
Сквозное чтение – read through
Сквозная запись – write through
Отложенная запись – write behind
PRO: Кэш–логическийинтерфейскхранилищу
CON: Нюансы интеграции
9. Cluster shared memory
Решение проблемы “shared state” для
“share nothing” кластеров
Быстрый доступ (In-memory)
Когерентность данных
“Атомарные” операции
Redis
Пример “shared state” сервиса для PHP
и других типичных web технологий
10. Уроки, которые я выучил при работе с Oracle
Coherence и другими распределёнными
хранилищами.
Под грифом IMHO
11. Распределённость …
Технологии для диссертаций
Paxos
Consistent hashing
Технологии для enterprise решений
Партицирование
Ведущий – ведомый (протокол консенсуса нужен
только для выбора ведущего)
12. Key / Value модель
Key / Value модель требует денормализации!
Минимизация числа запросов
Проблемы с referral integrity между
таблицами
Проблемы атомарности изменений
13. Кэш – это индекс
Кэш — вспомогательная структура данных,
позволяющая сократить время выполнения
запросов к хранилищу данных.
Модель данных кэша должна выбираться
исходя из запросов, время выполнения
которых вы хотите сократить!
15. Опыт работы с Coherence
Решения делятся на те, которые
Просто работают
web sessions, мало нагруженные кэши, …
Просто работают, при правильном дизайне
all in-memory, proactive caching
Постоянно доставляют проблемы
Тесная интеграция с БД, “распределённая” бизнес
логика
16. Coherence + DB = …
Распределённый кэш
Быстрые операции
Высокая конкурентной
Наивная потоковая модель
java.util.Map контракт
База данных
Широкий разбросc времён выполнения операций
Вариативная производительность
JDBC
17. Coherence + DB = …
Problem
Learn
Tune
Something
changes
Cache and
database
disharmonized
18. All in-memory, proactive caching
Данные грузятся в кэш заранее
Источник данных исчезает с критического пути
Проблема загрузки данных
Проблема частичного восстановления данных
Проблема синхронизации данных с источником
Не панацея
In-memory не значит супер быстро
Есть запросы, которые могут убить кэш
19. Другие антипаттерны
Распределённыйкэш–невычислительныйгрид
Архитектура потоков не рассчитана на тяжёлые
вычисления
Злоупотребления размером данных
Key и Value должны быть разумного размера
Батчи должены быть разумного размера
IO операции в потоке обработки данных
Например обращение к соседнему
распределённому кэшу
20. Учите мат. часть
Какой MTU настроен в вашей OS?
Какой MTU настроен в вашем свитче?
Мониторителивыошибкисетевыхинтерфейсов?
Какой у вас JDBC пул?
Используете ли вы отдельный read-only пул?
Используется ли у вас FIFO очередь JDBC пуле?
23. В облаках побеждает железо
На плохо настроенном железе,
любой софт работает плохо
Вертикально интегрированная аппаратно
программная платформа, позволяет
обеспечить производительность
дифференцировать продукт от конкурентов
24. Cache is a feature
Кэш – галочка сервера приложений
Часть business logic tier
Насаждение правильных паттернов
25. Спекуляции о будущем
Развитие Open source – Hazelcast и прочие
Уменьшение хайфа
Вытеснение кэшей из областей лежащих за
пределамиуровнябизнеслогикиNoSQLрешениями
Новые стандарты серверов приложений?