SpringCloud系列之一---搭建高可用的Eureka注册中心

news2025/2/24 8:15:17
前言

本篇文章主要介绍的是SpringCloud相关知识、微服务架构以及搭建服务注册与发现的服务模块(Eureka)以及Eureka集群。

GitHub源码链接位于文章底部。

什么是SpringCloud

Spring Cloud 是一系列框架的有序集合。 它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发, 如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。Spring 并没有复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 SpringBoot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

SpringCloud 与 SpringBoot 的关系

Spring Boot是Spring的一套快速配置脚手架,可以基于Spring Boot快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;Spring Boot 使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot来实现,可以不基于Spring Boot吗?不可以。
Spring Boot可以离开Spring Cloud独立使用开发项目, 但是Spring Cloud离不开Spring Boot,属于依赖的关系。

SpringCloud 主要组件
用途组件
服务发现Netflix Eureka
服务调用Netflix Feign
熔断器Netflix Hystrix
服务网关Netflix Zuul
分布式配置Spring Cloud Config
消息总线Spring Cloud Bus
SpringCloud 与 Dubbo 对比

dubbo由于是二进制的传输,占用带宽会更少。
springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大。
dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决。
Dubbo只是实现了服务治理,而Spring Cloud下面有很多个子项目分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,一定程度来说,Dubbo 只是 Spring CloudNetflix 中的一个子集。

DubboSpringCloud
服务注册中心ZookeeperSpring Cloud Netflix Eureka
服务调用方式RPCREST API
服务网关Spring Cloud Netflix Zuul /Spring Cloud GateWay
熔断器不完善Spring Cloud Netflix Hystrix
分布式配置Spring Cloud Config
服务跟踪Spring Cloud Sleuth
消息总线Spring Cloud Bus
数据流Spring Cloud Stream
批量任务Spring Cloud Task
..................
SpringCloud 的版本

SpringCloud 由于是一系列框架组合,为了避免与包含的自框架版本产生混淆,采用伦敦地铁站的名称作为版本名,形式为版本名+里程碑号。M9为第 9 个里程碑版本。以下是SpringBoot与Spring Cloud版本的对照表。

Spring BootSpring Cloud
1.2.xAngel 版本
1.3.xBrixton 版本
1.4.xCamden 版本
1.5.xDalston 版本、 Edgware 版本
2.0.xFinchley 版本
服务发现组件 Eureka

Eureka是Netflix 开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件:Eureka Server和Eureka Client。

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

自我保护机制

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向EurekaServer发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。但是在短时间内丢失大量的实例心跳,这时候EurekaServer会开启自我保护机制,Eureka不会踢出该服务,这就是Eureka的自我保护机制。
产生原因:在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last min),当后者(最后一分钟收到的心跳数)小于前者(心跳阈值)的时候,触发保护机制,会出现红色的警告:

EMERGENCY!EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT.RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEGING EXPIRED JUST TO BE SAFE.

从警告中可以看到,eureka认为虽然收不到实例的心跳,但它认为实例还是健康的,eureka会保护这些实例,不会把它们从注册表中删掉。

该保护机制的目的是避免网络连接故障,在发生网络故障时,微服务和注册中心之间无法正常通信,但服务本身是健康的,不应该注销该服务,如果eureka因网络故障而把微服务误删了,那即使网络恢复了,该微服务也不会重新注册到eureka server了,因为只有在微服务启动的时候才会发起注册请求,后面只会发送心跳和服务列表请求,这样的话,该实例虽然是运行着,但永远不会被其它服务所感知。所以,eureka server在短时间内丢失过多的客户端心跳时,会进入自我保护模式,该模式下,eureka会保护注册表中的信息,不在注销任何微服务,当网络故障恢复后,eureka会自动退出保护模式。自我保护模式可以让集群更加健壮。

但是我们在开发测试阶段,需要频繁地重启发布,如果触发了保护机制,则旧的服务实例没有被删除,这时请求有可能跑到旧的实例中,而该实例已经关闭了,这就导致请求错误,影响开发测试。所以,在开发测试阶段,我们可以把自我保护模式关闭,只需在eureka server配置文件中加上如下配置即可:

