常用分布式组件
本周学习了分布式缓存,消息队列与异步架构,负载均衡架构、分布式数据库。
1. 分布式缓存
缓存的关键指标是 缓存的命中率,影响缓存命中率的主要指标有:
缓存键集合大小
缓存可使用内存空间
缓存对象生存空间
分布式缓存的优缺点:
支持大数据量存储,不受应用进程重启影响。
分布式缓存由于是独立部署的进程,拥有自身独立的内存空间,不会受到应用进程重启的影响,在应用进程重启时,分布式缓存的数据依然存在。同时对于数据量而言,由于不需要占用应用进程的内存空间,并且一般支持以集群的方式拓展,故可以进行大数据量的数据缓存。
数据集中存储,保证数据一致性。
当应用进程采用集群方式部署时,集群的每个部署节点都通过一个统一的分布式缓存进行数据存取操作,故不存在本地缓存中的数据更新问题,保证了不同节点的应用进程的数据一致性问题。
数据读写分离,高性能,高可用
分布式缓存一般支持数据副本机制,可以实现读写分离,故可以解决高并发场景中的数据读写性能问题。并且由于在多个缓存节点冗余存储数据,提高了缓存数据的可用性,避免某个缓存节点宕机导致数据不可用问题。
数据跨网络传输,性能低于本地缓存
由于分布式缓存是独立部署的进程,并且一般都是与应用进程位于不同的机器,故需要通过网络来进行数据传输,这样相对于本地缓存的进程内部的数据读取操作,性能会较低。
分布式缓存的常见问题:
缓存穿透(解决方案:放入一个特殊对象)
缓存击穿(解决方案:更新缓存时使用分布式锁锁住服务,防止请求穿透直达DB)
缓存雪崩(解决方案:缓存时间使用基本时间加上随机时间)
分布式缓存的实现:
分布式缓存的典型实现包括 MemCached 和 Redis。
2. 消息队列与异步架构
消息队列构建异步调用架构:
点对点模型
发布订阅模型
使用消息队列的作用:解耦、异步、削峰填谷、失败隔离和自我修复。
消息队的优点和缺点:
优点:
1. 对结构复杂、设计系统多的操作进行解耦操作,降低系统的操作复杂度、降低系统的维护成本。
对一个可以进行异步操作的一些系统操作进行异步,减小操作的响应时间,提供更好的用户体验。
可对高流量进行削峰,保证系统的平稳运行。
缺点:
1、系统可用性降低。比如在系统中引入MQ,那么万一MQ挂了怎么办呢?一般而言,引入的外部依赖越多,系统越脆弱,每一个依赖出问题都会导致整个系统的崩溃。
2、系统复杂度提高。需要考虑MQ的各种情况,比如:消息的重复消费、消息丢失、保证消费顺序等等......
3、数据一致性问题。比如A系统已经给客户返回操作成功,这时候操作BC都成功了,操作D却失败了,导致数据不一致。
常见消息队列对比
3. 负责均衡架构
常见的负载均衡实现有很多,有出名的硬件负载均衡,如 F5、Netscaler;还有常见开源的负载均衡,比如 LVS、HAProxy、Nginx,甚至 Apache 也能做负载均衡(不推荐)。我们常说的七层负载均衡、四层负载均衡,也是基于 OSI 七层模型的。基于 OSI 七层模型的底层原理,我们把常见的负载均衡具体划分为以下几个类型:二层、三层、四层、七层。最后再加上一个除 OSI 七层模型以外的 DNS,通过 DNS 做负载均衡的场景也是非常常见的。
负载均衡算法可以分为两类:
静态负载均衡算法,包括轮询、比率、优先权。
动态负载均衡算法,包括最少连接数、最快响应速度、观察方法、预测法、动态性能分配、动态服务器补充、服务质量、服务类型、规则模式。
4. 分布式数据库
MySQL分布式数据库架构:
主从复制
主主复制
5. 总结
本次课信息量很大,要整理相关的资料可能都需要好几天,更不用说都知道了。不过老师在课上说了,做为架构师,并不需要知道所有的技术细节(如果有时间,还是可以多花点时间尽可能地多了解),但是需要知道技术的特性、优缺点,在什么样的场景下能使用,这样在技术选型的时候就可以做到心中有数。
6. 参考资料
评论