#研发解决方案#discache-分布式缓存查询与管理系统

郑昀 基于马海元和闫小波的文档

关键词:
memcached
、redis、分布式缓存、控制台、反序列化、Java


本文档适用人员:研发和运维员工

提纲:

  1. 如何查看缓存里的序列化数据?
  2. 批量删除来一个
  3. 监控每个缓存端口的访问情况是很有必要的
  4. discache 解决了这些问题

    电商系统的分布式缓存一般是 redis 和 memcached 集群,每一个节点上会起很多实例,因为一个业务类型对应于一个端口,拆分得很清楚。既然节点很多,端口很多,业务也在变化,随时都有变动,如何管理呢?当然,最迫切的需求是下面这个,不解决的话就会很麻烦。

0x01.如何查看缓存里的序列化数据?

Java 工程通常
把类实例对象序列化后存储在缓存里。其次,不同端口存的类对象还不一样。最后,类对象还有版本之分,你手头不见得有正确的线上版本 class 文件来反序列化。

总之,当你想看看键值里存的是什么内容时,会非常麻烦,所以我们迫切需要一个系统。

0x02.批量删除来一个

有时候线上缓存数据想按某个规则删掉一批,没有一个趁手的工具的话,那遇到急茬儿事还真是手忙脚乱,尤其是有时候上线预热数据预热错了的时候。假如能按照某个通配符规则批量删除,善莫大焉。

0x03.监控每个缓存端口的访问情况是很有必要的

慢日志

redis 支持各种数据结构,还支持模糊查询,所以容易在线上出现慢查询。因此,有一个慢查监控还是很能发现问题的。

指令执行情况

缓存的指令处理速度、内存使用情况、DB Size 等等,这些能实时观测也是最好。

0x04.discache 解决了这些问题

2014年,在张鑫和闫小波的努力下,discache 如期发布,也纳入到了 IdCenter 体系下。

什么是 discache?

窝窝主站的分布式缓存管理平台,由
节点管理、数据查询、基本信息和慢日志四部分功能组成的。

入口在这里:

图1 idcenter的主界面

discache 主界面长这样:

图2 discache节点管理界面

你可以按关键词搜索节点名称:

图3 按order关键词搜索所有分布式缓存节点

来,咱们看看慢日志。

找到对应节点后,点击那个黄色操作按钮。

图4 某个节点的慢日志

慢日志列表也是可以搜索的。

上图里的用时为什么这么慢呢?这些请求都是 redis 模式匹配式的指令,数据量大的情况下响应时间确实比 get 单个 key 要多很多。

再来看看基本信息,也就是实时监控:

图5 某个节点的实时监控信息

选好某个节点后,页面会一直更新数据。

discache 如何解决最根本的需求:反序列化键值

选择某个缓存节点,输入 key 名,支持通配符查询,如“*index*”、“g_*”等,如果之前有人已经上传过 CLASS 文件,则点击某个 key 可以直接展示 value 内容,否则需要上传一个 CLASS 文件来反序列化。

图6 key 模糊搜索和反序列化

如上图所示,还展示了某个 key 的过期时间。还支持gzip解压缩功能,支持多种反序列化方式,如下图所示。

图7 序列化下拉列表

注意,可以点击“全部删除”按钮将搜到的键值都删掉。

好了,我们上面演示了对某个分布式缓存节点的键值查询、批量删除和单个删除、慢日志、实时监控。discache 大大提升了窝窝项目中缓存管理效率。

下面大致说一下查询的工作原理:

把缓存查询转换成 memacache 或 redis 的一组命令来实现,redis 有各种数据结构,那么每种存储结构的查询指令都不一样,界面设计中只需要输入指定的 key 值,在底层 java 实现中会尝试各种查询指令,直到查询到正确值为止。

-EOF-

时间: 2024-10-15 02:37:08

#研发解决方案#discache-分布式缓存查询与管理系统的相关文章

第八章 企业项目开发--分布式缓存memcached

注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存越来越小,最后系统会被拖慢(这一点与第二点联系起来) 本地缓存存于本机,其缓存数量与大小受本机内存大小限制 本地缓存存于本机,其他机器的访问不到这样的缓存 解决方案:分布式缓存 Jboss cache:缓存还存于本机,但是会同步更新到其他机器(解决了第三个问题,解决不了第一和第二个问题),如果缓存机器数量很多

