Eureka 原理与实践全攻略

news2024/9/20 0:04:58

一、Eureka 概述 

Eureka 在微服务架构中具有举足轻重的地位。它作为服务注册与发现的核心组件,为分布式系统中的服务管理提供了关键支持。

Eureka 的主要功能包括服务注册、服务发现、服务健康监测和自我保护机制。服务注册功能使得服务提供者能够在启动时将自身的信息,如服务名称、IP 地址、端口等,注册到 Eureka 服务器上,方便后续被其他服务发现和调用。服务发现功能则允许服务消费者从 Eureka 服务器获取所需服务的实例列表,从而实现服务之间的通信和协作。

服务健康监测是 Eureka 保障系统稳定性的重要手段。服务实例会定期向 Eureka 服务器发送心跳,以表明自身的健康状态。若服务器在一段时间内未收到某个实例的心跳,就会将其视为不健康并从注册表中移除,避免服务消费者调用到不可用的服务。

自我保护机制是 Eureka 的一大特色。当网络出现异常或大量服务实例心跳异常时,Eureka 服务器不会立即剔除这些实例,而是进入自我保护模式,以防止误判导致正常服务被错误移除,从而保持服务的可用性。

总之,Eureka 通过这些功能,有效地解决了微服务架构中服务管理的复杂问题,提高了系统的可靠性和可扩展性。

二、Eureka 的核心概念

(一)服务注册

当服务提供者启动时,Eureka Client 会将其服务的详细信息,如服务名称、IP 地址、端口、服务版本等,封装成特定的数据结构,并通过 HTTP 协议向 Eureka Server 发送注册请求。Eureka Server 接收到注册请求后,会将这些信息存储在内部的数据结构中,通常是一个类似于注册表的结构。

在这个过程中,关键的原理在于服务提供者需要准确地提供自身的关键信息,以便 Eureka Server 能够有效地识别和管理。同时,Eureka Server 要具备高效的存储和检索机制,能够快速地处理大量的服务注册请求,并保证数据的一致性和可靠性。

(二)服务发现

服务消费者在需要调用其他服务时,会通过 Eureka Client 向 Eureka Server 发送获取服务实例列表的请求。Eureka Server 会根据请求的服务名称,从注册表中查找相应的服务实例信息,并将其返回给服务消费者。

服务消费者获取到实例列表后,通常会采用一定的负载均衡策略,如随机、轮询等,选择其中一个实例进行调用。这个机制的关键在于服务消费者能够准确地向 Eureka Server 表达自己的需求,并能够有效地处理返回的实例列表,以实现高效的服务调用。

(三)心跳检测

服务端和客户端之间通过定期发送心跳来维持服务状态。客户端会按照一定的时间间隔(默认通常为 30 秒)向服务端发送心跳包,以告知服务端自己仍然处于可用状态。

心跳检测的原理在于服务端通过接收心跳包来更新服务实例的状态信息,如果在一定时间内(默认通常为 90 秒)未收到某个服务实例的心跳,服务端就会认为该实例不可用,并将其从注册表中移除。

心跳检测的作用主要有两个方面。一是能够及时发现不可用的服务实例,避免服务消费者调用到故障的服务;二是能够让服务端了解服务实例的实时状态,为服务发现提供准确的信息。

三、Eureka 的工作原理

alt

(一)服务注册流程

当服务提供者启动时,它会通过 Eureka Client 向 Eureka Server 发送包含自身详细信息(如服务名称、IP 地址、端口等)的注册请求。Eureka Server 接收到请求后,会将这些信息存储在内部的注册表中。同时,Eureka Server 还会将新注册的服务信息同步到其他节点,以保证整个集群中的注册表信息一致。在存储过程中,Eureka Server 会对服务信息进行有效性验证,确保关键信息的完整性和准确性。此外,为了提高注册的效率和可靠性,Eureka Server 采用了优化的存储结构和数据同步策略。

(二)服务发现流程

