26
Распределённые кэши, блеск и нищета Алексей Рагозин jug.ru Июнь 2014

Блеск и нищета распределённых кэшей

Embed Size (px)

DESCRIPTION

jug.ru

Citation preview

Page 1: Блеск и нищета распределённых кэшей

Распределённые кэши, блеск и нищета

Алексей Рагозин

jug.ru

Июнь 2014

Page 2: Блеск и нищета распределённых кэшей

Проблема выбора

Page 3: Блеск и нищета распределённых кэшей

Базворды

• Key value

• Distributed Hash Table

• In-memory

• Horizontal scalability

• Redundant storage

Page 4: Блеск и нищета распределённых кэшей

3 tier architecture

Data tier

Business logic tier

Presentation tier

Cache

Storage

Page 5: Блеск и нищета распределённых кэшей

Хранилище

Основная задача ‐ долговременное хранение

Худшее, что может случиться ‐ потеря данных

Время жизни данных ‐ годы

Операционная модель ‐ “база данных”

Распределённый кэш

Основная задача ‐ высокая доступность сервиса

‐ малое время доступа к данным

Худшее, что может случиться ‐ возврат неактуальных данных

Время жизни данных ‐ до перезапуска

Операционная модель ‐ “модуль приложения”

Кэши и хранилища

Page 6: Блеск и нищета распределённых кэшей

Распределённость кэша

Ёмкость

до единиц TiB

Время доступа

сетевые задержки + 0.5 ms

Request per Second

линейная масштабируемость

по серверам и по ядрам

Когерентность данных

Проблема гидрации

java.util.HashMap

100GiB – легко 1M RPS – легко

Хранение данных в памяти одного процесса зачастую на порядок эффективнее распределенного

Может быть полезно, иногда

Killer feature !!!

Page 7: Блеск и нищета распределённых кэшей

Кэш и бизнес логика

Кэш API должен органично стыковаться с языком бизнес логики

Один язык

“Толстая” библиотека

Rich API

Client side features: L1 caching, etc

Хранение Java объектов

Yet another serialization for Java

Page 8: Блеск и нищета распределённых кэшей

Кэш и сквозное чтение

Сквозное чтение – read through

Сквозная запись – write through

Отложенная запись – write behind

PRO: Кэш – логический интерфейс к хранилищу

CON: Нюансы интеграции

Page 9: Блеск и нищета распределённых кэшей

Cluster shared memory

Решение проблемы “shared state” для “share nothing” кластеров

Быстрый доступ (In-memory)

Когерентность данных

“Атомарные” операции

Redis

Пример “shared state” сервиса для PHP и других типичных web технологий

Page 10: Блеск и нищета распределённых кэшей

Уроки, которые я выучил при работе с Oracle Coherence и другими распределёнными

хранилищами.

Под грифом IMHO

Page 11: Блеск и нищета распределённых кэшей

Распределённость …

Технологии для диссертаций

Paxos

Consistent hashing

Технологии для enterprise решений

Партицирование

Ведущий – ведомый (протокол консенсуса нужен только для выбора ведущего)

Page 12: Блеск и нищета распределённых кэшей

Key / Value модель

Key / Value модель требует денормализации!

Минимизация числа запросов

Проблемы с referral integrity между таблицами

Проблемы атомарности изменений

Page 13: Блеск и нищета распределённых кэшей

Кэш – это индекс

Кэш — вспомогательная структура данных, позволяющая сократить время выполнения запросов к хранилищу данных.

Модель данных кэша должна выбираться исходя из запросов, время выполнения которых вы хотите сократить!

Page 14: Блеск и нищета распределённых кэшей

Распределённые очереди

Не делайте из кэша распределённую очередь

Не делайте!

Не делайте!

Если вам нужна очередь, возьмите очередь

Page 15: Блеск и нищета распределённых кэшей

Опыт работы с Coherence

Решения делятся на те, которые

Просто работают

web sessions, мало нагруженные кэши, …

Просто работают, при правильном дизайне

all in-memory, proactive caching

Постоянно доставляют проблемы

Тесная интеграция с БД, “распределённая” бизнес логика

Page 16: Блеск и нищета распределённых кэшей

Coherence + DB = …

Распределённый кэш Быстрые операции

Высокая конкурентной

Наивная потоковая модель

java.util.Map контракт

База данных Широкий разбросc времён выполнения операций

Вариативная производительность

JDBC

Page 17: Блеск и нищета распределённых кэшей

Coherence + DB = …

Problem

Learn

Tune Something

changes

Cache and database

disharmonized

Page 18: Блеск и нищета распределённых кэшей

All in-memory, proactive caching

Данные грузятся в кэш заранее

Источник данных исчезает с критического пути

Проблема загрузки данных

Проблема частичного восстановления данных

Проблема синхронизации данных с источником

Не панацея

In-memory не значит супер быстро

Есть запросы, которые могут убить кэш

Page 19: Блеск и нищета распределённых кэшей

Другие антипаттерны

Распределённый кэш – не вычислительный грид

Архитектура потоков не рассчитана на тяжёлые вычисления

Злоупотребления размером данных

Key и Value должны быть разумного размера

Батчи должены быть разумного размера

IO операции в потоке обработки данных

Например обращение к соседнему распределённому кэшу

Page 20: Блеск и нищета распределённых кэшей

Учите мат. часть

Какой MTU настроен в вашей OS?

Какой MTU настроен в вашем свитче?

Мониторите ли вы ошибки сетевых интерфейсов?

Какой у вас JDBC пул?

Используете ли вы отдельный read-only пул?

Используется ли у вас FIFO очередь JDBC пуле?

Page 21: Блеск и нищета распределённых кэшей

Распределённые кэши, перспективы и спекуляции

Под грифом IMHO

Page 22: Блеск и нищета распределённых кэшей

Попытки стандартизации

• JSR 107: JCACHE – Java Temporary Caching API

• JSR 347: Data Grids for the Java™ Platform

Нужно ли это?

Page 23: Блеск и нищета распределённых кэшей

В облаках побеждает железо

На плохо настроенном железе, любой софт работает плохо

Вертикально интегрированная аппаратно программная платформа, позволяет

обеспечить производительность

дифференцировать продукт от конкурентов

Page 24: Блеск и нищета распределённых кэшей

Cache is a feature

Кэш – галочка сервера приложений

Часть business logic tier

Насаждение правильных паттернов

Page 25: Блеск и нищета распределённых кэшей

Спекуляции о будущем

Развитие Open source – Hazelcast и прочие

Уменьшение хайфа

Вытеснение кэшей из областей лежащих за пределами уровня бизнес логики NoSQL решениями

Новые стандарты серверов приложений?

Page 26: Блеск и нищета распределённых кэшей

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