介绍

  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. 关于catopen函数

    关于catopen函数: 参考网址:http://pubs.opengroup.org/onlinepubs/009695399/functions/catopen.html 1)编辑消息文件 [ro ...

  2. mysql如何快速创建相同结构的表

    [1]. 快速创建相同结构的表,包括索引: mysql> SHOW CREATE TABLE a; CREATE TABLE `a` ( `name` varchar(50) default N ...

  3. 4.(基础)tornado应用安全与认证

    这一节我们介绍应用安全与认证,其实中间省略了一个数据库.对于tornado来说,读取数据库的数据,性能的瓶颈还是在数据库上面.关于数据库,我在<>中介绍了sqlalchemy,这是一个工业 ...

  4. vm安装ubantu的详细过程(转载)

    这里转载一个非常实用的vm虚拟机安装linux系统的文章有需要的可以看下面链接: https://blog.csdn.net/u013142781/article/details/50529030

  5. CAS JDK 证书错误学习笔记

    通过之前生产上发现的问题总结得出以下结论:  问题现象就是:由F5 进行分发到cas 两个服务端 导致 客户端访问时  (时好时坏的现象 ) 通过在服务端的查看apahce 的访问日志得出的结论  发 ...

  6. php检测函数是否存在函数 function_exists

    php检测函数是否存在函数 function_exists 语法 bool function_exists ( string $function_name )检查的定义的函数的列表,同时内置(内部)和 ...

  7. mysql和oracle的语法差异(网络收集)

    oracle没有offet,limit,在mysql中我们用它们来控制显示的行数,最多的是分页了.oracle要分页的话,要换成rownum. oracle建表时,没有auto_increment,所 ...

  8. 本地安装sass出错问题解析

    2016年3月23日个人博客文章--迁移到segmentfault 安装sass ruby安装因为sass依赖于ruby环境,所以装sass之前先确认装了ruby.先导官网下载个ruby 在安装的时候 ...

  9. Python 3标准库 第十四章 应用构建模块

    Python 3标准库 The Python3 Standard Library by  Example -----------------------------------------第十四章   ...

  10. Python---函数参数---王伟

    #### 定义函数 ```python#定义函数def function():    print("hello world")#调用函数function() #输出结果hello ...