缓存和微服务相关问题解析

目录

一、缓存相关

1.1、缓存穿透

1.2、缓存击穿

1.3、缓存雪崩

二、微服务

2.1、单体架构的优点和缺点,微服务架构的优点和缺点?

2.2、分布式和微服务的区别

2.3、微服务之间通讯的几种方式?有哪些优缺点?

2.4、微服务网关的几个重要的作用,网关和nginx的区别?

2.5、网关和zookeeper区别?

2.6、nginx几种常见的负载均衡策略。

2.7、xxljob和原生自带的定时任务有什么不同?


一、缓存相关

1.1、缓存穿透

1、什么是缓存穿透,缓存穿透带来的问题,如何解决缓存穿透?

答:缓存穿透:大量缓存中没有的key同时发出请求获取缓存,导致这些请求全部打到数据库上,让数据库崩溃。比如说我的key是数字(123),但是网络攻击者频繁的用字符串(abc)去获取缓存。导致永远无法命中缓存,直接查取的数据库。缓存的意义就是为了减少数据库压力。

解决方法:布隆过滤器

布隆过滤器是redis提供的一种数据结构。他可能在海量数据中(上千万)来判断当前值存不存在。布隆过滤器准确率不是百分之百。98%左右

具体的操作流程是:把所有可能存在的请求的值都存放在布隆过滤器中,当用户请求过来,先判断用户发来的请求的值是否存在于布隆过滤器中。不存在的话,直接返回请求参数错误信息给客户端,存在的话才会走正常的请求的流程。

1.2、缓存击穿

1、什么是缓存击穿,缓存击穿带来的问题,如何解决缓存击穿?

答:缓存击穿:比如说我的官网数据是热点数据,在并发非常高的时候,比如说高考报名的时候,这个是官网数据缓存过期了,会导致请求直接打在数据库上,造成崩溃。

解决方案:一些非常高频的热点数据,不设置过期时间。并且开启定时任务定期查看缓存有没有被删除,如果缓存不存在了,更新缓存。

不设置过期时间只能保证redis不会删,但是不能保证其他服务有没有可能删。

1.3、缓存雪崩

1、什么是缓存雪崩,缓存雪崩带来的问题,如何解决缓存雪崩?

答:缓存在同一时间大面积的失效,后面的请求都直接落到了数据库上,造成数据库短时间内承受大量请求。

解决方案:key的过期时间做合理的规划,对于高频数据,不设置过期时间。

什么时候需要考虑这些问题:先看用户量和并发量和数据量(单表数据达到200多万)。

二、微服务

2.1、单体架构的优点和缺点,微服务架构的优点和缺点?

①单体架构:

优点:架构简单,维护成本低

 缺点:各个模块的耦合度太高,比如说订单模块需要更新,其他模块也要跟着更新,当存在性能瓶颈的时候,需要对整个服务进行扩容,不能有针对性的扩容。

②微服务架构

优点:性能高,服务之间耦合性低。

缺点:架构复杂,维护成本高,会带来很多微服务架构的问题,比如说事务问题,网络问题。

2.2、分布式和微服务的区别

分布式:分散部署

微服务:分散能力

2.3、微服务之间通讯的几种方式?有哪些优缺点?

答:①RPC:远程调用(dubbo协议)

优点:相比于http调用,性能更高,因为少了一步序列化操作,还有就是因为http协议太重了,他有请求头,请求体...

缺点:架构复杂,需要引入注册中心。每个服务启动的时候都会将自己暴露的远程调用接口告诉注册中心。

②MQ:消息队列

优点:解耦,异步,削峰

缺点:分布式事务问题显得尤为突出,因为相比于同步调用方式,如果被调用方报错了,调用方感知不到。

2.4、微服务网关的几个重要的作用,网关和nginx的区别?

答:①统一鉴权,熔点限流,整个微服务后端所有的流量入口

②nginx支持的并发量比网关要多很多。nginx能够保证到达网关的流量都是有用的流量

2.5、网关和zookeeper区别?

答:网关主要是负责微服务http接口的负载均衡(更侧重于客户端和后端之间的通信),而zookeeper主要负责远程调用的负载均衡(后端微服务之间的通信)

2.6、nginx几种常见的负载均衡策略。

答:①根据权重负载均衡

②根据ip负载均衡

③轮询进行负载均衡

④随机负载均衡

2.7、xxljob和原生自带的定时任务有什么不同?

答:①xxljob:分布式任务调度

②原生自带的定时任务缺点:集群情况下,存在每台机器都执行的问题,xxljob解决了这个问题。

猜你喜欢

转载自blog.csdn.net/qq_54247497/article/details/131382847