#eureka基本配置信息
eureka:
  client:
    service-url:
      #Eureka 客户端与 Eureka 服务端进行交互的地址
      defaultZone: http://127.0.0.1:${server.port}/eureka
    #是否将自己注册到Eureka服务中,本身就是注册中心所以无需注册
    register-with-eureka: false
    #是否从Eureka中检索注册信息,本身就是注册中心所以无需检索
    fetch-registry: false
  server:
    # 测试时关闭自我保护机制,保证不可用服务及时踢出
    enable-self-preservation: false
    ##剔除失效服务间隔
    eviction-interval-timer-in-ms: 2000

在eureka client配置文件中加上:

#eureka基本配置信息
eureka:
  client:
    service-url:
      #Eureka 客户端与 Eureka 服务端进行交互的地址
      defaultZone: http://127.0.0.1:8100/eureka/
  # 心跳检测检测与续约时间
  # 测试时将值设置设置小些,保证服务关闭后注册中心能及时踢出服务
  instance:
    # Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
    lease-renewal-interval-in-seconds: 1
    # Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
    lease-expiration-duration-in-seconds: 2

但在生产环境,不会频繁重启,所以,一定要把自我保护机制打开,否则网络一旦中断,就无法恢复。
当然关于自我保护还有很多个性化配置,这里不详细说明。

注意考虑网络不可达情况下:调用接口幂等、重试、补偿等。

创建工程
1. 目前工程结构
image
2. 首先创建父工程springcloud,以后这个工程下存放子工程eureka,feign,zuul等组件

将该工程的src文件夹删除,在pom文件中添加依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath ></relativePath>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <!--引用仓库-->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <!--管理依赖,子项目中的依赖不用列出版本号-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.M9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
创建eureka父工程

新建springcloud-eureka项目,在pom文件中添加依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
创建eureka服务端

以springcloud-eureka为父工程,新建springboot-eureka-server项目,这里不需要添加eureka-server依赖,因为父工程中有了。

1. 添加配置

在resources目录中添加application.yml文件,在文件中添加配置

#服务端口号
server:
  port: 8100

spring:
  application:
    name: eureka-server
    
#eureka基本配置信息
eureka:
  client:
    service-url:
      #Eureka 客户端与 Eureka 服务端进行交互的地址
      defaultZone: http://127.0.0.1:${server.port}/eureka
    #是否将自己注册到Eureka服务中,本身就是注册中心所以无需注册
    register-with-eureka: false
    #是否从Eureka中检索注册信息,本身就是注册中心所以无需检索
    fetch-registry: false
  server:
    # 测试时关闭自我保护机制,保证不可用服务及时踢出
    enable-self-preservation: false
    ##剔除失效服务间隔
    eviction-interval-timer-in-ms: 2000

2. 启动类

java目录下创建com.lxg二级目录,然后创建EurekaServerApp启动类

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class, args);
    }
}

在类上加EnableEurekaServer注解,启动EurekaServer。

创建eureka客户端

以springcloud-eureka为父工程,新建springboot-eureka-client项目。在pom文件中添加依赖:

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
1. 添加配置

在resources目录中添加application.yml文件,在文件中添加配置

#端口号
server:
  port: 9100

spring:
  application:
    name: eureka-client

#eureka基本配置信息
eureka:
  client:
    service-url:
      #Eureka 客户端与 Eureka 服务端进行交互的地址
      defaultZone: http://127.0.0.1:8100/eureka/
  # 心跳检测检测与续约时间
  # 测试时将值设置设置小些,保证服务关闭后注册中心能及时踢出服务
  instance:
    # Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
    lease-renewal-interval-in-seconds: 1
    # Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
    lease-expiration-duration-in-seconds: 2
2. 启动类

java目录下创建com.lxg二级目录,然后创建EurekaClientApp启动类,这里启动类名称不能为EurekaClient,否则会起冲突导致启动失败。类上使用EnableEurekaClient注解。

@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApp {
    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApp.class, args);
    }
}
测试

先启动服务端,再启动客户端,访问127.0.0.1:8100 ,访问监控页面。


image

图中的红色字体是在提示已经关闭了eureka的自我保护机制,此时如果关闭客户端,页面中的服务就会被踢出,如果没有关闭的话,即使客户端关闭了,服务依然会存在。

高可用注册中心(Eureka集群)

