Блеск и нищета распределённых кэшей
DESCRIPTION
jug.ruTRANSCRIPT
![Page 1: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/1.jpg)
Распределённые кэши, блеск и нищета
Алексей Рагозин
jug.ru
Июнь 2014
![Page 2: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/2.jpg)
Проблема выбора
![Page 3: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/3.jpg)
Базворды
• Key value
• Distributed Hash Table
• In-memory
• Horizontal scalability
• Redundant storage
![Page 4: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/4.jpg)
3 tier architecture
Data tier
Business logic tier
Presentation tier
Cache
Storage
![Page 5: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/5.jpg)
Хранилище
Основная задача ‐ долговременное хранение
Худшее, что может случиться ‐ потеря данных
Время жизни данных ‐ годы
Операционная модель ‐ “база данных”
Распределённый кэш
Основная задача ‐ высокая доступность сервиса
‐ малое время доступа к данным
Худшее, что может случиться ‐ возврат неактуальных данных
Время жизни данных ‐ до перезапуска
Операционная модель ‐ “модуль приложения”
Кэши и хранилища
![Page 6: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/6.jpg)
Распределённость кэша
Ёмкость
до единиц TiB
Время доступа
сетевые задержки + 0.5 ms
Request per Second
линейная масштабируемость
по серверам и по ядрам
Когерентность данных
Проблема гидрации
java.util.HashMap
100GiB – легко 1M RPS – легко
Хранение данных в памяти одного процесса зачастую на порядок эффективнее распределенного
Может быть полезно, иногда
Killer feature !!!
![Page 7: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/7.jpg)
Кэш и бизнес логика
Кэш API должен органично стыковаться с языком бизнес логики
Один язык
“Толстая” библиотека
Rich API
Client side features: L1 caching, etc
Хранение Java объектов
Yet another serialization for Java
![Page 8: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/8.jpg)
Кэш и сквозное чтение
Сквозное чтение – read through
Сквозная запись – write through
Отложенная запись – write behind
PRO: Кэш – логический интерфейс к хранилищу
CON: Нюансы интеграции
![Page 9: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/9.jpg)
Cluster shared memory
Решение проблемы “shared state” для “share nothing” кластеров
Быстрый доступ (In-memory)
Когерентность данных
“Атомарные” операции
Redis
Пример “shared state” сервиса для PHP и других типичных web технологий
![Page 10: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/10.jpg)
Уроки, которые я выучил при работе с Oracle Coherence и другими распределёнными
хранилищами.
Под грифом IMHO
![Page 11: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/11.jpg)
Распределённость …
Технологии для диссертаций
Paxos
Consistent hashing
Технологии для enterprise решений
Партицирование
Ведущий – ведомый (протокол консенсуса нужен только для выбора ведущего)
![Page 12: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/12.jpg)
Key / Value модель
Key / Value модель требует денормализации!
Минимизация числа запросов
Проблемы с referral integrity между таблицами
Проблемы атомарности изменений
![Page 13: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/13.jpg)
Кэш – это индекс
Кэш — вспомогательная структура данных, позволяющая сократить время выполнения запросов к хранилищу данных.
Модель данных кэша должна выбираться исходя из запросов, время выполнения которых вы хотите сократить!
![Page 14: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/14.jpg)
Распределённые очереди
Не делайте из кэша распределённую очередь
Не делайте!
Не делайте!
Если вам нужна очередь, возьмите очередь
![Page 15: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/15.jpg)
Опыт работы с Coherence
Решения делятся на те, которые
Просто работают
web sessions, мало нагруженные кэши, …
Просто работают, при правильном дизайне
all in-memory, proactive caching
Постоянно доставляют проблемы
Тесная интеграция с БД, “распределённая” бизнес логика
![Page 16: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/16.jpg)
Coherence + DB = …
Распределённый кэш Быстрые операции
Высокая конкурентной
Наивная потоковая модель
java.util.Map контракт
База данных Широкий разбросc времён выполнения операций
Вариативная производительность
JDBC
![Page 17: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/17.jpg)
Coherence + DB = …
Problem
Learn
Tune Something
changes
Cache and database
disharmonized
![Page 18: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/18.jpg)
All in-memory, proactive caching
Данные грузятся в кэш заранее
Источник данных исчезает с критического пути
Проблема загрузки данных
Проблема частичного восстановления данных
Проблема синхронизации данных с источником
Не панацея
In-memory не значит супер быстро
Есть запросы, которые могут убить кэш
![Page 19: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/19.jpg)
Другие антипаттерны
Распределённый кэш – не вычислительный грид
Архитектура потоков не рассчитана на тяжёлые вычисления
Злоупотребления размером данных
Key и Value должны быть разумного размера
Батчи должены быть разумного размера
IO операции в потоке обработки данных
Например обращение к соседнему распределённому кэшу
![Page 20: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/20.jpg)
Учите мат. часть
Какой MTU настроен в вашей OS?
Какой MTU настроен в вашем свитче?
Мониторите ли вы ошибки сетевых интерфейсов?
Какой у вас JDBC пул?
Используете ли вы отдельный read-only пул?
Используется ли у вас FIFO очередь JDBC пуле?
![Page 21: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/21.jpg)
Распределённые кэши, перспективы и спекуляции
Под грифом IMHO
![Page 22: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/22.jpg)
Попытки стандартизации
• JSR 107: JCACHE – Java Temporary Caching API
• JSR 347: Data Grids for the Java™ Platform
Нужно ли это?
![Page 23: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/23.jpg)
В облаках побеждает железо
На плохо настроенном железе, любой софт работает плохо
Вертикально интегрированная аппаратно программная платформа, позволяет
обеспечить производительность
дифференцировать продукт от конкурентов
![Page 24: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/24.jpg)
Cache is a feature
Кэш – галочка сервера приложений
Часть business logic tier
Насаждение правильных паттернов
![Page 25: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/25.jpg)
Спекуляции о будущем
Развитие Open source – Hazelcast и прочие
Уменьшение хайфа
Вытеснение кэшей из областей лежащих за пределами уровня бизнес логики NoSQL решениями
Новые стандарты серверов приложений?
![Page 26: Блеск и нищета распределённых кэшей](https://reader030.vdocument.in/reader030/viewer/2022020217/55613d1cd8b42a9b248b52b9/html5/thumbnails/26.jpg)
Thank you
Alexey Ragozin [email protected]
http://blog.ragozin.info - my articles http://code.google.com/p/gridkit http://github.com/gridkit - my open source code http://aragozin.timepad.ru - community events in Moscow