阅读更多

7顶
0踩

开源软件

转载新闻 GroupCache:Go 语言实现的 memcached

2013-07-31 16:49 by 副主编 WnouM 评论(1) 有7192人浏览
memcached作者Brad Fitzpatrick用Go语言重新实现了memcached,新的项目名称为groupcache,现已在Google多个生产环境中投入使用。

对比老版本memcached,groupcache去掉了缓存有效期及缓存回收机制,随之而来的是通过自动备份来均衡负载。

项目地址:https://github.com/golang/groupcache
国内镜像地址:https://code.csdn.net/OS_Mirror/groupcache



对比原始memcached

首先,groupcache与memcached的相似之处:通过key分片,并且通过key来查询响应的peer。

其次,groupcache与memcached的不同之处:

  • 不需要对服务器进行单独的设置,这将大幅度减少部署和配置的工作量。groupcache既是客户端库也是服务器库,并连接到自己的peer上。
  • 具有缓存过滤机制。众所周知,在memcached出现“Sorry,cache miss(缓存丢失)”时,经常会因为不受控制用户数量的请求而导致数据库(或者其它组件)产生“惊群效应(thundering herd)”;groupcache会协调缓存填充,只会将重复调用中的一个放于缓存,而处理结果将发送给所有相同的调用者。
  • 不支持多个版本的值。如果“foo”键对应的值是“bar”,那么键“foo”的值永远都是“bar”。这里既没有缓存的有效期,也没有明确的缓存回收机制,因此同样也没有CAS或者Increment/Decrement。
  • 基于上一点的改变,groupcache就具备了自动备份“超热”项进行多重处理,这就避免了memcached中对某些键值过量访问而造成所在机器CPU或者NIC过载。
  • 当下只支持Go
运行机制

简而言之,groupcache查找一个Get(“foo”)的过程类似下面的情景:

  1. key“foo”的值是否会因为“过热”而储存在本地内存,如果是,就直接使用
  2. key“foo”的值是否会因为peer #5是其拥有者而储存在本地内存,如果是,就直接使用
  3. 首先确定key “fool”是否归属自己N个机器集合的peer中,如果是,就直接加载。如果有其它的调用者介入(通过相同的进程或者是peer的RPC请求,这些请求将会被阻塞,而处理结束后,他们将直接获得相同的结果)。如果不是,将key的所有者RPC到相应的peer。如果RPC失败,那么直接在本地加载(仍然通过备份来应对负载)。
采用情况

groupcache已经在dl.Google.com、Blogger、Google Code、Google Fiber、Google生产监视系统等项目中投入使用。

更多展示:Presentations

Via groupcache & CSDN
  • 大小: 33.1 KB
