分布式架构常见问题

文章详细阐述了缓存穿透、缓存击穿和缓存雪崩的问题定义、影响及解决方案,同时探讨了微服务架构的概念、优缺点以及分布式和微服务的区别。此外,还讨论了微服务间通讯的方式、API层和网关的作用,以及网关与Nginx、Zookeeper的差异,并介绍了Nginx的常见负载均衡策略。
摘要由CSDN通过智能技术生成

目录

一、缓存相关问题

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

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

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

二、微服务架构的相关问题

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

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

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

2.4、什么是网关,网关和api层有什么区别,为什么要新增一个api层?

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

2.6、网关和zookeeper区别?

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


一、缓存相关问题

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

缓存穿透是指在使用缓存的过程中,出现无法命中缓存的情况。具体来说,指的是某个请求在缓存中不存在,但是在数据库中也不存在的情况。因此,这个请求会占用服务器等资源,直到超时,导致系统性能下降甚至宕机。

缓存穿透带来的问题包括:

  1. 大量的请求直接命中数据库,导致数据库宕机

  2. 占用过多的系统资源

  3. 延长响应时间,影响用户体验

解决缓存穿透的方法有以下几种:

  1. 在缓存中添加空对象,用来标识请求无效的情况

  2. 对请求参数加密,在缓存中存储加密后的结果,无效请求则不会命中缓存

  3. 设置定时清空缓存,以避免失效数据长时间占用缓存资源

  4. 使用布隆过滤器等数据结构,对请求进行过滤,减少对数据库的直接访问。

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

缓存击穿是指某个热点数据在缓存中过期或者被删除时,大量并发请求同时访问这个数据,导致缓存失效,请求直接落到数据库上,占用大量系统资源,导致系统性能下降甚至宕机的情况。

缓存击穿带来的问题包括:

  1. 数据库承受大量请求,压力过大而宕机,导致系统不可用

  2. 缓存命中率降低,导致系统性能下降

  3. 延长响应时间,影响用户体验

解决缓存击穿的方法有以下几种:

  1. 对热点数据设置更长的过期时间,或者添加定时刷新机制,避免同时过期

  2. 使用分布式锁,避免多个线程同时进行对数据库的访问

  3. 使用互斥锁,或者从缓存中访问数据时判断是否为空并加锁,再进行数据库查询,在加锁期间,其他线程如果访问到了该数据,会等待该线程完成后再进行访问

  4. 使用缓存预热机制,提前把一些热点数据加载到缓存中,降低缓存击穿的频率

  5. 在数据查询时加入空对象或默认值,防止缓存穿透,并且避免大量请求同时访问数据库

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

缓存雪崩是指缓存中的大量数据同时过期或者失效,在高并发的情况下,大量请求同时访问数据库,导致系统瞬间承受巨大的访问压力,甚至直接宕机的情况。

缓存雪崩带来的问题包括:

  1. 大量请求压垮数据库,导致系统不可用

  2. 业务受到严重影响,用户无法正常访问系统

  3. 数据丢失,导致系统出现数据一致性问题

解决缓存雪崩的方法有以下几种:

  1. 对缓存数据的过期时间进行随机化或是加入定时刷新机制,避免大量数据同时失效

  2. 使用缓存高可用方案,比如redis-cluster、redission等,避免单机器崩溃或网络故障导致整个缓存数据丢失

  3. 针对重要的数据进行冷备,保证在数据丢失时可以快速进行恢复

  4. 数据库承受不住请求压力时,可以通过增加数据库并发能力、缓存预热机制等方式避免大量请求打到数据库。另外,可以加入随机因子,减少缓存雪崩的同时,也为数据的负载均衡提供一定缓冲

  5. 对于不同的业务系统,根据业务特点采取不同的缓存策略,以保证系统对缓存的使用安全可靠。

二、微服务架构的相关问题

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

微服务是一种架构风格,它将一个大型的应用程序分为多个小型服务,每个服务独立运行、独立部署、独立维护,服务间通过轻量级的通信机制进行通信,实现高可用、高可扩展、高并发、松耦合的软件系统。

单体架构的优点包括:

  1. 学习成本低,易于开发和维护

  2. 代码规模小,开发、测试、部署、运维相对简单

  3. 实现功能集中化,对于小规模的系统适用

  4. 数据交互简单,通信效率高

  5. 执行效率高,相对简单的设计能够提供良好的性能

单体架构的缺点包括:

  1. 可扩展性差,难以应对高并发量和无限制的扩展需求

  2. 单点故障,一旦系统出现故障,可能导致整个系统瘫痪

  3. 开发、测试、部署和维护的复杂度增加,代码膨胀、模块耦合、功能臃肿

  4. 系统销毁重建的成本高,影响项目的整体发展

微服务架构的优点包括:

  1. 微服务之间高度解耦,容易开发、维护和扩展

  2. 每个微服务独立运行、独立部署、独立维护,可以大大提高系统的可用性和可扩展性

  3. 可以指定最佳工具、技术和语言去实现,更大程度上发挥各个人员的专业技能优势

  4. 可以采用微服务方式提供对外接口,实现跨平台、多语言的开发

  5. 可以针对不同服务进行容器化,使系统管理更加灵活

