下面的译文来自ATS官方交流博客中豪哥的一篇英文介绍,碰巧工作中又要用到,为了大家阅读方便,我特此翻译如下,不妥之处请指正:

说明:
慢速磁盘指普通的3.5寸硬盘,快速磁盘指ssd

缓存中间层
当我们考虑ATS的存储时,最原始的设计是支持具有相同容量的多块磁盘,(最适合没有做raid的块设备),由此构建分区,将每个分区指定某个域名(主机名),我们发现假如我们不对现有缓存设计做大的变动,我们就不能利用简单的方式来得到多级缓存架构,因此我们得到下面的中间层解决方案:
我们假定你部署混合存储(方案),快速磁盘在容量或是个数上小于慢速设备的十分之一
我们假设在绝大多数情况下,8块快速磁盘已经相当多了
我们假设你的慢速设备每块盘不会超过32TB
慢速设备存放所有的数据,这样的话,万一有快速磁盘缓存失败时数据不会丢失
相较于存储百分比,快速磁盘在服务器重启期间可能丢失数据10%的数据
快速磁盘应当对所有的慢速磁盘在容量和IOPS上做均衡,磁盘分区基于慢速磁盘创建,对应的扇区分散在各个磁盘上,负载也应该在各个快速磁盘上做均衡

负载均衡设计
cache的中间层以快速磁盘为主(绝大多数情况下是SSD),重启服务器进程会丢失数据, 因此只将中间数据(有备份)存放到中间层缓存中
我们最多支持8块高速磁盘
我们做了一个块级别(block level)的中间层缓存,(不像慢速磁盘)它不含任何索引信息

我们已经完成的工作
借用Dir结构体中的4bit来区分每个快速磁盘(因而快速磁盘个数不能超过32)
限制磁盘上限是32TB
使用volume.config中的配置来对每块快速磁盘分区并绑定之
将中间层数据存到慢速磁盘的dir结构体中
将源服务器的数据写到慢速磁盘
构建一个内部的LRU链表,大小限制为1M的bucket,将busy blocks备份到快速磁盘上
调用快速磁盘上的热点数据,为了使它更高效,我们需要不断比较LRU链表中的blocks
混合缓存设备(快速磁盘)也是呀RRD写数据

优缺点pros and cons
优点:
我们做了一个可靠的解决方案,它对当前的存储架构没有做大的改动
LUR算法有助于我们得到热的block,它是有效的
block层级的中间层缓存对大小对象都有作用
缺点:
服务器进程崩溃时会丢失数据,已在TS-2275中修正
仅只能有限个块设备用作中间层缓存设备
中间层缓存设备在空间上不是追加,而仅是慢速磁盘设备上的热点数据的复制
我们设置存储系统的最大磁盘大小是0.5PB到32TB
默认配置情况下并不开启中间层缓存功能

代码及更改要点
the change of Dir:
@@ -155,15 +157,42 @@ struct FreeDir
   unsigned int reserved:8;
   unsigned int prev:16;         // (2)
   unsigned int next:16;         // (3)
+#if TS_USE_INTERIM_CACHE == 1
+  unsigned int offset_high:12;   // 8GB * 4K = 32TB
+  unsigned int index:3;          // interim index
+  unsigned int ininterim:1;          // in interim or not
+#else
   inku16 offset_high;           // 0: empty
+#endif
 #else
   uint16_t w[5];
   FreeDir() { dir_clear(this); }
we split the stat of read_success into disk, interim and ram:
@@ -2633,6 +2888,11 @@ register_cache_stats(RecRawStatBlock *rsb, const char *prefix)
   REG_INT("read.active", cache_read_active_stat);
   REG_INT("read.success", cache_read_success_stat);
   REG_INT("read.failure", cache_read_failure_stat);
+  REG_INT("interim.read.success", cache_interim_read_success_stat);
+  REG_INT("disk.read.success", cache_disk_read_success_stat);
+  REG_INT("ram.read.success", cache_ram_read_success_stat);
   REG_INT("write.active", cache_write_active_stat);
   REG_INT("write.success", cache_write_success_stat);
   REG_INT("write.failure", cache_write_failure_stat);

如何启用中间层缓存
添加--enable-interim-cache编译选项来配置开启缓存中间层功能
另外在主配置文件records.config中增加两个配置项
proxy.config.cache.interim.storage:
用于缓存中间层的磁盘设备,只支持全路径设备,多个磁盘使用空格分隔开
比如:
LOCAL proxy.config.cache.interim.storage STRING /dev/sdb /dev/sdc1

proxy.config.cache.interim.migrate_threshold:
迁移阈值,默认是2次,就是说,当一个url在LRU链表中出现2次以后,它才会从慢速硬盘存储storage转移到缓存中间interim cache中去。
比如:
LOCAL proxy.config.cache.interim.migrate_threshold 2

测试结果
我们的系统有160G SSD + 3 * 500G SAS, 16G RAM, 4 cores,下面是tsar和iostat -x的执行结果
tsar ======================================================================================
Time           --------------------ts------------------ -------------ts_cache-----------
Time              qps    cons     Bps      rt     rpc      hit  ramhit    band  ssdhit
24/06/13-10:30 901.83   18.89   22.6M   17.36   47.74    87.30   68.08   88.90   22.49
24/06/13-10:35 934.12   18.88   22.0M   14.34   49.47    87.60   68.53   90.70   22.21
24/06/13-10:40 938.14   18.92   21.7M   15.36   49.58    87.70   68.02   89.50   22.45

