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

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

  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. 微服务和分布式的区别

    • 分布式是指一个系统部署在多个节点上,节点间通过网络协同完成业务,提高可用性与扩展性,是一种系统部署架构;
    • 微服务是一种将系统按照业务功能拆分为多个小服务的架构风格,每个服务可独立开发、部署,是一种软件设计思想;
    • 分布式偏向物理部署结构,微服务偏向业务逻辑划分;
    • 分布式系统强调系统运行在多个节点上以实现高性能、高可用,是一种系统架构模式。而微服务则是一种设计理念,它强调将系统按照业务维度拆分为多个小服务,强调服务自治、灵活部署。微服务本身就是构建在分布式架构之上的,因此两者是包含与被包含的关系;
相关推荐
阿萨德528号5 分钟前
Maven 项目构建笔记 - 单体应用与简单微服务
笔记·微服务·maven
Coder_Boy_11 分钟前
业务导向型技术日志记录(2)
java·人工智能·驱动开发·微服务
free-elcmacom28 分钟前
机器学习高阶教程<8>分布式训练三大核心策略拆解
人工智能·分布式·python·机器学习
HuangYongbiao30 分钟前
NestJS 架构设计系列:应用服务与领域服务的区别
后端·架构
沉迷技术逻辑31 分钟前
微服务保护和分布式事务
分布式·微服务·架构
MarkHD1 小时前
智能体在车联网中的应用:第11天 CARLA自动驾驶仿真入门:从零安装到理解客户端-服务器架构
服务器·架构·自动驾驶
凤凰战士芭比Q1 小时前
Jenkins(分布式、用户管理)
运维·分布式·jenkins
专注API从业者1 小时前
构建企业级 1688 数据管道:商品详情 API 的分布式采集与容错设计
大数据·开发语言·数据结构·数据库·分布式
Wnq100721 小时前
解构中心化困境:工业控制SCADA的延时与可靠性症结及分布式边缘计算转型路径
人工智能·分布式·云计算·去中心化·边缘计算
野蛮人6号1 小时前
黑马微服务 p23Docker02 docker的安装 如何正确安装docker,黑马微服务给的文档不行了,如何正确找到解决方法
java·docker·微服务·架构