八股系列(分布式与微服务)
-
分布式系统的概念
- 分布式系统是由多个节点组成,节点之间通过网络协议传递数据,对外表现为一个统一的整体,一个节点可以是一台机器或一个进程;
- 分布式系统的核心功能
- 资源共享,多个节点可以通过网络通信共享数据、存储、计算能力等,常用协议如RPC、HTTP、消息队列等;
- 高可用性,某些节点宕机,系统仍然可以继续服务;
- 可扩展性,可以轻松添加机器,增强系统能力;
- 并发处理,多个请求可以并行处理,提高性能;
- 透明性,用户无需关注后台有多少台机器,怎么通信;
- 分布式系统常见的挑战有:
- CPA定理:一个分布式系统最多满足一以下三个中的两个:一致性、可用性、分区容错性;
- 如何解决不同节点之间可能存在的通信延迟;
- 部分节点可能随时崩溃,系统要能进行自动恢复;
-
springcloud
- 是一个基于SpringBoot的微服务架构开发工具,提供了一套完整的分布式解决方案;
- 包括服务注册与发现、配置管理、负载均衡、熔断器、智能路由、分布式消息队列等功能;
-
nacos的底层原理
- nacos是阿里巴巴开源的动态服务发现、配置管理和服务治理平台、其底层原理涵盖服务注册与发现、配置管理、数据一致性协议等;
- nacos分为客户端和服务端,客户端提供可视化的服务注册实例,服务实例启动时,通过Nacos客户端将自身的元数据注册到nacos服务器,客户端会随机选择一个nacos节点发送注册请求,若该节点非服务的负责节点,会将请求路由至正确的节点处理。注册信息存储在nacos的内存数据结构中,并通过一致性协议同步至其他节点;
- 服务消费者通过nacos客户端查询所需服务的可用实例列表,客户端会定期向nacos服务器拉取最新的服务实例,保持本地缓存的更新。当服务实例发生变化时,nacos服务器会主动推送变更通知,确保客户端感知最新的服务状态;
-
Dubbo是如何实现分布式
- Dubbo是阿里巴巴开源的一个高性能Java RPC远程过程调用框架,专门用于构建分布式服务架构,他主要解决的是服务之间的通信、调用、注册、发现和治理问题;
- 可以通过pom引入注册中心例如naco或zookeeper进行服务注册与发现,使用@DubboService与@DubboReference与@EnableDubbo这些注解启动dubbo框架;
- dubbo是开发阶段集中开发,部署时会将多个模块分别打包,在不同的服务器上运行;
-
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;
-
-
谈谈你对微服务的理解?
- 微服务是一种软件架构风格,将一个复杂的系统按照业务能力拆分成多个小型服务,每个服务可以独立的进行开发、部署、配置和扩展;
- 不再依赖单个项目,业务自己做主,部署单个方面的业务,并且可以使用不同的语言、数据库、框架,单个服务挂掉还不会影响整个系统;
-
微服务和分布式的区别
- 分布式是指一个系统部署在多个节点上,节点间通过网络协同完成业务,提高可用性与扩展性,是一种系统部署架构;
- 微服务是一种将系统按照业务功能拆分为多个小服务的架构风格,每个服务可独立开发、部署,是一种软件设计思想;
- 分布式偏向物理部署结构,微服务偏向业务逻辑划分;
- 分布式系统强调系统运行在多个节点上以实现高性能、高可用,是一种系统架构模式。而微服务则是一种设计理念,它强调将系统按照业务维度拆分为多个小服务,强调服务自治、灵活部署。微服务本身就是构建在分布式架构之上的,因此两者是包含与被包含的关系;