云端架构之道:缓存为王,以空间换时间的艺术

2019-11-06  本文已影响0人  云计算那些事儿

最近写架构的文章,主要围绕如何在云端进行系统架构的设计。

虽然拟定了架构设计系列文章的大纲,但打算还是想到哪里写到哪里,争取坚持到年底,形成一个比较完整的架构设计的骨架。

接下来,我们会开启“缓存为王”的篇章,今年上半年花了点时间学习了缓存方面的技术,缓存是架构设计非常重要的一个环节,是架构师必须要掌握的技能,希望我的分享能够给大家带来帮助。

01.

什么是缓存

存储在计算机上一个原始数据复制集,以便于访问。   --维基百科

缓存是系统快速响应中的一种关键技术,是一组被保存起来以备将来使用的东西,介于应用开发和系统开发之间,是产品经理们经常顾及不到的地方,也是技术架构设计中的非功能性约束。

我们可以这样理解,把你经常用的东西copy一份放在离你最近的地方,下次你用就更快了。

02.

空间换时间的艺术

缓存是通过存储(空间)的消耗,以提升访问性能(获得时间)的艺术。

在军事领域的二个案例:

1)二战中,德国打俄罗斯,俄罗斯就得益于自己的土地辽阔,空间大,战略纵深帮了大忙,容易打持久战,不可能被迅速打败。而德国时间上拖不起,不能速胜,随着时间推移,全球形式瞬息万变,自然气候也不允许德国久战,空间换时间,时间带来变数。

2)白崇禧,国民政府指挥抗日战争的重要将领,研究了拿破仑入侵俄国的战争,提出了“积小胜为大胜,以空间换时间,以游击战辅助正规战,与日本人作长期抗战”的重要军事指导思想,密令张自忠将军于日军侵占华北初期,与日军周旋,缓解敌军攻势,并且争取后方整补时间,以拖延战术换取国民党政府有充足时间准备全面战争。

在商业领域,比如通过在全国各地开连锁店,可以将自己的产品和商业模式迅速在全国复制推广,对与老百姓,可以就近很方便的享受到体验一致的产品和服务质量。

在生活中,当我们生活在一线城市,如果家住通州,市区通勤上下班会达到三四个小时,减少通勤时间最简单的办法就是在公司附近租房子,能够极大的压缩通勤的时间。

所以说,缓存的思想无处不在。

03.

为何要用缓存

在“用户体验”至上的互联网时代,唯有提升访问性能才是王道。

当客户访问页面或是交易加载时间每延迟一秒,继续浏览、转化率、满意度都会下降,尤其是满意度,会影响到网站的口碑。

04.

缓存的设计架构

我们在搭建系统架构的时候,为了提升访问性能,会在系统的各个层面考虑使用缓存技术:

当客户使用浏览器访问web应用的时候,浏览器会缓存页面的静态资源,DNS会缓存IP地址,再次访问的时候,能够加速网址的解析和页面的访问性能;通过CDN网络,使得客户能够就近访问热点资源,而不是到源站访问资源,避免源站的网络拥堵;Web应用会使用本地缓存加速进程内的数据访问性能;为避免数据库访问的性能瓶颈,使用分布式缓存技术,将查询热点数据缓存到内存中,供应用程序访问,同时,数据库本身也具备缓存机制提升访问效率。如下图所示

客户端缓存

当我们通过客户端的浏览器首次打开一个页面的时候,通常响应速度要比第二次打开要慢,是因为首次打开页面的时候,浏览器会将 HTML、CSS、JavaScript、图片等静态资源进行缓存,避免了再次访问下载资源的时间开销。

DNS缓存

DNS缓存是指在正常访问ip之后,系统会将这个ip存储起来,当再次访问的时候,系统就会直接把本地的DNS缓存提取显示,等于是加速了网址的解析。

CDN网络

CDN是构建在互联网上的内容分发网络,依靠部署在各地边缘节点的缓存服务器,通过中心节点将源站的热点静态资源推送的边缘节点,使用户就近获取所需内容,降低网络拥塞,大大提高用户的访问响应速度。

反向代理缓存

反向代理位于服务器之前,请求与响应都需要经过反向代理。通过将数据缓存在反向代理,在用户请求反向代理时就可以直接使用缓存进行响应。

应用缓存

将数据缓存在服务器本地内存中,服务器代码可以直接读取本地内存中的缓存,速度非常快。

分布式缓存

使用 Redis、Memcache 等分布式缓存将数据缓存在分布式缓存系统中,比起直接从数据库读取数据,访问性能有数量级的提升。

数据库缓存

SQL&NoSQL等数据库系统具有自己的查询缓存机制来提高查询效率。

后面我们会对重点的缓存技术进行专题阐述。

上一篇下一篇

猜你喜欢

热点阅读