1.分布式与微服务区别?
-
概念层面:
-
分布式系统:是指一组独立的计算机节点通过网络协同工作,共同完成一个大任务,这些节点各自拥有本地资源并在分布式的环境中相互协作。分布式系统的设计目标是为了提高系统的可靠性、可用性、可扩展性和稳定性。
-
微服务架构:是一种特殊的分布式系统实现方式,它强调将单一的应用程序拆分成一系列小型、互相独立的服务。每个微服务都是一个小型的、完整的业务单元,包含了自己的业务逻辑、数据库及对外暴露的API接口。每个微服务都可以独立开发、部署、扩展和维护,并且可以使用不同的技术栈。微服务架构的核心理念是围绕业务能力组织服务,强调服务之间的松耦合和高内聚。
-
粒度划分:
-
分布式系统中的服务划分粒度可大可小,可以包含多个紧密相关的业务功能。
-
微服务倾向于更为细粒度的服务划分,每个服务只专注于一个特定的业务功能,并力求做到“做一件事并做好”。
-
目标:
-
分布式系统旨在解决大型系统的计算能力和存储能力扩展问题,通过负载均衡、冗余备份等方式提高系统整体性能和稳定性。
-
微服务架构则着重于软件工程方面的优化,如简化开发流程、提升团队协作效率、加速新功能上线、适应快速变化的业务需求等。微服务进一步提升了系统的灵活性,但也带来了服务间通信、数据一致性、运维复杂性等方面的挑战。
2.美团面试题-Nacos配置中心动态刷新原理(重要度9.5分)
Nacos 使用长轮询机制来实现实时配置更新。具体过程如下:
1.客户端发起请求:客户端通过后台线程发起一个 HTTP 请求到 Nacos 服务端,用于监听配置变化。
2.服务端挂起连接:Nacos 服务端接收到请求后,会挂起(hold)这个 HTTP 连接一段时间(例如 30 秒),在此期间服务端监控配置文件的变化。
3.无变化情况:若在这段时间内没有检测到配置文件有任何变更,服务端将释放连接并向客户端返回一个指示,表明配置没有更新。
4.配置变更情况:如果在挂起期间检测到配置文件发生变化,服务端会立即释放连接并将最新的配置推送给客户端。
5.循环轮询:无论哪种情况,客户端在接收完响应后,会在短暂延迟(如 10 毫秒)之后重新发起一个新的 HTTP 请求,从而形成循环轮询机制以持续监听配置更新。
这种方式使得客户端能够及时获取到最新的配置信息,同时减少了不必要的频繁请求。
Nacos配置中心动态刷新原理.mp4(15.9 MB)- 0%
3.腾讯面试题:Nacos和Eureka有什么区别(重要度3分)
一、架构与模式
-
Eureka:
- 采用了客户端-服务器(Client-Server, CS)架构。
- Eureka Server作为服务注册中心,负责维护服务实例列表。
- Eureka Client作为服务提供者或消费者,定期向Eureka Server发送心跳来维持服务实例的有效性。
- 只支持AP(Availability优先)模式。
-
Nacos:
- 采用了高可用的对等(Peer-to-Peer, P2P)设计,所有的server节点都是同等作用。
- 支持AP(Availability优先)和CP(Consistency优先)两种模式。
- 根据配置识别CP或AP模式,如果注册Nacos的client节点注册时是ephemeral=true即为临时节点,那么Nacos集群对这个client节点效果就是AP,反之则是CP。
二、实例与健康检查
-
Eureka:
- 只支持临时实例。
- 对实例的健康检查采用心跳模式。
-
Nacos:
- 实例有永久和临时实例之分。
- 对临时实例采用心跳模式检测,对永久实例采用主动请求来检测。
- 支持HTTP和TCP两种健康检查方式,TCP连接方式可以更精确地判断服务实例是否真正可用。
三、服务发现机制
-
Eureka:
- 采用基于拉模式的服务发现机制。
- Eureka Client定期从Eureka Server拉取服务信息更新本地缓存。
- 这种方式在服务数量较少时工作良好,但在大规模部署时可能会导致较高的网络负载。
-
Nacos:
- 采用基于推模式的服务发现机制。
- Nacos Server会主动推送服务信息的变化给Nacos Client。
- 这种方式使得服务发现更为实时,尤其在AP模式下,适合大规模的服务部署。
四、通信与连接管理
-
Eureka:
- 基于HTTP RESTful API进行通信。
- 客户端和服务端之间的交互依赖于HTTP请求,集成相对简单,但可能在服务间通信时不如TCP高效。
- 采用短连接的方式,服务实例与Eureka Server之间的通信基于定时的心跳消息,每次通信后连接可能会关闭。
-
Nacos:
- 同时支持HTTP和TCP两种通信方式。TCP方式的引入使得Nacos在服务间的通信上更为高效。
- 连接管理方式取决于使用的通信协议。使用TCP协议时,可以利用长连接的优势减少建立连接的开销,提高通信效率。
五、自我保护机制
-
Eureka:
- 有一个自我保护机制。当在短时间内续约失败的比例达到一定阈值时,Eureka Server会进入自我保护模式,避免误删服务实例。
- 这种机制有助于防止网络分区故障导致的服务不可用,但保护机制相对固定,缺乏灵活性。
-
Nacos:
- 保护机制更为灵活,允许用户自定义健康检查和保护策略。
- 可以根据具体的业务需求调整服务发现的行为。
六、元数据管理与功能丰富性
-
Eureka:
- 元数据信息较为简单,主要关注服务的基本信息,如服务名称、IP地址和端口号等。
-
Nacos:
- 元数据管理更为丰富,支持服务分类、权重、健康状态等信息。
- 这种丰富的元数据支持使得Nacos在服务治理方面提供了更多的灵活性和控制力。
七、适用场景与选择建议
-
Eureka:
- 对于小规模应用,Eureka提供了简单易用的服务发现机制。
- 如果服务数量不多,且对性能要求不高,Eureka是一个很好的选择。
- 但需要注意的是,Netflix已经宣布停止对Eureka的积极开发和支持,这可能意味着Eureka在未来不会添加新功能,甚至可能无法及时修复一些安全漏洞和关键性问题。
-
Nacos:
- 对于大规模应用,Nacos提供了更强大的服务发现和管理功能。
- 如果服务数量较多,且对性能和可用性有较高要求,Nacos是一个更好的选择。
- Nacos以其先进的设计理念和丰富的功能特性,在大规模分布式系统中表现出色。
综上所述,Nacos和Eureka在架构、实例与健康检查、服务发现机制、通信与连接管理、自我保护机制、元数据管理与功能丰富性等方面都存在显著差异。在选择时,应根据具体的应用场景、服务数量、性能要求以及未来的维护和支持等因素进行综合考虑。