VelocityCache 是微软推出的分布式缓存解决方案

VelocityCache 是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以缓存各种类型的数据,如CLR对象.XML.二进制数据等,并且支持集群模式的缓存服务器.Velocity也将集成在.NET Framework 4.0中

6种.net分布式缓存解决方案

6种.net分布式缓存解决方案 1.     使用内置ASP.NET Cache (System.Web.Caching) : https://msdn.microsoft.com/en-us/library/system.web.caching(v=vs.110).aspx 2.     使用System.Runtime.Caching: https://msdn.microsoft.com/en-us/library/system.runtime.caching(VS.100).aspx 3

分布式缓存(MemCached)

最近在为找工作做准备,就看了好多.NET基础知识,发现很多关于页面之间传值的方式,其中就有Session,但也发现Session在实际使用过程中有很多问题.最典型也最重要大的BUG就是如果IIS中同时有很多进程发生时,内存不够用那么有垃圾回收机制,就会导致Session的丢失.解决方法有:可以用Sate Server或SQL Server数据库的方式存储Session,可是这两种方式都有个缺点就是处理速度慢,无法捕获END事件.因此,我便想那么还有什么方式可以解决这一问题呢? 结果就是使用分布式

为什么需要使用分布式缓存

转载:http://in.relation.to/Bloggers/StrongLiu 为什么需要使用分布式缓存(数据网格)呢? 本文旨在回到这个问题. 首先, 它是进化的产物. 本地缓存 > 集群缓存 > 分布式缓存(数据网格) 使用分布式缓存的原因中包括了为什么使用缓存集群, 而使用缓存集群的原因中包括了为什么使用本地缓存.(译注: 这句话感觉上真怪.) 性能 访问本地缓存中的一个对象比直接访问远端数据存储引擎(例如数据库)要快很多. 直接访问一个已经存在的对象比从数据创建一个对象要快.

分布式缓存--MVC+EF+Memcache

一.从单机到分布式 现在三台机器组成一个Web的应用集群,其中一台机器用户登录,然后其他另外两台机器如何共享登录状态? 解决方案: 1.AspNet进程外的Session . 2.用数据库存数等钱登录状态. 3.Memcache. 二.为什么用Memcache? 1.解决高并发访问数据库带来的死锁 2.多用户端共享缓存 三.Memcache原理 其实memcache是一种windows服务,客户端发来的请求,都会被Socket服务器端接受到.存数使用键值对存储的.客户端进行存储的时候,就是找最接

#研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案

郑昀 基于李丹和刘奎的文档 创建于2014/12/5 关键词:监控.dashboard.PHP.graphite.statsd.whisper.carbon.grafana.influxdb.Python 本文档适用人员:研发和运维员工 提纲: 监控平台要做到什么程度?为什么要自己做? 几个通用技术问题 绘图所依赖的数据如何收集?如何加工?如何存储? 图形如何绘制,各种指标如何叠加? 拓扑关系如何绘制? 技术选型哲学 最终选了statsd+graphite 数据的采集 数据存储的粒度 天机的技术

阿里云分布式缓存OCS与DB之间的数据一致性

[分布式系统的数据一致性问题]   OCS概要介绍 据AlertSite网络分析公司表示,Facebook的响应时间在2010年平均为1秒钟,到2011年中期已提高到了0.73秒.对比来看,响应时间占第二位的LinkedIn,网络下载内容时要花费将近2倍的时间.Twitter的响应时间则整整迟了2秒钟.响应时间优化的首要手段就是采用缓存技术,减少系统间交互请求和磁盘IO. OCS是阿里巴巴集团的分布式缓存产品,支撑着淘宝.阿里巴巴.支付宝的日常运作,尤其在双11等大型活动上,承载了绝大多数的数据

分布式缓存-数据映射设计

在日常开发中,常常用到很多类似的数据及相同结构的表数据,在架构设计中,我们可以将这些数据可变或者不变的固定结构数据放到一张通用表中,做成类似数据字典形式,这样,开发中,直接使用这类数据,通过主要关键词或者键获取具体的value 1:各种下拉框,各种选择器 2:错误码,返回码,映射数据 3:通用key value结构的数据 1:数据库设计 -- 创建数据映射表 create table T_DATA ( t_data_id VARCHAR2(100) not null,--数据主键 t_data_