介绍

  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. 101、Service 之间如何通信?(Swarm08)

    参考https://www.cnblogs.com/CloudMan6/p/7967419.html   微服务架构的应用由若干 service 构成.比如有运行 httpd 的 web 前端,有提供 ...

  2. Swift(一)语言介绍

    Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题. Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在其中 ...

  3. MySQL索引之数据结构及算法原理

    MySQL索引之数据结构及算法原理 MySQL支持多个存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.本文只关注BTre ...

  4. 26、Nginx Uwsgi代理

    1.Uwsgi代理基本概述 cgi.fastcgi.wsgi.uwsgi python框架 Django是一个开放源代码的web的框架 Flask是一个使用python编写的轻量级web应用框架 2 ...

  5. 常用数据存储格式之xml

    常用数据存储格式介绍 XML 被设计用来传输和存储数据,其焦点是数据的内容. HTML 被设计用来显示数据,其焦点是数据的外观. 语法规则: XML 文档必须有一个根元素 XML元素都必须有一个关闭标 ...

  6. Import Error:cannot import name main解决方案

    在Ubuntu上安装软件,不小心升级了pip,导致使用时报错如下: Import Error:cannot import name main 后来发现是因为将pip更新为10.0.0后库里面的函数有所 ...

  7. java多线程的四种实现方式

    主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Callable.Futur ...

  8. maven私仓搭建——nexus3

    maven私仓搭建——nexus3本文主要介绍maven私仓在windows下的搭建.本文主要参考:http://www.cnblogs.com/bingyeh/p/5913486.html好,下面上 ...

  9. windows2012 下面php7.2 安装mongodb4.0.4的扩展以及操作mongodb的方法

    php连接mongodb驱动 的下载页面http://pecl.php.net/package/mongodb 数据插入: $manager = new MongoDB\Driver\Manager( ...

  10. springmvc4.3.7中使用RequestBody,传入json参数时,得到错误415 Unsupported Media Type

    在新建一个maven的项目的时候,当时并非springboot项目,是通过xml来配置的项目.在项目中DispatcherServlet的配置文件中配置了annotation-driven的, < ...