Hash & Cache
Курс «Базы данных»
Цесько Вадим Александрович
http://incubos.org
@incubos
Computer Science Center

16 сентябр...
Содержание

1

Hash

2

Cache

Цесько В. А. (CompSciCenter)

Hash & Cache

16 сентября 2013 г.

2 / 27
Hash

Коллекции: сложность операций

Коллекции: сложность операций
ArrayList:
get(): O(1)
insert(): O(n)
delete(): O(n)
ap...
Hash

Как ещё быстрее?

Как ещё быстрее?
Hash table
Ассоциативный массив, отображающий ключи в
значенияa :
1
С помощью хэш...
Hash

Пример

Пример

Цесько В. А. (CompSciCenter)

Hash & Cache

16 сентября 2013 г.

5 / 27
Hash

Hash table: сложность операций

Hash table: сложность операций
get(): O(1)
insert(): O(1)
delete(): O(1)
append(): O...
Hash

Подводные камни

Подводные камни

Выбор функции хэширования
Разрешение коллизий:
Separate chaining — лишняя память, ...
Hash

Материалы

Материалы

java.util.HashMap
java.util.concurrent.ConcurrentHashMap
http://en.wikipedia.org/wiki/Hash_tab...
Cache

Классические архитектуры Web-приложений

Классические архитектуры
Web-приложений

Как взаимодействуют с хранилищами...
Cache

Трёхзвенный клиент-сервер

Трёхзвенный клиент-сервер

Зачем нужен Server:
Преобразование форматов
Логика: проверить...
Cache

Нагрузка растёт

Нагрузка растёт

Цесько В. А. (CompSciCenter)

Hash & Cache

16 сентября 2013 г.

11 / 27
Cache

Нагрузка ещё больше

Нагрузка ещё больше

Цесько В. А. (CompSciCenter)

Hash & Cache

16 сентября 2013 г.

12 / 27
Cache

Что такое cache

Что такое cache
Cache
Реализация in-memory concurrent hash table с
некоторыми особенностями.
1
2

...
Cache

Анализ cache per server

