缓存组件选型(上)

Posted 飘花醉人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存组件选型(上)相关的知识,希望对你有一定的参考价值。

 周一至周五不定时推送技术干货!精品技术文章准时送上!


缓存组件选型


本篇文章主要讲解和分享的是组件选型的上篇,其实写本篇文章的时候没有想到缓存组件还需要分为上篇和下篇,因为内容的确很多,所以需要从一而终的慢慢的分析和说明。

缓存主要分为几大类,也可以说分为几层缓存,由于强调的是基础知识,那么本篇文章就从几大类去说明,后续文章会有专门的专题说明几层缓存架构,我这边主要将缓存里面的主要组件做简单的说明和分析,如果需要特别详细的说明,请大家购买相关的书籍学习。我这里主要分为缓存的种类有CDN缓存,代理层缓存,本地缓存,分布式缓存,数据层缓存。

缓存组件选型上篇主要说明的是CDN缓存,代理层缓存,下片文章主要分享本地缓存,分布式缓存,数据层缓存。

CDN缓存

什么是CDN呢? CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

CDN主要解决将数据缓存到离用户最近的位置。国内网络异常复杂,跨运营商的网络访问会很慢。为了解决跨运营商或各地用户访慢的问题,可以在重要的城市,部署CDN应用。使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

那么使用CDN的场景和什么情况下使用CDN技术呢?缓存一些什么文件和数据信息呢?大家需要明白一个道理,CDN属于缓存的一种,当然不仅仅只有缓存一项功能。缓存我们主要缓存的是物质是什么?一般大致情况分为三类:数据,文件,对象

所以CDN的应用场景一般为缓存静态资源文件(页面,脚本,图片,视频,文件)等。不过像视频这样的东西,你得考虑用户活跃度和资源问题,如果CDN按照流量计费的话,成本是一个问题,大家需要谨慎考虑和选择。

接下来CDN有什么优点和缺点呢?先说说优点吧!

1.缓存加速,提升访问速度,同时根据智能DNS负载均衡,能够很快的远程减速,选择最近的cache服务提供服务。

2.广泛的DNS集群能够有效的防范和降低一些攻击,例如DOS攻击。

缺点呢?其实只有两点需要关注的,那就是一致性和时效性。所以应用CDN缓存的时候需要考虑资源的一致性和时效性的问题,过期策略等,比如定时过期,主动更新静态资源,版本号机制控制。

   

代理层缓存

1
 Squid组件

    Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求,Squid代理服务器工作在TCP/IP应用层。

其中Squid不能多核是硬伤,磁盘缓存容量有优势,性能中等,功能比较多,支持ACL角色控制,也支持ICP缓存协议。

详细参见: 

https://www.cnblogs.com/bluestorm/p/9032086.html


2
Varnish组件

Varnish是一款高性能的开源HTTP加速器据百度百科介绍,挪威最大的在线报纸 Verdens Gang 曾经使用3台Varnish代替了原来的12台Squid,性能比以前更好,它的总体设计思想和我们Reactor思想很类似,不过绝对不仅仅如此 Varnish由于是内存cache,所以对小文件如css,js,小图片啥的支持很棒。同时多核支持,内存缓存,性能强,感兴趣的小伙伴可以测试一下性能和指标,不过缺点也存在的,不支持集群,但是支持后端存活检查,不支持外部文件读取,需要转义,支持热启动。

详细参见: 

https://www.cnblogs.com/cutemsyu/p/6051876.html


3
 nginx组件

   

   1. 第三方插件ncache,使用第三方插件实现缓存。

   2.  proxy_cache功能,nginx官方自带的缓存插件。

   3. nginx+lua[实现本地缓存+中间件缓存],此方案比较灵活,能够和lua脚本实现较好的并且灵活性的缓存的实现,能够在代理层实现层级的缓存架构。

优缺点:

1.     nginx多核支持,支持代理插件,性能较强

2.   nginx简单,方便和灵活,可以自己实现本地缓存,也可以实现第三方缓存组件的使用。

3.   大多数的运维都会,剩余的两个组件可能在某些场景更加的专业,varnish在网页缓存的时候更好,但是需要耗费一些学习和研究的时间。

4
ATS组件

    通过转发代理缓存,ats代表请求内容的客户端队里对源服务器的web请求.反向代理缓存(也成服务器加速)不同在于ats 代表存储内容的源服务器充当代理缓存。ats配置为向外作为客户端尝试连接的源服务器。在典型情况下,源服务器的主机名解析为ats服务器,流量服务器直接面向客户端提供服务请求,必要时从真实源服务器获取内容

总结

缓存组件选型(上)
     在静态资源方面往往会选择CDN厂商提供的CDN的服务如亚马逊,阿里云等知名云厂商提供服务,在资源比较小的情况之下,自己组建CDN是不太合适的,而且资源文件在成本上面也是很低的。代理层的缓存可能需要根据公司的技术开发语言,在网络层选择那一层协议很相关,一般情况nginx比较适合做http协议的web服务器的代理缓存,当然新版本支持grpc的代理,在nginx网关做多层缓存也是比较容易实现的,同时nginx大家也是使用比较多,技术相对而言比较扎实一点,不过具体应用组件的选型还是希望大家结合自己公司的具体情况分析。
缓存组件选型(上)

End


扫描下方二维码,可以和作者共同探讨技术架构,项目管理等互联网项目。


缓存组件选型(上)



一大批关于java架构高并发高性能的文章正在逐渐来的路上...


欢迎扫描下方二维码,持续关注:


七夜(id:zfh806970740)






以上是关于缓存组件选型(上)的主要内容,如果未能解决你的问题,请参考以下文章

Memcached入门到缓存组件的选型

MDCC 2015开源选型之Android三大图片缓存原理特性对比

带你从零开始,开发一个阅读站第二章,技术选型

高性能的那些事儿-缓存设计

Go 本地缓存选型对比及原理总结

Go 本地缓存选型对比及原理总结