缓存组件选型(上)
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缓存的时候需要考虑资源的一致性和时效性的问题,过期策略等,比如定时过期,主动更新静态资源,版本号机制控制。
代理层缓存
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求,Squid代理服务器工作在TCP/IP应用层。
其中Squid不能多核是硬伤,磁盘缓存容量有优势,性能中等,功能比较多,支持ACL角色控制,也支持ICP缓存协议。
详细参见:
https://www.cnblogs.com/bluestorm/p/9032086.html
Varnish是一款高性能的开源HTTP加速器,据百度百科介绍,挪威最大的在线报纸 Verdens Gang 曾经使用3台Varnish代替了原来的12台Squid,性能比以前更好,它的总体设计思想和我们Reactor思想很类似,不过绝对不仅仅如此 Varnish由于是内存cache,所以对小文件如css,js,小图片啥的支持很棒。同时多核支持,内存缓存,性能强,感兴趣的小伙伴可以测试一下性能和指标,不过缺点也存在的,不支持集群,但是支持后端存活检查,不支持外部文件读取,需要转义,支持热启动。
详细参见:
https://www.cnblogs.com/cutemsyu/p/6051876.html
1. 第三方插件ncache,使用第三方插件实现缓存。
2. proxy_cache功能,nginx官方自带的缓存插件。
3. nginx+lua[实现本地缓存+中间件缓存],此方案比较灵活,能够和lua脚本实现较好的并且灵活性的缓存的实现,能够在代理层实现层级的缓存架构。
优缺点:
1. nginx多核支持,支持代理插件,性能较强。
2. nginx简单,方便和灵活,可以自己实现本地缓存,也可以实现第三方缓存组件的使用。
3. 大多数的运维都会,剩余的两个组件可能在某些场景更加的专业,varnish在网页缓存的时候更好,但是需要耗费一些学习和研究的时间。
通过转发代理缓存,ats代表请求内容的客户端队里对源服务器的web请求.反向代理缓存(也成服务器加速)不同在于ats 代表存储内容的源服务器充当代理缓存。ats配置为向外作为客户端尝试连接的源服务器。在典型情况下,源服务器的主机名解析为ats服务器,流量服务器直接面向客户端提供服务请求,必要时从真实源服务器获取内容。
总结
End
扫描下方二维码,可以和作者共同探讨技术架构,项目管理等互联网项目。
一大批关于java架构高并发高性能的文章正在逐渐来的路上...
欢迎扫描下方二维码,持续关注:
七夜(id:zfh806970740)
以上是关于缓存组件选型(上)的主要内容,如果未能解决你的问题,请参考以下文章