在微服务中,注册中心非常核心,可以实现服务治理,如果一旦注册出现故障的时候,可能会导致整个微服务无法访问,在这时候就需要对注册中心实现高可用集群模式。

Eureka高可用原理

默认情况下Eureka是让服务注册中心,不注册自己,但是在集群中,需要设置能注册自己,因为这两个属性默认为true,只需要不写就行了。

###使该注册中心注册自己
    register-with-eureka: true
###需要去注册中心上检索服务
    fetch-registry: true

Eureka高可用实际上将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组相互注册的服务注册中心,从而实现服务清单的互相同步,达到高可用效果。

Eureka集群环境搭建

新增server1,server2,server3三个节点。


image

server1配置:

#服务端口号
server:
  port: 8100

spring:
  application:
    name: eureka-server

#eureka基本配置信息
eureka:
  client:
    service-url:
      #Eureka 客户端与 Eureka 服务端进行交互的地址
      defaultZone: http://127.0.0.1:8200/eureka,http://127.0.0.1:8300/eureka
  server:
    # 测试时关闭自我保护机制,保证不可用服务及时踢出
    enable-self-preservation: false
    ##剔除失效服务间隔
    eviction-interval-timer-in-ms: 2000

server2配置:

#服务端口号
server:
  port: 8200

spring:
  application:
    name: eureka-server

#eureka基本配置信息
eureka:
  client:
    service-url:
      #Eureka 客户端与 Eureka 服务端进行交互的地址
      defaultZone: http://127.0.0.1:8100/eureka,http://127.0.0.1:8300/eureka
  server:
    # 测试时关闭自我保护机制,保证不可用服务及时踢出
    enable-self-preservation: false
    ##剔除失效服务间隔
    eviction-interval-timer-in-ms: 2000

server3配置:

#服务端口号
server:
  port: 8300

spring:
  application:
    name: eureka-server

#eureka基本配置信息
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8100/eureka,http://127.0.0.1:8200/eureka
  server:
    # 测试时关闭自我保护机制,保证不可用服务及时踢出
    enable-self-preservation: false
    ##剔除失效服务间隔
    eviction-interval-timer-in-ms: 2000

然后修改客户端的配置,因为以前是单个eureka注册中心,只需要注册进一个地址就行了,现在要注册进所有的注册中心。

#端口号
server:
  port: 9100

spring:
  application:
    name: eureka-client

#eureka基本配置信息
eureka:
  client:
    service-url:
      #Eureka 客户端与 Eureka 服务端进行交互的地址
      #单机
      #defaultZone: http://127.0.0.1:8100/eureka/
      #集群
      defaultZone: http://127.0.0.1:8100/eureka/,http://127.0.0.1:8200/eureka/,http://127.0.0.1:8300/eureka/
  # 心跳检测检测与续约时间
  # 测试时将值设置设置小些,保证服务关闭后注册中心能及时踢出服务
  instance:
    # Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
    lease-renewal-interval-in-seconds: 1
    # Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
    lease-expiration-duration-in-seconds: 2

先启动所有的服务端节点,再启动客户端。访问localhost:8100 ,localhost:8200 ,localhost:8300 都能进入eureka的界面,同时看到客户端服务和其他的注册中心。这个时候即使有某一个节点挂了,服务依然是可用的,而且性能肯定比单机版要好。

搭建eureka集群有几点需要注意的:

1.与先前独立运行注册不同,注意defaultZone属性,它的值为除了自己以外的所有eureka节点的地址,以英文逗号分割。
2.去掉fetch-registry 与 register-with-eureka配置(其实这样做就会取对应的默认值,两个值均为true),需要让自己能被注册和检索。
3.启动第一个注册中心时会报Cannot execute request on any known server的错误,暂时不管它,实际上eureka注册中心的ui界面是能打开的,当所有的节点启动完毕,就能找到服务,此错误就会消失。
4.所有注册中心的节点的spring.application.name必须保持一致。
5.当客户端需要往注册中心集群注册服务时defaultZone属性需要把所有节点地址都加上,如果像单节点一样的话,你连接的那个节点挂了,集群中其他节点就无法获取到该服务,也就不能达到高可用。

本文GitHub源码:https://github.com/lixianguo5097/springcloud/tree/master/springcloud-eureka

