【架构师训练营 - 周总结 -5】
这周讲了缓存、消息队列、异步调用、负载均衡、分布式数据库。
缓存
缓存的出现,主要就是解决对数据的快速读取,减少重复的计算,降低服务器资源使用。如在CDN上缓存静态页面资源可以有效的降低应用服务器网络IO的使用。
基于缓存作用的场景,缓存的命中率为主要性能指标。能够帮助应用服务器拦截越多的重复请求,那么其能力越强。为了达到较高的缓存命中率,除了需要一定的算法支撑缓存服务器在自身的数据集中查找缓存外。还应该平衡缓存覆盖面与缓存集合大小,如缓存热点数据。
缓存终归是缓存,使用时不能偏离其核心作用。如对其修改,虽然可行,但偏离初衷。职责单一。
消息队列,异步框架
生产者消费者模型使用队列将生产者和消费者解耦,生产者只需要负责生产事件,无需等待处理结果,提升了服务器的吞吐量。同时消费者也无需实时返回生产者处理结果,按需处理事件,在保证了消费者服务器安全的同时也提升了事件处理的成功率。
市面上的队列产品很多,各产品的优缺点不一,应根据实际场景使用
在该模型下,生产者不会同步等待处理结果,需要通过异步的方式告知生产者处理结果(如果需要)。
同时,该模型毕竟增加了一个节点(队列),增加了故障率。需要考虑引入队列后带来的其他问题。如延时、数据丢失
负载均衡
集群部署除了保障可用性外,同时也希望能够集合多台服务器的能力提供更强吞吐量。保证每台服务器的负载基本一致就是负载均衡。
上面提到的消息队列其实也是一种负载均衡,各服务器根据自身的能力来消费事件,难出现有服务器忙死有的闲死的情况。
但负载均衡更多的体现在网络请求上。HTTP负载均衡、DNS负载均衡、IP负载均衡等作用在网络传输不同层上达到了负载均衡的效果。
负载均衡的目的时达到负载均衡,若算法出现问题,导致负载不均衡可能会导致灾难性的后果。
分布式数据库
暂只提及了一主多从、多主(不推荐)。
读写分离,保障主流程的写,对读操作使用另一台服务器保障快速读取,且与写操作不互相影响。
主从间数据同步的实现方式会影响实际业务中读的时效性,如mysql的处理机制天然的存在一定的延时。但若如Kafka则提供了选项保证主从间数据一致性(可选)。
这次的总结,感觉,没写什么东西,有些流水账了。
版权声明: 本文为 InfoQ 作者【小动物】的原创文章。
原文链接:【http://xie.infoq.cn/article/a6bfda9f873a2da05dc0cbfc4】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论