服务消费者在需要调用其他服务时,通过 Eureka Client 向 Eureka Server 发送服务发现请求,指定所需服务的名称。Eureka Server 接收到请求后,根据服务名称在注册表中查找匹配的服务实例信息,并将其返回给服务消费者。服务消费者收到实例列表后,通常会基于预设的负载均衡策略(如随机、轮询等)选择一个合适的实例进行调用。在这个过程中,Eureka Server 会快速响应请求,并提供最新、准确的实例信息,而服务消费者需要能够有效地处理返回的实例列表,确保选择的合理性和高效性。

(三)自我保护模式

自我保护机制的触发条件通常是在一定时间内(如 15 分钟),如果 Eureka Server 检测到心跳失败的比例低于预设阈值(如 85%),就会触发自我保护。其运行原理是当触发自我保护后,Eureka Server 不再从注册列表中移除因长时间未收到心跳而应过期的服务,同时仍然接受新服务的注册和查询请求,但不会将新的注册信息同步到其他节点。自我保护模式的作用在于避免因网络故障等原因导致正常服务被误剔除,保证服务的可用性。然而,在自我保护期间,如果服务确实非正常下线,可能会导致服务消费者调用失败,因此服务消费者端需要具备容错机制,如重试、断路器等。

四、Eureka 的关键特性

(一)服务注册与发现

服务注册与发现极大地简化了服务间的依赖管理。通过服务注册,服务提供者能够自动将自身信息注册到 Eureka 中,服务消费者无需手动配置服务地址,只需通过服务名称即可获取可用的服务实例列表。这种方式降低了服务配置的复杂性,提高了服务部署的灵活性和可扩展性。同时,服务注册与发现机制能够动态感知服务的上线和下线,实现服务的自动发现和更新,避免了因服务地址变更而导致的服务调用失败。

(二)集群支持

Eureka Server 集群通常采用两两相互注册的方式进行部署。每个节点都需要发现集群中的其他节点并建立连接,通过心跳机制来维持连接状态。在数据同步方面,当某个节点接收到服务注册、更新或删除等操作时,会将这些变更同步到其他节点,以保证整个集群中服务注册表的一致性。这种数据同步机制确保了即使部分节点出现故障,服务注册与发现功能仍然能够正常运行,提高了系统的可用性和容错性。

(三)客户端缓存

客户端缓存服务实例列表能够显著提升性能。当服务消费者获取到服务实例列表后,将其缓存在本地。这样,在后续的服务调用中,如果需要再次获取相同服务的实例列表,就可以直接从本地缓存中获取,减少了对 Eureka Server 的频繁请求,降低了网络开销和服务器负载。同时,本地缓存还能在 Eureka Server 暂时不可用的情况下,提供一定时间内的可用服务实例信息,保障服务调用的连续性。

(四)健康检查

Eureka 通过心跳机制监控服务实例的健康状态。服务实例定期向 Eureka Server 发送心跳,Eureka Server 根据心跳的接收情况来判断服务实例是否健康。这种健康检查方法能够及时发现不可用的服务实例,避免服务消费者调用到故障的服务,从而提高服务调用的成功率和系统的稳定性。此外,健康检查还为服务的自动扩展和故障恢复提供了依据,有助于优化系统的资源分配和服务质量。

(五)自我保护模式

自我保护模式是应对网络异常和服务失效的有效策略。当网络出现故障或大量服务实例心跳异常时,Eureka Server 不会立即剔除这些实例,而是进入自我保护状态。这避免了因短暂的网络波动或服务异常导致大量正常服务被误剔除,保障了服务的可用性。在自我保护期间,Eureka Server 仍然能够接受新的服务注册和查询请求,为系统的恢复争取了时间。一旦网络恢复正常或服务实例的心跳恢复正常,Eureka Server 会自动退出自我保护模式,恢复正常的服务剔除逻辑。

(六)REST API