Анализ cache per server
Достоинства
Снизили нагрузку на CPU и БД (если нормальный
cache hi...
Cache

Distributed cache

Distributed cache

Цесько В. А. (CompSciCenter)

Hash & Cache

16 сентября 2013 г.

15 / 27
Cache

Первый подход к снаряду

Первый подход к снаряду
1
2
3

class Cache {
val servers =
Vector("cache01.yandex.net", "c...
Cache

Анализ distributed cache

Анализ distributed cache
Достоинства
Считаем всё (примерно) один раз
Больше суммарный объ...
Cache

Memcached

Memcached
http://www.memcached.org/
Разработан для LiveJournal в 2002
Используется в YouTube, Flickr, Re...
Cache

Проблема: Изменение кластера memcached

Проблема: Изменение кластера
memcached
Причины
Список серверов в клиенте
Ко...
Cache

Сервис-proxy

Сервис-proxy
Функции:
Слушает клиентский порт
Хэширует ключ и проксирует запрос
Держит соединения ко ...
Cache

Consistent hashing

Consistent hashing

Определение
When a hash table is resized and consistent hashing is
used, on...
Cache

Consistent hashing: своими руками

Consistent hashing: своими руками
Будем отображать ключи в слоты, а затем слоты ...
Cache

Consistent hashing: по-взрослому

Consistent hashing: по-взрослому

http://docs.basho.com/riak/1.1.4/references/
ap...
Cache

Consistent hashing: репликация

Consistent hashing: репликация

Цесько В. А. (CompSciCenter)

Hash & Cache

16 сент...
Cache

Проблема: Перезапуск кластера

Проблема: Перезапуск кластера

Причины
In-memory ⇒ пустой кэш ⇒ БД «ложится»
Решения...
Cache

Redis: Persistent Key-Value Storage

Redis: Persistent Key-Value Storage
http://www.redis.io/
Наиболее популярный K...
Вопросы?

Вопросы?

http://incubos.org/contacts/
Общие вопросы — в Twitter: @incubos
Вопросы по лекциям — в комментариях:
...
Upcoming SlideShare
Loading in …5
×

Базы данных. Hash & Cache

1,422 views

Published on

Обсуждаем здесь: http://incubos.org/posts/2013/09/16/db/

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,422
On SlideShare
0
From Embeds
0
Number of Embeds
1,132
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Базы данных. Hash & Cache

  1. 1. Hash & Cache Курс «Базы данных» Цесько Вадим Александрович http://incubos.org @incubos Computer Science Center 16 сентября 2013 г. Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 1 / 27
  2. 2. Содержание 1 Hash 2 Cache Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 2 / 27
  3. 3. Hash Коллекции: сложность операций Коллекции: сложность операций ArrayList: get(): O(1) insert(): O(n) delete(): O(n) append(): O(1) / O(n) LinkedList: get(): O(n) insert(): O(n) delete(): O(n) append(): O(1) Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 3 / 27
  4. 4. Hash Как ещё быстрее? Как ещё быстрее? Hash table Ассоциативный массив, отображающий ключи в значенияa : 1 С помощью хэш-функции от ключа находим индекс в массиве bucket’ов 2 Перебираем ключи в найденном bucket’е до совпадения 3 Извлекаем значение a http://en.wikipedia.org/wiki/Hash_table Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 4 / 27
  5. 5. Hash Пример Пример Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 5 / 27
  6. 6. Hash Hash table: сложность операций Hash table: сложность операций get(): O(1) insert(): O(1) delete(): O(1) append(): O(1) Допущения При равномерной функции хэширования Без учёта ребалансировки Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 6 / 27
  7. 7. Hash Подводные камни Подводные камни Выбор функции хэширования Разрешение коллизий: Separate chaining — лишняя память, CPU cache misses Open addressing — элементов не больше 70% размера массива, CPU cache pollution Resize & rehash Concurrency Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 7 / 27
  8. 8. Hash Материалы Материалы java.util.HashMap java.util.concurrent.ConcurrentHashMap http://en.wikipedia.org/wiki/Hash_table Chris Okasaki. Purely Functional Data Structures1 1 http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 8 / 27
  9. 9. Cache Классические архитектуры Web-приложений Классические архитектуры Web-приложений Как взаимодействуют с хранилищами Какие проблемы пытаются решить Каким образом Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 9 / 27
  10. 10. Cache Трёхзвенный клиент-сервер Трёхзвенный клиент-сервер Зачем нужен Server: Преобразование форматов Логика: проверить, посчитать, ... Гибкость Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 10 / 27
  11. 11. Cache Нагрузка растёт Нагрузка растёт Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 11 / 27
  12. 12. Cache Нагрузка ещё больше Нагрузка ещё больше Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 12 / 27
  13. 13. Cache Что такое cache Что такое cache Cache Реализация in-memory concurrent hash table с некоторыми особенностями. 1 2 def process(request: Request): Response = { implicit val timeout = Timeout(50 milliseconds) 3 cache.get(request) .getOrElse({ val response = buildResponse(request) cache.put(request, response) response }) 4 5 6 7 8 9 10 } Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 13 / 27
  14. 14. Cache Анализ cache per server Анализ cache per server Достоинства Снизили нагрузку на CPU и БД (если нормальный cache hit ratio) Недостатки В каждом cache одинаковые значения «Лишние» вычисления (нагрузка на CPU) Ограниченный размер каждого cache Получили спектр проблем с апгрейдом системы Нужны политики «протухания» и вытеснения Нужно «прогревать» кэш или перезапускать сервера постепенно Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 14 / 27
  15. 15. Cache Distributed cache Distributed cache Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 15 / 27
  16. 16. Cache Первый подход к снаряду Первый подход к снаряду 1 2 3 class Cache { val servers = Vector("cache01.yandex.net", "cache02.yandex.net") 4 protected def lookup(key: AnyVal): String = servers(key.hashCode() % servers.length) 5 6 7 def get(key: AnyVal) = remoteGet(lookup(key)) 8 9 10 def put(key: AnyVal, value: Array[Byte]) = remotePut(lookup(key), value) 11 12 13 } Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 16 / 27
  17. 17. Cache Анализ distributed cache Анализ distributed cache Достоинства Считаем всё (примерно) один раз Больше суммарный объём Больше влезет значений Недостатки Остался спектр проблем с апгрейдом системы Нужны политики «протухания» (TTL) и вытеснения (LRU) Нужно «прогревать» кэш Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 17 / 27
  18. 18. Cache Memcached Memcached http://www.memcached.org/ Разработан для LiveJournal в 2002 Используется в YouTube, Flickr, Reddit, Facebook, Orange, Twitter, Tumblr, Wikipedia, Yandex Входит в Google App Engine, Windows Azure, Amazon Web Services In-memory Ключ — строка (до 250 байт) Многопоточный + libevent LRU + TTL (up to 30 days) Простой текстовый и бинарный протокол: set, add, replace, append, prepend, get, delete, ... Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 18 / 27
  19. 19. Cache Проблема: Изменение кластера memcached Проблема: Изменение кластера memcached Причины Список серверов в клиенте Количество серверов в hash-функции Решения Сервис-proxy перед memcached Consistent hashing Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 19 / 27
  20. 20. Cache Сервис-proxy Сервис-proxy Функции: Слушает клиентский порт Хэширует ключ и проксирует запрос Держит соединения ко всем экземплярам cache Недостатки +1 сетевой hop Весь трафик через одну точку SPOF Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 20 / 27
  21. 21. Cache Consistent hashing Consistent hashing Определение When a hash table is resized and consistent hashing is used, only K /n keys need to be remapped on average, where K is the number of keys, and n is the number of slotsa . a http://en.wikipedia.org/wiki/Consistent_hashing Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 21 / 27
  22. 22. Cache Consistent hashing: своими руками Consistent hashing: своими руками Будем отображать ключи в слоты, а затем слоты на машины: 1 val slots = Vector(100, 200, 300, 400) 2 3 4 5 6 def slot(key: AnyVal): Int = { val hash = key % slots.last slots.indexWhere(hash < _) } Если переполняется слот 200-299, то подвигаем: 1 val slots = Vector(100, 200, 275, 325, 400) Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 22 / 27
  23. 23. Cache Consistent hashing: по-взрослому Consistent hashing: по-взрослому http://docs.basho.com/riak/1.1.4/references/ appendices/concepts/#Clustering 16 сентября 2013 г. 23 / 27 Цесько В. А. (CompSciCenter) Hash & Cache
  24. 24. Cache Consistent hashing: репликация Consistent hashing: репликация Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 24 / 27
  25. 25. Cache Проблема: Перезапуск кластера Проблема: Перезапуск кластера Причины In-memory ⇒ пустой кэш ⇒ БД «ложится» Решения «Разогрев» Persistent storage Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 25 / 27
  26. 26. Cache Redis: Persistent Key-Value Storage Redis: Persistent Key-Value Storage http://www.redis.io/ Наиболее популярный Key-Value Storage2 Используется в GitHub, Disqus, Pinterest, Stackoverlow, Flickr, Blizzard, Instagram, Twitter Key-Value, but Value: String, List, Set, SortedSet, Hash In-memory and/or Snapshots and/or Commit Logs Single-threaded by design + Master-slave Опционально LRU и/или TTL Очень богатый API3 2 3 http://db-engines.com/en/ranking/key-value+store http://redis.io/commands Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 26 / 27
  27. 27. Вопросы? Вопросы? http://incubos.org/contacts/ Общие вопросы — в Twitter: @incubos Вопросы по лекциям — в комментариях: http://incubos.org/blog/ Частные вопросы — в почту vadim.tsesko@gmail.com Цесько В. А. (CompSciCenter) Hash & Cache 16 сентября 2013 г. 27 / 27

×