groupcache README

The project's README from github.com/golang/groupcache. As one markdown file: README.md.

groupcache

Summary

groupcache is a distributed caching and cache-filling library, intended as a replacement for a pool of memcached nodes in many cases.

For API docs and examples, see http://godoc.org/github.com/golang/groupcache

Comparison to memcached

Like memcached, groupcache:

Unlike memcached, groupcache:

Loading process

In a nutshell, a groupcache lookup of Get("foo") looks like:

(On machine #5 of a set of N machines running the same code)

  1. Is the value of "foo" in local memory because it's super hot? If so, use it.

  2. Is the value of "foo" in local memory because peer #5 (the current peer) is the owner of it? If so, use it.

  3. Amongst all the peers in my set of N, am I the owner of the key "foo"? (e.g. does it consistent hash to 5?) If so, load it. If other callers come in, via the same process or via RPC requests from peers, they block waiting for the load to finish and get the same answer. If not, RPC to the peer that's the owner and get the answer. If the RPC fails, just load it locally (still with local dup suppression).

Users

groupcache is in production use by dl.google.com (its original user), parts of Blogger, parts of Google Code, parts of Google Fiber, parts of Google production monitoring systems, etc.

Presentations

See http://talks.golang.org/2013/oscon-dl.slide

Help

Use the golang-nuts mailing list for any discussion or questions.

groupcache (golang/groupcache)

Searching Database…

Что это такое?groupcache — это библиотека для Go, которая распределяет кеш и заполняет его данными. Во многих случаях она заменяет пул узлов memcached.
Это отдельный сервер вроде memcached или то, что встраивается в мой код?Это библиотека для Go, а не отдельный сервер. Она работает и как клиент, и как сервер, который подключается к своим пирам, и образует распределённый кеш прямо внутри процессов вашего приложения.
Как добавить её в проект?Импортируйте её как пакет Go и настройте группу пиров; как подключить её к приложению, смотрите в документации API и примерах.
Нужен ли мне Go или можно использовать её из другого языка?Только Go — библиотека сейчас доступна только для Go, и автор считает, что её перенос на другой язык очень маловероятен.
Можно ли обновить значение в кеше или задать ему срок действия, когда оно уже записано?Нет. groupcache не поддерживает версионирование значений, истечение срока действия и явное вытеснение записей, поэтому CAS и Increment/Decrement тоже недоступны — если ключ 'foo' равен 'bar', он всегда будет равен 'bar'.
Кто на самом деле полагается на неё в продакшене?Google использует её внутри компании: dl.google.com (её первый пользователь), части Blogger, Google Code, Google Fiber и системы мониторинга Google в продакшене.
Как groupcache избегает проблемы громового стада, которая возникает у memcached при промахах кеша?Она координирует заполнение кеша так, что только одна загрузка, в одном процессе на всём реплицированном наборе, заполняет кеш для конкретного ключа, а затем загруженное значение передаётся всем остальным вызывающим, которые ждут его.
Что произойдёт, если пир, которому принадлежит ключ, недоступен?Если RPC-вызов к владеющему пиру не удался, запрашивающий узел просто загружает значение локально, при этом по-прежнему объединяет параллельные локальные загрузки.
Как groupcache определяет, какой узел отвечает за конкретный ключ?Она распределяет ключи по набору пиров с помощью консистентного хеширования, примерно так же, как шардирует memcached, поэтому каждый ключ однозначно сопоставляется с одним ответственным узлом.
Помогает ли groupcache с «горячими» ключами, по которым идёт шквал запросов?Да — она автоматически копирует сверхпопулярные элементы на несколько процессов, предотвращая перегрузку отдельного узла, когда процессор или сетевой адаптер одной машины memcached перегружаются из-за популярного ключа.
Creator
golang
Size
0.1 MB
Stars
13.3K
Updated
CommitNov 29
Age
13y
Commits · 90 Days