分布式+消息队列+缓存雪崩 [复制链接]

2019-8-29 10:06
Hamals 阅读:645 评论:0 赞:1
Tag:  分布式 缓存

缓存雪崩

简介:缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩 掉。

解决办法(中华石杉老师在他的视频中提到过,视频地址在后一个问题中有提到):

事前:尽量保证整个 redis 集群的高可用性,发现机器宕机尽快补上。选择合适的内存淘汰策略。 事中:本地ehcache缓存 + hystrix限流&?#23548;叮?#36991;免MySQL崩掉 事后:利用 redis 持?#27809;?#26426;制保存的数据尽快恢复缓存

缓存穿透

简介:一般是黑客故意去请求缓存中不存在的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量 请求而崩掉。

解决办法: 有很多?#22336;?#27861;可以有效地解决缓存穿透问题,常见的则是采用布隆过滤器,将所有可能存在的数据哈 希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压 力。另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数 据不存 在,还是系统故?#24076;?#25105;们仍?#35805;?#36825;个空结果进行缓存,但它的过期时间会很短,长不超过五分钟。

消息队列

“RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词。我也在 我的多篇文章中提到了这个概念。可能你是熟练使用消息队列的老手,又或者你是不懂消息队列的新手,不论你了不 了解消息队列,本文都将带你搞懂消息队列的一些基本理论。如果你是老手,你可能从本文学到你之?#23433;?#26366;注意的一 些关于消息队列的重要概念,如果你是新手,相信本文将是你打开消息队列大门的一板砖。

什么是消息队列

我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。消息队 列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系?#25215;阅?#21644;削峰、降低系统耦合性。目前 使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ,我们后面会一一对比这些消息队列。 另外,我们知道队列 Queue 是一种先进先出的数据结构,所以消费消息时也?#21069;?#29031;?#25215;?#26469;消费的。比如生产者 发送消息1,2,3...对于消费者就会按照1,2,3...的?#25215;?#26469;消?#36873;?#20294;是?#32423;?#20063;会出现消息被消费的?#25215;?#19981;对的情况,比如某 个消息消费失败又或者一个 queue 多个consumer 也会导致消息被消费的?#25215;?#19981;对,我们一定要保证消息被消费的 ?#25215;?#27491;确。

除了上面说的消息消费?#25215;?#30340;问题,使用消息队列,我们还要考虑如何保证消息不?#24674;?#22797;消费?如何保证消息的 可靠?#28304;?#36755;(如何处理消息丢失的问题)?......等等问题。所以说使用消息队列也不是十全十美的,使用它也会让系 统可用性降低、复杂度提高,另外需要我们保障一致性等问题。

为什么要用消息队列

我觉得使用消息队列主要有?#38477;愫么Γ?.通过异步处理提高系?#25215;阅埽?#21066;峰、减少响应所需时间);2.降低系统耦 合性。如果在面试的时候你被面试官问到这个问题的话,一般情况是你在你的简历上涉及到消息队列这方面的内容, 这个时候推荐你结合你自己的项目来回答。

什么是分布式?

分布式或者说 SOA 分布式重要的就是面向服务,说简单的分布式就是我?#21069;?#25972;个系统拆分成不同的服务?#32531;?#23558;这些 服务放在不同的服务器上减轻单体服务的压力提高并发量和?#38405;堋?#27604;如电商系统可以简单地拆分成订单系统、商品系 统、登录系统等等,拆分之后的每个服务可以部署在不同的机器上,如果某一个服务的访问量比较大的话?#37096;?#20197;将这 个服务同时部署在多台机器上。

为什么要分布式?

从开发角度来讲单体应用的代码都集中在一起,而分布式系统的代码根据业务被拆分。所以,每个团队可以负责一个 服务的开发,这样提升了开发效率。另外,代码根据业务拆分之后更加便于维护和扩展。

另外,我觉得将系统拆分成分布式之后不光便于系统扩展和维护,更能提高整个系统的?#38405;堋?#20320;想一想嘛?把整个系 统拆分成不同的服务/系?#24120;缓?#27599;个服务/系统 单独部署在一台服务器上,是不是很大程度上提高了系?#25215;阅?#21602;?


我来说两句
您需要登录后才可以评论 登录 | 立即注册
facelist
所有评论(0)
领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:[email protected]

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )

阿拉斯加垂钓APP下载