- 通读缓存
假设当前应用程序获取数据,如果数据存在于通读缓存中就直接返回 。如果不存在于通读缓存,那么就访问数据源,同时将数据存放于缓存中 。
下次访问就直接从缓存直接获取 。比较常见的为CDN和反向代理 。

文章插图
通读缓存
CDN
CDN称为内容分发网络 。想象我们京东购物的时候,假设我们在成都,如果买的东西在成都仓库有就直接给我们寄送过来,可能半天就到了,用户体验也非常好,就不用从北京再寄过来 。
同样的道理,用户就可以近距离获得自己需要的数据,既提高了响应速度,又节约了网络带宽和服务器资源 。
- 旁路缓存

文章插图
旁路缓存
缓存的好处
- 因为大部分缓存的数据存储在内存中,相比于硬盘或者从网络中获取效率更高,响应时间更快,性能更好;
- 通过 CDN 等通读缓存可以降低服务器的负载能力;
- 因为缓存通常会记录计算结果 。如果缓存命中直接返回,否则需要进行大量的运算 。所以使用缓存也减少了CPU 的计算小号,加快处理速度 。
我们缓存的数据来自源数据,如果源数据被修改了,俺么缓存数据很肯能也是被修改过的,成为脏数据,所以怎么办?
- 过期失效
在每次写入缓存数据的时候标记失效时间,读取数据的时候检查数据是否失效,如果失效了就重新从数据源获取数据 。
- 失效通知
应用程序在更新数据源的时候,通知清除缓存中的数据 。是不是数据使用缓存都有意义呢?
非也,通常放入缓存中的数据都是带有热点的数据,比如当日热卖商品,或者热门吃瓜新闻,这样将数据存放在缓存中,会被多次读取,从而缓存的命中率也会比较高 。

文章插图
异步架构
在前面中,通过缓存实际上很多时候是解决了读的问题,加快了读取数据的能力 。因为缓存通常很难保证数据的持久性和一致性,所以我们通常不会将数据直接写入缓存中,而是写入 RDBMAS 等数据中,那如何提升系统的写操作性能呢?此时假设两个系统分别为A,B,其中A系统依赖B系统,两者通信采用远程调用的方式,此时如果B系统出故障,很可能引起A系统出故障 。
从而不得不单独进行升级,怎么办?使用消息队列的异步架构,也成为事件驱动模型 。
异步相对于同步而言,同步通常是当应用程序调用服务的时候,不得不阻塞等待服务期完成,此时CPU空闲比较浪费,直到返回服务结果后才会继续执行 。

文章插图
同步
举个例子,小蓝今天想在系统中加一个发邮件的功能,通过SMTP和远程服务器通信,但是远程服务器有很多邮件需要等待发送呢,当前邮件就可能等待比较长时间才能发送成功,发送成功后反馈与应用程序 。
这个过程中,远程服务器发送邮件的时候,应用程序就阻塞,准确的说是执行应用程序的线程阻塞 。
这样阻塞带来什么问题“?
- 不能释放占用的系统资源,导致系统资源不足,影响系统性能
- 无法快速给用户响应结果

文章插图
消息队列的异步模型
此时就比较清晰了,调用者将消息发送给消息队列直接返回,应用程序收到返回以后继续执行,快读响应用户释放资源 。
有专门的消费队列程序从中消息队列取出数据并进行消费 。如果远程服务出现故障,只会传递给消费者程序而不会影响到应用程序 。
推荐阅读
- 同步与异步Python有何不同?
- 8种ETL调度算法归纳总结,看完这些你就全明白了
- InnoDB的行锁,原来为你做了这么多
- 教你怎样饮茶最健康,饮茶要健康
- 黑茶与普洱迷你配,普洱熟茶与黑茶的区别
- 教你制作银杏叶保健茶,养生保健茶
- 运势|神回复:什么职业可以避免社交啊?最好是什么人都不麻烦你。
- 从qq头像看性格 你的性格如何
- 咳嗽总不好?或许你需要这五个良方
- 几点喝姜茶你知道吗,你知道吗