微服务架构的缺点包括:

  1. 微服务之间的网络通信成本较大,需要相应的高效通信方案

  2. 微服务的数量增多会导致管理复杂

  3. 服务可复用性不高,存在大量代码重复或微服务之间的耦合问题

  4. 需要增加负载均衡、服务发现和网关等复杂的架构技术

  5. 对部署、测试和维护的工作提出更高要求

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

分布式:分散部署

微服务:分散能力

分布式系统是由多个独立的计算机节点组成的系统,这些节点通过网络互相通信和协调,以共同完成一项任务。分布式系统可以提供更高的可靠性、可扩展性和灵活性,但也面临着一些挑战,如节点之间的通信延迟、数据同步问题等。

微服务是一种架构风格,通过将应用程序拆分成一系列小型服务来实现。每个服务都是独立的,它们可以相互协作来完成一个大型系统的功能。微服务采用松耦合的架构,并使用轻量级通信机制如RESTful API来实现服务之间的交互。微服务的优势在于能够提高系统的可伸缩性、灵活性和可维护性。

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

           1,RPC:远程调用(dubbo协议)

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

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

        2,MQ:消息队列

优点:解耦,异步,削峰

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

2.4、什么是网关,网关和api层有什么区别,为什么要新增一个api层?

网关(Gateway)是一种通过网络连接不同系统和服务的统一入口和出口点。网关可以在不同协议、不同网络和不同计算机之间传递数据,可以进行协议转换、安全认证、负载均衡、缓存数据等多种功能。

API层是指应用程序的接口层,位于应用程序的业务逻辑层之上,负责处理外部请求,完成请求的相应处理,最终将结果返回给请求方。API层通常遵循某个标准协议,如HTTP协议、SOAP协议等。

网关和API层的区别在于网关通常位于服务架构的边缘,对外提供服务,充当着统一入口和出口点的角色,而API层则是服务架构内部的逻辑处理层。

为什么要新增一个API层呢?API层可以将业务逻辑与网络通讯进行解耦,使得业务逻辑更易于维护和扩展,同时也方便各个服务之间的调用。而网关则可以作为API层的保护层,完成请求的鉴权、负载均衡等功能。所以,新增一个API层可以提高系统的灵活性、可扩展性和安全性。

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

网关作为微服务架构中的一个组件,具有以下几个重要的作用:

  1. 统一鉴权和认证:网关可以对访问的客户端进行身份验证和鉴权,保证只有授权访问的用户能够访问业务系统,增强了系统的安全性。

  2. 负载均衡:网关可以根据配置的负载均衡策略将请求分发到不同的服务实例中,避免某个实例被过度访问,提高了系统的可用性和性能。

  3. 熔断和限流:网关可以对流量进行限制和限流,避免服务因请求量过大而发生雪崩效应,并能够自动降级和恢复。

  4. 消息转发和转换:网关可以将不同协议和格式的消息转换为服务端可识别的格式,减少了服务之间的调用复杂度。

与 Nginx 相比,网关是一种更加专业化和定制化的反向代理服务器,在微服务架构中可以充当统一的 API 网关和服务端负载均衡器。相比而言,Nginx 不是专为服务治理而设计的,它的定位更多是静态内容分发和负载均衡。但是,Nginx 的并发处理量和性能比较高,可以应对大规模的流量。

2.6、网关和zookeeper区别?

网关和 Zookeeper 都是微服务架构中的关键组件,但是它们的职责和作用有所不同。

网关主要负责微服务架构中的 API 网关管理,包括请求的路由,负载均衡和限流等,主要侧重于客户端和后端微服务之间的通信管理。

ZooKeeper 是一个分布式协调服务,它主要负责微服务架构中的配置管理、服务注册和发现、分布式锁等,主要侧重于后端微服务之间的通信管理。Zookeeper 提供了一个分布式协调服务,以在分布式系统中进行应用程序协作和配置管理,可以让客户端快速找到服务的提供者,支持负载均衡和故障转移等高可用的功能。

需要注意的是,ZooKeeper 提供了一些 API,可以在应用程序中使用,但它不是像网关那样作为中间层来管理微服务架构的 API 路由和流量控制。

因此,网关主要是负责微服务间的 API 管理,而ZooKeeper 则是负责微服务间的协同与配置管理。两者都是微服务架构中不可少的组件,而且它们的功能互不重叠,可以配合使用来构建高可用、可靠、可扩展的微服务架构。

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

  1. 按权重进行负载均衡策略:根据每个后端服务器的权重值决定分配的请求比重,分配满足权重比例的请求流量。权重高的服务器分配的请求量较多,而权重低的服务器分配的请求较少。

  2. IP hash 负载均衡策略:该方式是根据请求来源客户端的 IP 地址进行哈希计算,将同一客户端的请求始终分发到同一台后端服务器上,保持会话一致性。

  3. 轮询负载均衡策略:请求依次按顺序分配到每个后端服务器,循环进行分配,实现简单,适合稳定的请求量。

  4. 随机负载均衡策略:根据后端服务器的数量,以均匀的随机权重分配请求,实现多样化的请求分配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ADRU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值