iostat -x ==================================================================================
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.47    0.00   15.62   25.09    0.00   53.82
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     7.33   25.67    3.33  1600.00  1438.00   104.76     0.45   15.46  12.17  35.30
sdb               0.00     0.00   28.67   11.33  1461.00  8723.00   254.60     0.74   18.47  11.21  44.83
sdc               0.00     0.00   25.67    2.00  2178.00  1373.33   128.36     0.40   14.05  11.04  30.53
sdd               0.00     0.00  196.00    4.00 14790.00  2823.00    88.06     0.13    0.66   0.41   8.30   猜测这块硬盘是ssd

参考文献

[1].https://blog.zymlinux.net/index.php/archives/555

[2].https://cwiki.apache.org/confluence/display/TS/SSDSupport

ATS缓存中间层介绍相关推荐

  1. CYQ.Data V5 分布式自动化缓存设计介绍(二)

    前言: 最近一段时间,开始了<IT连>创业,所以精力和写的文章多数是在分享创业的过程. 而关于本人三大框架CYQ.Data.Aries.Taurus.MVC的相关文章,基本都很少写了. 但 ...

  2. 分布式缓存Redis介绍

    分布式缓存Redis介绍      简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具          1.redis官网 https://redis.io/download        ...

  3. 后端:MyBatis缓存知识介绍

    今天给大家分享一下MyBatis缓存知识介绍,希望对大家日常的开发当中能有所帮助! 一.MyBatis一级缓存 1.一级缓存介绍 当我们的程序MyBatis开启一次和数据库的会话,MyBatis会自动 ...

  4. java预研项目_缓存java框架技术预研3:JAVA缓存技术介绍

    几个著名Java开源缓存框架介绍(OSCache,JSC) OSCache是个一个广泛采用的高性能的缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案. OSCache有以下特点: ...

  5. android pad 清除缓存,ipad清理缓存经验介绍

    ipad清理缓存经验介绍 导语:ipad清理缓存经验介绍?快速清除缓存(Quick App Manager)Quick App Clean Cache 能够列出手机中所有 Android 软件的缓存, ...

  6. 千牛如何撤销发往服务器的文件夹,千牛怎么清理缓存?两种清理千牛缓存方法介绍...

    千牛怎么清理缓存呢?如果缓存太多,千牛客户端会提示清理缓存,但是有很多朋友对于千牛怎么清理缓存还不太清楚,下文小编就为大家带来两种清理千牛缓存方法介绍,有需要的朋友一起去看下吧. 软件名称: 千牛电 ...

  7. Memcached 与Redis缓存服务器介绍

    Memcached缓存 简单介绍:memcached是高性能的分布式内存缓存服务器.一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度.提高可扩展性. Redis ...

  8. 分布式缓存使用介绍MemCache

    参考网址:http://www.jb51.net/article/66525.htm 概述 memcache是一套开放源的分布式高速缓存系统.由服务端和客户端组成,以守护程序(监听)方式运行于一个或多 ...

  9. HTTP缓存原理介绍

    通过Internet获取资源既缓慢,成本又高.为此,Http协议里包含了控制缓存的部分,以使Http客户端可以缓存和重用以前获取的资源,从而优化性能,提升体验.虽然Http中关于缓存控制的部分,随着协 ...

最新文章

  1. 数据结构与算法之冒泡排序
  2. WebApiClient的JsonPatch局部更新
  3. 用英语描述计算机操作,操作系统的英文介绍
  4. 查询屏幕中一个已知颜色的值
  5. 基于阿里云上实现全站https
  6. 【图像分割】基于matalb灰狼算法最小交叉熵多阈值图像分割【含Matlab源码 903期】
  7. 2021FME博客大赛 —— 利用FME实现三调地类图斑统计分析
  8. 丝滑流畅的手写签名 PC适配版
  9. win10更新后wifi提示无法连接到该网络,终极解决方法
  10. 目前人工智能的主要研究方向都有哪些?
  11. Flash activex控件版本信息
  12. 短信管理器android,短信夹管理软件-短信夹管理app预约v1.4.3 安卓版-西西软件园...
  13. 福利群怎么引流?微信群引流技巧
  14. 超分辨率的国内外研究现状
  15. 使用Python登录QQ邮箱发送QQ邮件
  16. pikachu暴力破解
  17. excel如何将数字由文字格式转换为数字格式
  18. vue 项目 webstrom IDE格式化代码规则遵循eslint设置
  19. 树莓派安装opencv4.3.0
  20. 求助高手:惠普HP NC523FSP 网卡在Windows10 64位系统下的驱动程序

热门文章

  1. redis sentinel集群配置及haproxy配置
  2. Unity3D中的函数方法及解释
  3. Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析
  4. 调试 后台 ajax post 对应的php的方法
  5. linux下遇到的小问题与解决方法
  6. 十一运夺金基础数据采集工具
  7. 哈佛管理论丛:谁背上了令人讨厌的猴子
  8. 带套属于安全行为吗_教师不管学生上课睡觉的行为,属于不负责任吗?建议收藏!...
  9. 如何删除linux的root权限,永久删除现代Linux的root权限
  10. html 页面自适应窗口大小,JavaScript实现自适应窗口大小的网页