Eureka 提供的 RESTful API 具有丰富的功能,包括服务注册、服务发现、服务实例状态管理等。这些 API 可以方便地与其他系统进行集成,例如监控系统可以通过调用这些 API 获取服务的注册信息和健康状态,实现对服务的实时监控和告警。同时,运维人员也可以通过这些 API 对服务注册与发现进行手动干预和管理,满足特定的运维需求。此外,开发人员还可以利用这些 API 开发自定义的管理工具和界面,提升服务管理的便捷性和可视化程度。

五、Eureka 实战案例

(一)创建 Eureka Server

创建 Eureka Server 需要以下几个步骤:

  1. 添加依赖:在项目的 pom.xml 文件中添加 spring-cloud-starter-netflix-eureka-server 依赖,以便引入 Eureka Server 相关的功能。
    <dependency>
    
    <groupId>org.springframework.cloud</groupId>
    
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    
    </dependency>
  2. 配置文件设置:在 src/main/resources/application.yml 文件中进行如下配置,设置服务器的端口和 Eureka 相关的参数。
    server:
    
    port: 8761
    
    eureka:
    
    instance:
    
    hostname: localhost
    
    client:
    
    register-with-eureka: false
    
    fetch-registry: false
    
    service-url:
    
    defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  3. 启动类注解:在主启动类上添加 @EnableEurekaServer 注解,启用 Eureka Server 功能。
    import org.springframework.boot.SpringApplication;
    
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    
    @EnableEurekaServer
    
    public class EurekaServerApplication {
    
    public static void main(String[] args) {
    
    SpringApplication.run(EurekaServerApplication.class, args);
    
    }
    
    }

(二)创建服务提供者(Eureka Client)

创建服务提供者的流程如下:

  1. 添加依赖:在服务提供者项目的 pom.xml 文件中添加 spring-cloud-starter-netflix-eureka-client 依赖。
    <dependency>
    
    <groupId>org.springframework.cloud</groupId>
    
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    
    </dependency>
  2. 配置:在 src/main/resources/application.yml 文件中配置 Eureka 相关信息。
    spring:
    
    application:
    
    name: service-provider
    
    eureka:
    
    client:
    
    service-url:
    
    defaultZone: http://localhost:8761/eureka/
  3. 启动类注解:在主启动类上添加 @EnableDiscoveryClient 注解。
    import org.springframework.boot.SpringApplication;
    
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    
    @EnableDiscoveryClient
    
    public class ServiceProviderApplication {
    
    public static void main(String[] args) {
    
    SpringApplication.run(ServiceProviderApplication.class, args);
    
    }
    
    }

(三)创建服务消费者(Eureka Client)

创建服务消费者的流程与服务提供者类似,需要注意以下几点:

  1. 同样需要在 pom.xml 文件中添加 spring-cloud-starter-netflix-eureka-client 依赖。
  1. 配置文件中的 spring.application.name 需根据服务消费者的名称进行修改。
  1. 启动类同样添加 @EnableDiscoveryClient 注解。

在实际开发中,服务消费者通过从 Eureka Server 获取服务提供者的实例列表,然后根据负载均衡策略选择合适的实例进行调用,实现服务之间的通信和协作。

六、Eureka 高可用

(一)实现高可用的配置

要实现 Eureka 的高可用性,通常需要创建多个 Eureka Server 节点并进行相互注册。以下是具体的配置步骤:

  1. 创建多个配置文件,例如 application-peer1.yml、application-peer2.yml 等,分别为每个节点设置不同的端口和服务 URL。
    server:
    
    port: 8091
    
    spring:
    
    application:
    
    name: eureka-server
    
    eureka:
    
    instance:
    
    hostname: peer1
    
    client:
    
    register-with-eureka: true
    
    fetch-registry: true
    
    service-url:
    
    defaultZone: http://peer2:8092/eureka/, http://peer3:8093/eureka/
  2. 在本地的 hosts 文件中进行域名映射,例如:127.0.0.1 peer1 peer2 peer3 。
  3. 分别以不同的配置文件启动各个 Eureka Server 节点。

