徐汉彬:大规模网站架构的缓存机制和几何分形学徐汉彬:大规模网站架构的缓存机制和几何分形学
缓存机制简单总结可以说是空间换时间,被用于提升系统交互的效率。而有趣的是,这种缓存机制令人惊奇并且优美的遵循
着“几何分形”的规律,也就是几何分形学中的“自相似性”。
徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,
从事SaaS服务技术建设。
在过去的工作中,徐汉彬从事各类缓存建设和优化,遇到问题无数,从各种各样的问题中,逐渐总结出它们之间的“共性”,而
这个“共性”又优雅地遵循“几何分形学”。从几何分形的角度去看待缓存机制,能够更容易和更清晰地表述出它的深层原理和部
署思想。帮助技术人员去解决在缓存上遇到的技术问题。
缓存机制和几何分形学
缓存机制在我们的实际研发工作中,被极其广泛地应用,通过这些缓存机制来提升系统交互的效率。简单的总结来说,就是在
两个环节或者系统之间,会引入一个cache/buffer做为提升整体效率的角色。
而有趣的是,这种缓存机制令人惊奇并且优美的遵循着“几何分形”的规律,也就是几何分形学中的“自相似性”:从整体上看遵
循某种组成规律或者特性,同时从每一个局部看,仍然遵循某种组成的规律或者特性。我们的这些系统,从整体上看遵循了缓
存机制,每一个组成的局部也遵循缓存机制。
等同类比的一个概念,我们常常说的“空间换时间”,牺牲一部分空间代价,来换取整体效率的提升。
例如A和B两者之间的数据交换,为了提升整体的效率,引入角色C,而C被用于当做热点数据的存储,或者是某种中间处理的
机制。
我们先从web前端层面开始,看看有哪些比较关键的缓存机制?它们又是怎样协调工作的呢?
一、前端Cache机制
1. 域名转为域名转为IP地址(域名服务器地址(域名服务器DNS缓存)缓存)
我们知道域名其实只是一个别名,真实的服务器请求地址,实际上是一个IP地址。获得IP地址的方式,就是查询DNS映射表。
虽然这是一个非常简单的查询, 但如果每次用户访问一个url都去查询DNS一次,未免显得太频繁,会产生一个可怕的访问量
级。DNS服务器会告诉你,你别老是经常过来,万一我挂了,我们就无法愉快地玩耍了。
各个浏览器的缓存时间,会有一定的差别。例如,在chrome浏览器中查看dns的缓存时间的方式是:chrome://net-
internals/#dns。
浏览器一般会在本地会建立一个DNS缓存,在一段比较长的时间里,都是使用本地的缓存映射。例如,在Win7系统的cmd
里,可以通过“ipconfig /flushdns ”的方式来立刻刷新本地DNS。
优点:优点:域名映射为IP非常快。
成本:成本:消耗一定的浏览器空间来存储映射关系
2. 访问服务器,获取静态内容(地理位置分布式服务访问服务器,获取静态内容(地理位置分布式服务CDN))
可能有人会觉得,这个CDN不是缓存。其实,CDN的原理就是将离你很远的东西,放在离你很近的地方,通过这种方式提高
用户的访问速度。从这个角度,它也可以理解为牺牲空间成本换取了时间,本质上也是一种特殊的中间cache。腾讯、阿里等
这些大的一线互联网公司一般倾向于自己建立CDN系统,中小型企业也经常使用第三方的CDN服务。
优点:优点:解决用户离服务器太远的时候,网络路由中跳来跳去的严重耗时。
成本:成本:全国各地部署多套静态存储服务,管理成本比较高,发布新文件的时候,需要等待全国节点的更新等。