架构师课程第五周总结

这周的主题是缓存、异步和负载均衡。
对应解决的问题是高并发、可扩展。
缓存
缓存无处不在。缓存可以分为本地缓存和分布式缓存。
本地缓存有 CPU 缓存、操作系统缓存、数据库缓存、JVM 缓存。
分布式缓存有 CDN 缓存、代理和反向代理缓存、前端缓存、应用程序缓存、分布式对象缓存。
缓存的关键指标是缓存命中率。影响缓存命中率的主要指标有:
缓存键集合大小
缓存可使用的内存空间
缓存对象的生存时间
缓存键集合大小的关键点是一定要想办法减少可能的缓存键数量。
缓存对象越多,缓存命中率越高。
缓存的生存时间越长,被重用的可能性就越高。
代理缓存、反向代理缓存、CDN 缓存多是通读缓存。
通读缓存给客户端返回缓存资源,并在请求未命中缓存时获取实际数据。
客户端连接的是通读缓存而不是生成响应的原始服务器。
对象缓存是一种旁路缓存,旁路缓存通常是一个独立的键值对。存储。
应用代码通常会询问对象缓存是否存在,不存在则去访问对象来源获取。
分布式集群的可以使用本地对象缓存构建,也可以通过远程分布式对象缓存。
缓存产生的实质需求其实就是各种介质的读取差异性太大。下图描述了各种介质数据访问延迟:

在使用缓存的过程中,最重要的是把各种工具当缓存用,不要被各种奇技淫巧迷惑,把事情搞复杂。
异步
架构上的异步主要是通过消息中间件实现。
兼具更好的性能、更好伸缩性、削峰填谷、失败隔离和自我修复、解藕的功能。

负载均衡
负载均衡的架构有典型的负载均衡架构、HTTP 重定向负载均衡、DNS 负载均衡、反向代理负载均衡、IP 负载均衡、数据链路负载均衡。
典型的负载均衡架构

HTTP 重定向负载均衡

DNS 负载均衡

反向代理负载均衡

IP 负载均衡

数据链路负载均衡

评论