通过以上配置,多个 Eureka Server 节点形成一个集群,实现了高可用性,当其中一个节点出现故障时,其他节点仍能正常提供服务。

(二)服务注册与故障处理

在高可用环境下,服务注册的方式与单个 Eureka Server 时类似,服务提供者仍然向其中一个 Eureka Server 节点注册自身信息。但不同的是,由于存在多个 Eureka Server 节点,注册信息会在节点之间进行同步。

当发生故障时,Eureka 具有一定的应对策略。例如,如果某个 Eureka Server 节点故障,服务提供者的心跳信息无法传递到该节点,但只要其他节点正常工作,服务提供者不会被误判为下线。同时,服务消费者在获取服务实例列表时,能够从其他正常的 Eureka Server 节点获取到最新的信息,并根据负载均衡策略选择可用的服务实例进行调用。此外,Eureka 的自我保护机制在高可用环境下也能发挥重要作用,当网络故障或部分节点异常导致大量心跳失败时,能够避免误剔除正常的服务实例,保障服务的可用性。

七、Eureka 服务与服务之间调用方式

(一)直接调用方式

订单服务可以直接使用 RestTemplate 来调用商品服务。通过配置 RestTemplate 实例,并指定目标服务的 URL ,即可发送请求获取商品服务的数据。

@Autowired

private RestTemplate restTemplate;

public void callProductService() {

String response = restTemplate.getForObject("http://product-service/api/product", String.class);

// 处理响应

}

(二)Feign 调用方式

Feign 是一种声明式的 HTTP 客户端,可以更方便地定义和调用服务。首先需要在订单服务中添加 Feign 相关的依赖。

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

然后创建一个接口来定义与商品服务的交互。

@FeignClient(name = "product-service")

public interface ProductServiceClient {

@GetMapping("/api/product")

String getProduct();

}

在订单服务的业务逻辑中,直接调用这个接口的方法即可。

(三)负载均衡与调用策略

在服务间调用时,还需要考虑负载均衡策略。可以使用 Ribbon 来实现负载均衡,通过配置选择合适的算法,如轮询、随机等。同时,可以设置重试机制,当调用失败时进行一定次数的重试,提高调用的成功率。

product-service:

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

八、总结

        Eureka 在微服务架构中扮演着至关重要的角色。它为微服务提供了服务注册与发现的核心功能,使得服务之间能够动态地找到彼此,实现了服务的解耦和灵活部署。通过心跳检测和自我保护机制,保证了服务的可用性和稳定性,提高了整个微服务系统的可靠性。集群支持和高可用配置确保了在面对故障时系统能够持续运行,为企业级应用提供了坚实的基础。此外,Eureka 的客户端缓存和高效的服务调用方式提升了系统性能,减少了响应时间,满足了用户对快速响应的需求。

随着微服务架构的不断发展,Eureka 也面临着新的机遇和挑战。在未来,Eureka 可能会在以下方面不断发展:

  1. 性能优化:随着微服务数量的不断增加,对 Eureka 的性能要求也会越来越高。未来可能会通过优化算法、提高数据存储和查询效率等方式,进一步提升 Eureka 的性能。
  2. 与其他技术融合:Eureka 可能会与容器化技术、服务网格等新兴技术融合,为微服务架构提供更加全面的解决方案。例如,与 Kubernetes 等容器编排平台结合,实现更加自动化的服务管理。
  3. 智能化管理:利用人工智能和机器学习技术,对服务的健康状态进行预测和分析,实现智能化的故障排查和管理。
  4. 安全增强:随着微服务架构在企业中的广泛应用,对服务的安全性要求也会越来越高。未来 Eureka 可能会加强安全方面的功能,如身份验证、授权管理等。

总之,Eureka 作为微服务架构中的重要组件,在未来仍将发挥重要作用。随着技术的不断发展,它将不断优化和完善,为企业级微服务应用提供更加可靠、高效的服务注册与发现解决方案。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux安装配置docker,k8s