CSDN:https://blog.csdn.net/qq_27682773
简书:https://www.jianshu.com/u/e99381e6886e
博客园:https://www.cnblogs.com/lixianguo

最后编辑于:2024-09-18 20:52:00


喜欢的朋友记得点赞、收藏、关注哦!!!

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

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

相关文章

如何使用ssm实现基于web的物流配送管理系统的设计与实现+vue

TOC ssm646基于web的物流配送管理系统的设计与实现vue 第一章 绪论 1.1研究背景与意义 在科学技术水平还比较低下的时期&#xff0c;企业通常采用人工登记的方式对相关的物流配送信息进行记录&#xff0c;而后对这些信息记录进行管理和控制。这种采用纸质存储信息的管理模式…

平安养老险广东分公司:防范非法集资,守护消费者“钱袋子”

随着经济的不断发展&#xff0c;非法集资犯罪案件频频发生。非法集资案件受害人多&#xff0c;涉及资金广&#xff0c;犯罪手段多元化&#xff0c;涉案财物追缴困难等等。为提升金融消费者风险防范意识&#xff0c;保障其合法经济利益&#xff0c;今天我们一起来学习防范非法集…

利用条件编译解决vivado下verilog代码中ila与仿真的共存问题

vivado自带的仿真工具已经接近Modelsim的功能&#xff0c;且与原生开发环境的紧密结合&#xff0c;对仿真非常方便。 我的习惯是在实现工程中另外建一个仿真工程&#xff0c;保存仿真的testbench文件等&#xff0c;而实现工程中保存实际功能的源码文件。 这样仿真时会存在一个问…

PyQGIS开发 1 环境配置

PyQGIS 开发环境配置 1 安装QGIS QGIS官方下载地址 Windows环境下载对应版本的msi文件双击进行安装。 2 安装 PyCharm PyCharm官方下载地址 PyCharm官方提供专业版&#xff08;收费&#xff09;和社区版&#xff08;免费&#xff09;两个版本&#xff0c;自行选择下载、安…

Oracle EBS form个性化中调用带参数的存储过程或者函数

方式1 通过活动-消息 调用 这个方式的特点是会有一个消息弹框&#xff0c;不需要弹框时可以用方式2 方式2 通过 内置-执行过程 这个地方【变元】中的引用有点复杂&#xff0c;其中参数要用如下格式进行 #三个单引号||项目的表达式 ||${item.BLOCKNAME.FIELDNAME.value}|| #如…

从入门到精通,玩转Python的print函数(探索Python print函数的隐藏功能)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 基础用法参数详解示例📝 高级用法自定义分隔符和结束符输出到文件追加模式📝 覆盖打印与进度条简单覆盖打印动态进度条示例代码⚓️ 相关链接 ⚓️📖 介绍 📖 刚开始学习编程时,我们接触到的第一个方…

运行npm install 时,卡在sill idealTree buildDeps没有反应

一直停留在sill idealTree buildDeps 解决方法 npm config set registry https://registry.npm.taobao.org 配置后用下面命令看是否配置成功 npm config get registry 如果配置还不好使 就执行下行的ssl npm set strict-ssl false 然后执行 npm install 成功执行

线程池的类型和状态

一、线程池的类型 1.通过Executors工具类创建的线程池对象 Executors.newFixedThreadPool(nThreads)&#xff1a;固定线程数目的线程池&#xff1b; 核心线程数和最大线程数一致&#xff1b;只要非核心线程空闲&#xff0c;则立刻被回收&#xff1b;工作队列为无界队列。 Exe…

基于yolov8的DMS驾驶员抽烟打电话喝水吃东西检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的DMS&#xff08;驾驶员监控系统&#xff09;驾驶员抽烟、打电话、喝水、吃东西检测系统是一种利用先进计算机视觉技术的实时监测系统。该系统通过YOLOv8算法&#xff0c;一种在速度和准确性上均表现优异的实时目标检测算法&#xff0c;实现对驾驶员行…

Spring Controller

服务器控制 响应架构 Spring Boot 内集成了 Tomcat 服务器&#xff0c;也可以外接 Tomcat 服务器。通过控制层接收浏览器的 URL 请求进行操作并返回数据。 底层和浏览器的信息交互仍旧由 servlet 完成&#xff0c;服务器整体架构如下&#xff1a; Server&#xff1a; Tomcat…