来自: CSDN
7
0
评论 共 1 条 请登录后发表评论
1 楼 witcheryne 2013-08-06 16:07
memcached 适用场景,求科普。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • olric:分布式缓存和内存中键值数据存储。 它既可以用作嵌入式Go库,也可以用作独立于语言的服务

    它既可以用作嵌入式Go库,也可以用作独立于语言的服务。 使用Olric,您可以立即在计算机群集之间创建快速,可扩展的共享RAM池。 请参阅和部分以开始使用!乍看上去旨在在服务器之间共享一些瞬时的,近似的,快速...

  • [转]GroupCache:Go 语言实现的 memcached

    memcached作者Brad Fitzpatrick用Go语言重新实现了memcached,新的项目名称为groupcache,现已在Google多个生产环境中投入使用。对比老版本memcached,groupcache去掉了缓存有效期及缓存回收机制,随之而来的是通过...

  • 【分布式缓存源码分析】Memcached、groupcache和GeeCache(一)

    分布式内存对象缓存系统介绍2.1 Memcached2.1.1 介绍2.1.2 常见的提速方法2.1.3 memcached特征2.1.4 使用场景2.2 groupcache2.3 GeeCache参考 首先,项目来自极客兔兔分布式缓存-GeeCache,我们先来谈谈分布式缓存...

  • GroupCache学习笔记汇总-Go语言开发

    groupcache是memcached的Go语言版本。 与Redis等其他常用cache实现不同,groupcache并不运行在单独的server上,而是作为library和app运行在同一进程中。所以groupcache既是server也是client。 分布式缓存库 数据无...

  • 【Golang】groupcache之singleflight

    groupcache singleflight go-cache

  • Go 语言编写的缓存及缓存过滤库:groupcache

    groupcache 是使用 Go 语言编写的缓存及缓存过滤库,作为 memcached 许多场景下的替代版本。 对比原始 memcached  首先,groupcache 与 memcached 的相似之处:通过 key 分片,并且通过 key 来查询响应的 peer...

  • 7天实现Go分布式缓存(day1)

    7天实现Go分布式缓存(day1)

  • 吐血整理的GO语言部分框架、库必学清单,带你开启机器学习

    作为一款网红编程语言,Go语言还十分年轻,很多程序员无法及时了解到Go语言的框架、库和软件应用。近日,Github用户avelino分享了一张非常完整且庞大的表单,包括命令行、数据库、Web框架、机器学习、自然语言处理.....

  • 数据库调研:memcached

    复制代码介绍memcached是高性能多线程的分布式缓存k-v数据库。Memcached是内存中的键值数据库,用于缓存从数据库调用,API调用的任意小块数据(字符串,对象)。可以通过缓存减轻数据库或IO的负载,从而增加应用的...

  • go语言资源大全

    转载地址:https://github.com/avelino/awesome-go ...Awesome Go Audio & MusicAuthentication & OAuthCommand LineConfigurationContinuous IntegrationCSS PreprocessorsData StructuresDatabaseData

  • 100天精通Golang(基础入门篇)——第2天:学习Go语言的前世今生:一门强大的编程语言的崛起

    还将介绍Go语言的logo和版本信息,并详细解析Go语言的核心特性以及它在并发编程、内存回收、网络编程等方面的应用。最后,我们将探讨Go语言的功能以及国内外知名企业和项目中使用Go语言的案例。

  • go语言开源项目

    谷歌官方维护了一个基于go语言的开源项目列表:https://github.com/golang/go/wiki/Projects其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也有大型如nsq、docker等的项目。下面推荐几款适合...

  • groupcache入门

    groupcache is a distributed caching and cache-filling library, intended as a replacement for a pool of memcached nodes in many cases. groupcache是memcached作者Brad Fitzpatrick的另外一个key/value键值...

  • groupcache源码分析(一)-- 概述

    正在学习GO语言,基本语法已经差不多掌握,就打算阅读一些经典开源源码吸取营养,groupcache源码代码量不是很大,而且里面可以学到很多缓存相关的知识, 所以选取groupcache源码进行阅读分析。本篇先大概的介绍一下...

  • [转]Go语言(golang)开源项目大全

    [转]Go语言(golang)开源项目大全 内容目录 Astronomy 构建工具 缓存 云计算 命令行选项解析器 命令行工具 压缩 配置文件解析器 控制台用户界面 加密 数据处理 数据结构 数据库和存储 开发...

  • Go实战--也许最快的Go语言Web框架kataras/iris初识二(TOML、Cache、Cookie)

    Go实战–也许最快的Go语言Web框架kataras/iris初识(basic认证、Markdown、YAML、Json)继续跟大家一起学习iris框架.TOML什么是toml? toml也是一种配置文件,关于golang中配置文件的使用之前也有介绍过: Go实

  • Go 语言学习资源合集(推荐)

    Awesome Go  A curated list of awesome Go frameworks, libraries and software. Inspired by awesome-python. Contributing Please take a quick gander at the contribution guidelines first. Thanks...

  • Go语言(golang)开源项目大全

    - An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications gomemcache - a memcached client gomemcached - A memcached server in go ...

  • Go学习路线

    今天在开发的时候,找不到合适的包,翻了好久github没有合适的,我发现有...MTProto - 在纯 Go 上编写的 Telegram API 的完整本实现。 天文学 go-fits - FITS(灵活图像传输系统)格式图像和数据读取器 astrogo/...

  • Go语言学习15-基本流程控制

    Go语言流程控制方法(基本流程控制: if , for , switch , goto)

Global site tag (gtag.js) - Google Analytics