1.linux虚拟机初始配置 详情操作见下&#xff0c;具体操作需要注意 1.网络模式选择 NAT模式&#xff08;对应第8点&#xff09; 2.不用选择安装 GUI图形界面 (对应19点-5) 3.分区非必须操作 可以不分区(对应20点) 4.打开网络开关 (对应23点) CentOS 7安装教程&#xff…

利用GPTs,打造你的专属AI聊天机器人

在2023年11月的「OpenAI Devday」大会上&#xff0c;OpenAI再度带来了一系列令人瞩目的新功能&#xff0c;其中ChatGPT方面的突破尤为引人关注。而GPTs的亮相&#xff0c;不仅标志着个性化AI时代的到来&#xff0c;更为开发者和普通用户提供了前所未有的便利。接下来&#xff0…

C语言-部分字符串函数详解 1-4

C语言-部分字符串函数详解 1-4 前言1.strlen1.1基本用法1.2注意事项\0size_t 1.3模拟实现 2.strcpy2.1基本用法2.2注意事项**源字符串必须以 \0 结束****会将源字符串中的 \0拷贝到目标空间****目标空间必须可修改****目标空间必须能容纳下源字符串的内容** 2.3模拟实现 3.strn…

ES 模糊查询 wildcard 的替代方案探索

一、Wildcard 概述 Wildcard 是一种支持通配符的模糊检索方式。在 Elasticsearch 中&#xff0c;它使用星号 * 代表零个或多个字符&#xff0c;问号 ? 代表单个字符。 其使用方式多样&#xff0c;例如可以通过 {"wildcard": {"field_name": "value&…

【数据结构】关于冒泡排序,选择排序,插入排序,希尔排序,堆排序你到底了解多少???(超详解)

前言&#xff1a; &#x1f31f;&#x1f31f;Hello家人们&#xff0c;这期讲解排序算法的原理&#xff0c;希望你能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;http://t.csdnimg.cn/I1Ssq &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-C…

RK3568平台开发系列讲解(PWM篇)PWM的使用

文章目录 一、什么是PWM二、RK3568 PWM2.1、PWM 通道与引脚2.2、PWM 简介2.3、PWM 设备节点三、RK3568 PWM 调试节点📢 PWM 是很常用到功能,我们可以通过 PWM 来控制电机速度,也可以使用 PWM 来控制 LCD 的背光亮度。 一、什么是PWM PWM 全称是 Pulse Width Modulation,也…

XSS- - - DOM 破坏案例与靶场

目录 链接靶场&#xff1a; 第一关 Ma Spaghet 第二关 Jefff 第三关 Ugandan Knuckles 第四关 Ricardo Milos 第五关 Ah Thats Hawt 第六关 Ligma 第七关 Mafia 第八关 Ok, Boomer 链接靶场&#xff1a; XS…

SmartEDA崛起!揭秘其逐步取代Multisim与Proteus的四大颠覆性优势

在电子设计自动化&#xff08;EDA&#xff09;的浩瀚星空中&#xff0c;两款老牌软件——Multisim与Proteus&#xff0c;长久以来如同璀璨的双星&#xff0c;引领着电路仿真与设计的潮流。然而&#xff0c;近年来&#xff0c;一颗新星悄然升起&#xff0c;以其独特的魅力与强大…

《向量数据库 Faiss 搭建与使用全攻略》

一、Faiss 概述 Faiss 是由 Facebook AI 团队开发的一款强大工具&#xff0c;在大规模数据处理和相似性搜索领域占据着重要地位。 在当今信息爆炸的时代&#xff0c;数据规模呈指数级增长&#xff0c;如何从海量数据中快速准确地找到相似的数据成为了关键挑战。Faiss 应运而生…

【MeterSphere】占用磁盘空间过大问题处理方式

