Go: GroupCacheВ большинстве web-приложений встречаются медленные операции (SQL запросы, обращение к внешним ресурсам, дисковые операции, операции генерации страниц и т.д.), которые могут значительно затормозить систему особенно при большой интенсивности запросов. Для оптимизации таких операций и применяется кэширование данных. Оно позволяет выполнять меньше таких операций, а большинству пользователей показывать заранее подготовленные данные. Наиболее популярная технология кэширования для Web приложений - это MemCache. Но сегодня мы поговорим не о ней. А о разработанной в Google кэширующей библиотеке GroupCache, которая была написана на Go и используется в Google для замены MemCache в таких сервисах, как dl.google.com, Google Fiber, Google Monitoring и др. К характерным особенностям GroupCache стоит отнести:
Рассмотрим на примере, как можно использовать GroupCache. Пусть у нас есть некоторый web-сервер, который отдает небольшие файлы с диска. В простейшем случае функция получения такого файла будет иметь вид:
Если предположить, что файлов много и к некоторым из них достаточно часто происходит обращение, то можно применить кэширование для оптимизации повторяющихся запросов. Для подключения GroupCache нужно импортировать библиотеку для работы с ним
После чего импортировать в программу
Дальше для того мы должны создать группу (назовем ее files, размером 100MB)
Здесь getSource функция получения данных из первоисточника (в нашем случае файловой системы) и передачи его в GroupCache.
Функция принимает на вход ctx - контекст вызывающего модуля, который может быть nil; key - ключ кэша, который равен в нашем случае имени файла и объект dst, с помощью которого данные передаются в кэш. В случае неудачной загрузки данных функция возвращает объект ошибку (error), в случае успеха - nil. После этого наша функция получения файла через кэш перепишется следующим образом:
f
Все достаточно просто. Но это только случай когда у нас один инстанс. В случае нескольких инстансов нужно дополнительно определить пиры и идентифицировать себя.
Первый элемент в массиве p - это текущий пир. Также надо понимать, что в этом случае доступ к нашей функции должен осуществляться через обработчик HTTP-вызова.
14.07.2017 |
популярные тэги
наука
новости
интересно
технологии
история
go
golang
программирование
it
искусственный интеллект
путешествия
космос
природа
ai
базы данных
медицина
science
анализ текстов
ии
text mining
робототехника
авто
музыка
роботы
интернет
нейронные сети
robots
space
вокруг света
postgresql
алгоритмы
гитара
животные
оружие
google
nosql
авиация
здоровье
техника
auto
|