达梦数据库配置SSL通信加密

相关概念&#xff1a; SSL通过在发送方和接收方之间建立加密通道&#xff0c;确保数据在传输过程中的安全性和完整性。 SSL的关键特点 加密通信&#xff1a;SSL使用对称和非对称加密技术来加密数据&#xff0c;确保数据在传输过程中不被窃听或篡改。 身份验证&#xff1a;通…

若依VUE项目安全kind-of postcss vite漏洞扫描和修复

npm install unplugin-auto-import0.16.7 npm install vite3.2.11 升级vite、unplugin-auto-import npm install 报错New major version of npm available! 8.5.5 -> 10.8.3&#xff0c;使用命令npm install --force npm install --force

源代码防泄密的危害有哪些?担心源代码泄露?教你五种方法彻底阻止源代码泄密问题!

在数字经济蓬勃发展的今天&#xff0c;源代码&#xff0c;这个企业的核心技术资产&#xff0c;其安全性直接关系到企业的竞争力与生存。 一旦源代码泄露&#xff0c;不仅可能导致巨大的经济损失&#xff0c;更可能让企业陷入法律纠纷与声誉危机。 那么&#xff0c;源代码防泄密…

SOMEIP_ETS_117: SD_Entry_references_options_of_same_kind

测试目的&#xff1a; 验证DUT能够处理一个包含两种相同类型选项的SubscribeEventgroup消息&#xff0c;DUT可以选择拒绝订阅尝试或忽略该请求。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&#xff0c;当接收到一个包含重复相同类型选项的SubscribeEventgroup消息时&#…

Gitlab学习(009 gitlab冲突提交)

尚硅谷2024最新Git企业实战教程&#xff0c;全方位学习git与gitlab 总时长 5:42:00 共40P 此文章包含第30p-第p34的内容 文章目录 冲突提交不同人修改不同文件不同人修改同文件的不同区域不同人修改同文件的相同区域 同时变更文件名和文件内容gitLab功能拓展code review代码复…

自动驾驶,被逼着上市?

上市了&#xff0c;然后呢&#xff1f; 转载&#xff1a;定焦&#xff08;dingjiaoone&#xff09;原创 作者 | 黎明 编辑 | 魏佳 很多人从来没体验过自动驾驶&#xff0c;但自动驾驶公司正在抢着上市。 今年以来&#xff0c;已有十多家自动驾驶相关公司启动上市流程。最新上…

halcon中的放射变换

放射变换原理 怎样计算放射变换 仿射变换affine是透视变换的子集 - 仿射矩阵 仿射变换矩阵为2*3的矩阵&#xff0c;第三列的元素起着平移的作用&#xff0c;前面两列的数字对角线上是缩放&#xff0c;其余为旋转或者斜切的作用 - 计算仿射矩阵只需要3对不共线的点 定义 指…

ozon买家网址是什么,跨境电商ozon买家网址

在网购的世界里&#xff0c;每一个平台都像是一座宝藏岛&#xff0c;等待着我们去探索、去发现。而提到跨境电商&#xff0c;不得不提的一个名字就是Ozon&#xff0c;它对于许多跨境购物爱好者来说&#xff0c;简直就是打开国际购物大门的金钥匙。那么&#xff0c;今天咱们就来…

米客方德SD NAND 掉电测试

SD NAND 异常上下电测试的作用 SD NAND 异常上下电测试是一项关键的测试步骤&#xff0c;对确保SD NAND在不同电源条件下的稳定性和可靠性至关重要。 通过模拟正常和异常电源情况&#xff0c;测试可以验证设备的电源管理功能、检测潜在错误和异常行为&#xff0c;并评估设备在…

巨人网络参展云栖大会,两款“游戏+AI”自研大模型应用首发

9月19日&#xff0c;2024云栖大会在杭州开幕&#xff0c;巨人网络携多项“游戏AI”新成果首次参展&#xff0c;两款自研大模型GiantGPT、BaiLing-TTS应用首发&#xff0c;巨人摹境、AI数字人等AI新技术亮相&#xff0c;全方位展示其作为中国“游戏AI”先行者在人工智能领域的前…