目录 一、现象 二、 清理docker系统命令&#xff08;效果不大&#xff09; 三、 追踪文件 四、 处理logs&#xff08;小处理&#xff09; 五、 对比容器问题发现node容器问题 六、结果 前言&#xff1a;部署ms使用一段时间&#xff0c;服务器监控发现磁盘空间占用过大&am…

基于SpringBoot的Java个人博客系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

【Unity教程】使用 Animation Rigging实现IK制作程序化的动画手臂跟随手自动移动等效果

在 Unity 开发中&#xff0c;为角色创建逼真且自适应的动画是提升游戏体验的关键。在本教程中&#xff0c;我们将结合 Animation Rigging 工具和 IK&#xff08;Inverse Kinematics&#xff0c;反向运动学&#xff09;插件来实现程序化的动画。 视频教程可以参考b战大佬的视频…

CLIP模型(一)

一、概念 Contrastive Language-Image Pre-Training(利用文本的监督信息训练一个迁移能力强的视觉模型) CLIP任务&#xff1a; CLIP在完全不使用ImageNet中所有数据训练的前提下 直接Zero-shot得到的结果与Resnet在128W Imagenet数据局训练后效果一样 现在CLIP下游任务已经…

Java-Mybatis-MybatisPlus

文章目录 Mybatis基础概念持久层框架比较环境搭建及工程创建核心配置文件xxxMapper.xml文件mybatis实现过程junit测试mybatis及优化查询sql语句 Mybatis-plus基础概述组成及实现过程SpringbootMybatisPlus使用过程 实战插入操作默认id Mybatis 基础 概念 历史&#xff1a;My…

学分绩点预警系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

【图像去噪】论文精读:Toward Convolutional Blind Denoising of Real Photographs(CBDNet)

文章目录 前言Abstract1. Introduction2. Related Work2.1. Deep CNN Denoisers2.2. Image Noise Modeling2.3. Blind Denoising of Real Images 3. Proposed Method3.1. Realistic Noise Model3.2. Network Architecture3.3. Asymmetric Loss and Model Objective3.4. Trainin…

分享世界上最好的5个滑雪小镇

滑雪爱好者和冬季旅行者们&#xff0c;听好了。随着北半球变成冰雪仙境&#xff0c;是时候计划下一个冰雪覆盖的冒险了。 无论你是一个经验丰富的专业人士还是一个滑雪新手&#xff0c;我们整理了世界上五个最好的滑雪小镇&#xff0c;帮助你找到你完美的白雪覆盖的天堂。 这些…

CPMF复现笔记(2):训练MVTecAD-3D数据集, 精度SOTA

文章来自曹云康的最新论文《Complementary Pseudo Multimodal Feature for Point Cloud Anomaly Detection》,在MVTecAD-3D取得了最佳分数。代码地址GitHub - caoyunkang/CPMF: [PR] Complementary Pseudo Multimodal Feature for Point Cloud Anomaly Detection 复现效果 …

【ARM Hypervisor And SMMU 系列 5 -- SMMU 和 IOMMU技术】

文章目录 SMMU 和 IOMMU技术ARM 的 SMMUTranslation process overviewTBU 和 TCU 的关系TBUTCUTLBSMMU 和 IOMMU技术 文章 讲到了为支持I/O透传机制中的DMA设备传输而引入的IOMMU/SMMU技术,同时留了一个问题:IOMMU/SMMU是否可以同时支持GVA->GPA和GPA->HPA的转换? 答案…

【学习笔记】卫星网络(NTN)的窄带物联网(NB-IoT)研究 -- 3GPP TR 36.763(二)

目录 6 无线层1的问题及相关解决方案 6.1 IoT NTN参考参数 6.2 链路预算分析 6.2.1 链路预算参数 6.2.2.1.1 Set-1 6.2.2.1.2 Set-2 6.2.2.1.3 Set-3 6.2.2.1.4 Set-4 6.2.2.1.5 Set-5 6.3 时间和频率同步增强 6.3.1 GNSS位置固定对UE功耗的影响 6.3.1…