介绍

  ycache是yhd的分布是缓存框架,设计目的是提供易扩展、高可靠的分布式缓存系统。ycache从全局视角分配和管理缓存,检测缓存的状态并做故障恢复。
  当应用(应用:使用ycache的上层业务模块的俗称,例如订单管理模块)需要缓存时,仅需要说需要多少空间的缓存,然后yconsole会从缓存系统中按照一定策略分配缓存空间给这个应用。这个缓存空间用一个"cache-id"表示,应用层仅需要在ycache-client中配置这个cacheid,就能使用这些缓存。应用层不需要知道缓存在哪里,ip是什么,它只知道自己拥有这么多的缓存空间并总是能使用的。




原理

ycache包括几个组件:
  • ycache-client:它在memcached-java-client和jedis的基础上封装了一层,一方面是为了统一缓存的api,另一方面是为方便与ycache的其他组件协同工作。简要的说,它通过配置一个cacheid,动态的检测这cacheid在zookeeper上的对应节点下的cache实例(ip:port),然后连接并使用缓存。
  • yagent:它是一个管理缓存实例的守护进程。它运行在memcached或redis的服务器上,按照配置自动启动、维护缓存实例(cache进程),并把缓存实例的信息写到zookeeper上。它写的信息是给yconsole使用的,包括一台缓存服务器有哪些实例,每个实例分配的内存空间,服务器使用的缓存版本、分组、优先级,甚至服务器所在的机架信息。它还负责redis的主从切换相关的功能;还有简单的统计功能。
    yagent使用说明
  • yconsole:它是一个管理缓存的工具。主要是通过读取yagent写到zookeeper上的信息,按照一定策略分配给应用,然后将分配的结果写到zookeeper上,供ycache-client使用。
    yconsole使用说明
  • zookeeper:zk属于协调者的作用,它将yagent对缓存实例的状态更新消息展示给yconsole,同时将yconsole对cacheid的更新消息通知给yclient。
  下图展示了这些组件之间的关系。值得注意的是,虽然他们上面的组件式紧密配合使用的,但是ycache-client使用缓存时直接连接memcached或redis,也就是即使zk、yconsole、yagent故障了,也不影响缓存的使用(但扩展和故障恢复受影响了)。

  zk上的数据结构,yagent写的数据为:/redis/ips/[server-ip]/[[cache-instance-1], ...], yconsole写的数据为:/redis/pools/[cache-id], 里面记录这这个cacheid对应的cache实例的ip:port。

 

ycache分布式缓存框架的更多相关文章

  1. 5个强大的Java分布式缓存框架推荐

    在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...

  2. Java分布式缓存框架

    http://developer.51cto.com/art/201411/457423.htm 在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓 ...

  3. 5个强大的Java分布式缓存框架

    在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了5 ...

  4. Java 开源分布式缓存框架Ehcache

    http://www.codeceo.com/article/java-ehcache.html

  5. 【分布式缓存系列】Redis实现分布式锁的正确姿势

    一.前言 在我们日常工作中,除了Spring和Mybatis外,用到最多无外乎分布式缓存框架——Redis.但是很多工作很多年的朋友对Redis还处于一个最基础的使用和认识.所以我就像把自己对分布式缓 ...

  6. J2CACHE 两级缓存框架

    概述 缓存框架我们有ehcache 和 redis 分别是 本地内存缓存和 分布式缓存框架.在实际情况下如果单台机器 使用ehcache 就可以满足需求了,速度快效率高,有些数据如果需要多台机器共享这 ...

  7. 缓存框架Ehcache相关

    单点缓存框架   只能针对单个jvm中,缓存容器存放jvm中,每个缓存互不影响  Ehcache gauva chache 内置缓存框架 jvm缓存框架 分布式缓存框架(共享缓存数据)  Redis ...

  8. 7.4mybatis整合ehcache(mybatis无法实现分布式缓存必须和其他缓存框架整合)

    <\mybatis\day02\14查询缓存-二级缓存-整合ehcache.av> mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache-- 这里有做本 ...

  9. Redis 分布式缓存 Java 框架

    为什么要在 Java 分布式应用程序中使用缓存? 在提高应用程序速度和性能上,每一毫秒都很重要.根据谷歌的一项研究,假如一个网站在3秒钟或更短时间内没有加载成功,会有 53% 的手机用户会离开. 缓存 ...

随机推荐

  1. 帝国cms 描述和关键词动态获取

    之前列表页首页和内容页调用的关键词和描述的字段不一样,所以说需要写好几套模板. 下边这个判断就不用像之前做几套模板了,通过判断获取不一样的字段. $GLOBALS[navinfor] 这个判断的是此页 ...

  2. Qt Creator 4.10 Beta版发布

    使用Qt Creator 4.10 Beta,现在支持固定文件,因此即使在关闭所有文件时它们仍然保持打开状态,围绕语言服务器协议支持继续集成,将Android目标添加到CMake/Qbs项目,支持Bo ...

  3. c++ 指定目录下的文件遍历

    要实现指定目录下文件的遍历需要执行一下的部分: 第一步获取当前路径的名字:(MAX_PATH是在windows定义的所有的路径名字不超过其,调用该函数会使得得到当前的目录) #include < ...

  4. linux 查看cpu核心数

    1.查看CPU个数 cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l 2.查看每个物理CPU含有的核心个数 cat /pr ...

  5. Reservoir Computing: Harnessing a Universal Dynamical System

    原文连接:https://sinews.siam.org/Details-Page/reservoir-computing-harnessing-a-universal-dynamical-syste ...

  6. leetcode二刷结束

    二刷对一些常见的算法有了一些系统性的认识,对于算法的时间复杂度以及效率有了优化的意识,对于简单题和中等题目不再畏惧.三刷加油

  7. arm开发板make编译时遇到 make[2]:*** [s-attrtab] 已杀死 问题的解决方案

    未验证 出现“make[2]: *** [s-attrtab] 已杀死”log 是由于内存不足 解决方案 增加swapfile 步骤如下: 1. 查看当前swapfile状态 root@ubuntu: ...

  8. redis事务(转载)

    原文地址:http://blog.csdn.net/hechurui/article/details/49508749 Redis事务 首先,Redis本身是单线程的. redis中的事务(trans ...

  9. Java I/O(三)各种Reader和Writer读写器、RandomAccessFile随机访问文件、序列化

    2019 01/01 八.Reader和Writer读写器 前面讲的输入输出流的基本单位都是字节,因此可以称为“字节流”,读写器是以字符为基本单位,可以称为“字符流”.它们的使用方法非常相似,因此我考 ...

  10. 【洛谷P4309】最长上升子序列

    题目大意:给定一个序列,初始为空.现在我们将 1 到 N 的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 题解:学会了 rope 操 ...