八股系列(分布式与微服务)持续更新!

八股系列(分布式与微服务)

  1. 分布式系统的概念

    • 分布式系统是由多个节点组成,节点之间通过网络协议传递数据,对外表现为一个统一的整体,一个节点可以是一台机器或一个进程;
    • 分布式系统的核心功能
      • 资源共享,多个节点可以通过网络通信共享数据、存储、计算能力等,常用协议如RPC、HTTP、消息队列等;
      • 高可用性,某些节点宕机,系统仍然可以继续服务;
      • 可扩展性,可以轻松添加机器,增强系统能力;
      • 并发处理,多个请求可以并行处理,提高性能;
      • 透明性,用户无需关注后台有多少台机器,怎么通信;
    • 分布式系统常见的挑战有:
      • CPA定理:一个分布式系统最多满足一以下三个中的两个:一致性、可用性、分区容错性;
      • 如何解决不同节点之间可能存在的通信延迟;
      • 部分节点可能随时崩溃,系统要能进行自动恢复;
  2. springcloud

    • 是一个基于SpringBoot的微服务架构开发工具,提供了一套完整的分布式解决方案;
    • 包括服务注册与发现、配置管理、负载均衡、熔断器、智能路由、分布式消息队列等功能;
  3. nacos的底层原理

    • nacos是阿里巴巴开源的动态服务发现、配置管理和服务治理平台、其底层原理涵盖服务注册与发现、配置管理、数据一致性协议等;
    • nacos分为客户端和服务端,客户端提供可视化的服务注册实例,服务实例启动时,通过Nacos客户端将自身的元数据注册到nacos服务器,客户端会随机选择一个nacos节点发送注册请求,若该节点非服务的负责节点,会将请求路由至正确的节点处理。注册信息存储在nacos的内存数据结构中,并通过一致性协议同步至其他节点;
    • 服务消费者通过nacos客户端查询所需服务的可用实例列表,客户端会定期向nacos服务器拉取最新的服务实例,保持本地缓存的更新。当服务实例发生变化时,nacos服务器会主动推送变更通知,确保客户端感知最新的服务状态;
  4. Dubbo是如何实现分布式

    • Dubbo是阿里巴巴开源的一个高性能Java RPC远程过程调用框架,专门用于构建分布式服务架构,他主要解决的是服务之间的通信、调用、注册、发现和治理问题;
    • 可以通过pom引入注册中心例如naco或zookeeper进行服务注册与发现,使用@DubboService与@DubboReference与@EnableDubbo这些注解启动dubbo框架;
    • dubbo是开发阶段集中开发,部署时会将多个模块分别打包,在不同的服务器上运行;
  5. SpringCould与Dubbo的区别

    • 两者都是目前主流的微服务技术栈

    • 在定位上,Dubbo专注于高性能RPC框架,SpringCloud是微服务全家桶框架

    • 在通信协议上,Dubbo基于Dubbo自定义二进制协议,高性能。SpringCloud基于HTTP/REST或消息中间件;

    • 在调用方式上,Dubbo使用RPC调用,就像调用本地方法一样。SpringCloud使用RESTful API调用(通常是HTTP接口);

    • 注册中心上,都可以有不同的选型,现在常用的都是Nacos;

    • 服务网关上,Dubbo没有默认,需要自行接入Nginx或SpringCloudGateway等。SpringCloud则是自带的SpringCloudgateway/zuul;

    • 在负载均衡上,Dubbo内置的有随机/轮循/一致性哈希,SpringCloud搭载的有LoadBalancer;

  6. 谈谈你对微服务的理解?

    • 微服务是一种软件架构风格,将一个复杂的系统按照业务能力拆分成多个小型服务,每个服务可以独立的进行开发、部署、配置和扩展;
    • 不再依赖单个项目,业务自己做主,部署单个方面的业务,并且可以使用不同的语言、数据库、框架,单个服务挂掉还不会影响整个系统;
  7. 微服务和分布式的区别

    • 分布式是指一个系统部署在多个节点上,节点间通过网络协同完成业务,提高可用性与扩展性,是一种系统部署架构;
    • 微服务是一种将系统按照业务功能拆分为多个小服务的架构风格,每个服务可独立开发、部署,是一种软件设计思想;
    • 分布式偏向物理部署结构,微服务偏向业务逻辑划分;
    • 分布式系统强调系统运行在多个节点上以实现高性能、高可用,是一种系统架构模式。而微服务则是一种设计理念,它强调将系统按照业务维度拆分为多个小服务,强调服务自治、灵活部署。微服务本身就是构建在分布式架构之上的,因此两者是包含与被包含的关系;
相关推荐
风萧何17 分钟前
架构艺术,是权衡的艺术。
前端·javascript·架构
她的男孩1 小时前
我把管理系统接给AI,它改条数据都要先问我
java·后端·架构
AI探索派1 小时前
Agent Teams和Agent Swarm是什么?多Agent协作原理实战拆解
人工智能·架构·agent
这个DBA有点耶2 小时前
MySQL主从延迟的“最后一公里”:如何把延迟压到极限
数据库·程序员·架构
Mr-Wanter2 小时前
初识 Spring Boot 4:一场关于“快”与“变”的技术跃迁
架构·springboot4
DianSan_ERP2 小时前
WMS接入电商平台自动化履约实战:一张订单从平台到出库的接口时序设计
java·前端·网络·数据库·安全·架构·自动化
richard_first2 小时前
Transformer 与大语言模型:第2章 Transformer 总体架构
深度学习·架构·transformer
焦虑的说说2 小时前
订单库多表合并重构:零停机、无感知与数据一致性保障实践
重构·架构
liangsheng_g2 小时前
微服务本地开发零配置隔离方案
java·微服务·架构
@atweiwei3 小时前
用 Rust 构建 Agent 应用的高性能框架:langchainrust 架构全景
人工智能·架构·rust·langchain·llm·agent·ai编程